This post is coming about 2 weeks late but:
- I applied & got into the Recurse Center, YAY!
- 2 weeks ago I started my batch (Summer 2)
My plan going in was to learn more about the following topics:
- Strongly Typed Functional Programming
- Low Level Programming
- Contributing to Open Source projects
This is a fly by summary of what I have done in my batch so far:
I have been mainly focused on the first goal of learning more about strongly typed functional programming, working through the Haskell Book and doing all the exercises for all chapters. I am currently on chapter 15. The book has been a fantastic resource and really helped drive home the fundamentals which are needed for building real projects in Haskell. The small Haskell exercises / projects I am doing at RC are kept here.
I also gave a 5 minute presentation on folds and unfolds (the slides for which can be found here).
I also worked with Omar on a parser to parse chemical formulas using Parsec, which was my first exposure to using parser combinators and monad transformers and a fantastic exercise.
I decided that the first project big project which I want to work on during my batch is a BitTorrent client in Haskell. A possible second / alternative project is enabling the nix package manager to install packages from the bittorrent network. Both of those require learning about how bittorrent works / how DHTs work, which I have begun doing by studying a combination of specifications and reference implementations (listed below):
I have also learned about a number of miscellaneous things like how OCaml's module system works (at a high level), how rust's traits work (and how the are very similar to Haskell's typeclasses). I also learned that the state monad is not adding any capabilities that are not already present in folds.
Resources
BitTorrent Implementations:
- Python: https://github.com/jefflovejapan/drench
- Python: https://github.com/borzunov/bit-torrent
- JS: https://github.com/kzahel/jstorrent
- Erlang: This is a pretty massive file which is going to take a while to understand / untangle. https://github.com/jlouis/etorrent
- https://www.libtorrent.org/
BitTorrent Specifications:
DHT Information Specs / Projects:
- https://en.wikipedia.org/wiki/Kademlia
- https://stackoverflow.com/questions/1332107/how-does-dht-in-torrents-work
- https://github.com/allanlw/dhtplay
- https://www.bittorrent.org/beps/bep_0005.html
- https://en.wikipedia.org/wiki/Magnet_URI_scheme
- https://github.com/jlouis/dht
- https://github.com/kevinlynx/dhtcrawler2
- https://stackoverflow.com/questions/1181301/how-does-a-dht-in-a-bittorent-client-get-bootstrapped
Nix + BitTorrent: