The aim of these challenges is to learn more about the software systems we use everyday. One of the best ways to learn how something works is to implement it yourself. We will attempt to implement our own versions of systems like Redis, Memcached, Postgresql, Celery, Flask, etc. By thinking about and implementing our own version of these systems the internals will become transparent to us, allowing us to better understand the real versions.
We do not of course plan to use anything we implement in these challenges in production. We are not pretending we can reimplement such systems in a single day. Our implementations will be optimised for readability and simplicity over performance. They will support a minimal feature set, dealing with (some of) the most common use cases rather than edge cases.
These challenges are NOT competitions! We will each write our own code but we will solve the problem together. We will discuss the challenge together before we write any code and at intervals during the coding session. When we get stuck we will discuss as a group and help each other out. The aim of these challenges is for everyone to learn something, whether you have never used the the system we are implementing or you wrote the original!
- The implementation must be in Python 3 and use only the standard library.
- The implementation should be optimised for readability first, then efficiency.
- The implementation must support the agreed protocol and client.
- Ask each other for help before asking google/stackoverflow (except for simple syntax things that you don't keep in your head because you know they are on the internet!)
- Please do not copy/paste any code from StackOverflow etc. Research and discuss until you understand and then write your own code!
A Redis/Memcached 'clone'.
A MongoDB/CouchDb/Dynamodb 'clone'.
A Postgresql/Mysql 'clone'.
Like Redis PubSub / RabbitMQ PubSub
Like Celery/Kuyruk/Resque/Fifo Task Queue Challenge Details
Like Flask/Pico/Bottle/WebPy
Send & parse transactions and implement ledgering.