Challenges of building distributed systems:
- How to connect different networks, OS, hardware, programming languages, ...
- How to extend them
- How to handle security
- How to scale them: algorithms, concurrency, infrastructure, ...
- How to make them fail-tolerant
- How to connect different networks, OS, hardware, programming languages, ...
- How to extend them
- How to handle security
- How to scale them: algorithms, concurrency, infrastructure, ...
- How to make them fail-tolerant
Compiler warnings are to be taken seriously
Otherwise, just disable them, at your own peril.
Otherwise, just disable them, at your own peril.
"Code is like humor. When you have to explain it, it's bad."
- Cory House
- Cory House
"C++ is designed to allow you to express ideas, but if you don't have ideas or don't have any clue about how to express them, C++ doesn't offer much help."
- Bjarne Stroustrup
- Bjarne Stroustrup
Merkle trees, also known as binary hash trees, are a type of binary tree.
hey can be used to efficiently verify the integrity of large sets of data.
They are used in both blockchain and non-blockchain-related projects.
hey can be used to efficiently verify the integrity of large sets of data.
They are used in both blockchain and non-blockchain-related projects.
Types of programming languages, based on "types":
- Strongly vs Weakly typed -> whether you are required to declare types for variables/functions.
- Statically vs Dynamically typed -> whether type checking is done at compile-time or run-time.
- Strongly vs Weakly typed -> whether you are required to declare types for variables/functions.
- Statically vs Dynamically typed -> whether type checking is done at compile-time or run-time.
Anything that can go wrong will go wrong
Anything that can't go wrong will go wrong anyway
Anything that can't go wrong will go wrong anyway
Software is more like science that mathematics.
You cannot prove that you'r software is correct (no bugs).
You can write a bunch of tests to show that your code hasn't failed (so far).
You cannot prove that you'r software is correct (no bugs).
You can write a bunch of tests to show that your code hasn't failed (so far).
It's possible to "increase the available RAM" on a Linux machine using disk.
The Linux virtual memory system can move data from memory disk and viceversa, in a process called swapping.
The disk area used to store memory pages is called swap space.
The Linux virtual memory system can move data from memory disk and viceversa, in a process called swapping.
The disk area used to store memory pages is called swap space.
The first 90% of a project takes 90% of development time.
The last 10% takes the other 90% of the time.
The last 10% takes the other 90% of the time.
In C++, to prevent resource leaks, use RAII
Resource Acquisition Is Initialization
Acquire resources in constructors and release them in destructors
Resource Acquisition Is Initialization
Acquire resources in constructors and release them in destructors
"Debugging is like being the detective in a crime movie where you are also the murderer."
- Filipe Fortes
- Filipe Fortes
Python's list comprehensions provides a concise way of creating a list from another.
For example:
cubes = [x**3 for x in a].
In general, they are clearer than maps and filters built-in function.
For example:
cubes = [x**3 for x in a].
In general, they are clearer than maps and filters built-in function.
Message queues in a tweet
- Allows for asych processing
- Stores messages that servers will read and process
- Adds reliability (no message is lost)
- Dead-letter queue: receives messages that couldn't be routed to their destination
- Ex: SQS, Kafka, Rabbit MQ, Pub/Sub
- Allows for asych processing
- Stores messages that servers will read and process
- Adds reliability (no message is lost)
- Dead-letter queue: receives messages that couldn't be routed to their destination
- Ex: SQS, Kafka, Rabbit MQ, Pub/Sub
In GCP, you can use preemptible virtual machines to save up to 80% of your costs.
They are ideal for fault-tolerant, non-critical applications.
You can save the progress of your job in a persistent disk using a shut-down script to continue where you left off.
They are ideal for fault-tolerant, non-critical applications.
You can save the progress of your job in a persistent disk using a shut-down script to continue where you left off.