The first week of Hacker School I started out worried that I'd have trouble finding my way and being able to contribute meaningfully to a project. I'm about four weeks in now, and I can say proudly now that the opposite is true. In the past four weeks, I've paired with two awesome fellow programmers and pushed out two big projects and have started work on a third. I've also had a number of wonderful smaller collaborations with people on a number of topics both in and far out of my standard comfort zone, and have felt like I've struck the right balance over my time here of excited and terrified.
The three major projects I've been working on so far have been:
- BouncyBitcoin, an Android app written with PaddyBadger that pulls a number (in this case, the price of Bitcoin in a choice of four currencies) from a web endpoint and constructs a font made of balls to display the number on the screen. The balls can be pushed around by the user's finger, and suffer the effects of gravity (measured by the phone accelerometer) when not busy displaying the price. When they bounce off the edges of the screen, they vibrate the phone. This may be the most distracting thing I've built with someone from scratch in four days.
- DistroWeb, a distributed webserver written with Rose Ames. DistroWeb implements a distributed hash table (thanks to davidad for the suggestion) over a Hamming distance metric to fetch tracker files which are used to download pages from peers on a network to a proxy server, which in turn listens for browser requests on the user's local machine. Future ideas for this include a voluntary, client-editable "suggested bookmark" system of DNS, versioning and signing of documents with private keys to allow for persistent editable webpages, and a distributed search feature using overlay multicast and Bloom filters to turn the normally storage-intensive deterministic task of search into a distributable probabilistic one.
- This week I've started yapa, an implementation of the pegboard game Plinko, where a disc falls through several pegs and settles finally in a spot at the bottom. I'm looking to do something a bit odd with this by implementing a physics engine which parametrizes motion from one timestep to the next and calculates minima for distance equations explicitly (using the quadratic equation without gravity or the cubic equation with it) to detect collisions, then pushes collision events onto a priority queue (priority in this case being a fraction of the current timestep) and propogates the changed equations forward to detect further collisions. This should result in a physics engine which a) runs slower than typical such engines, but b) is more fun to implement, and will come up with accurate physics no matter what the computational lag is or how many collisions occur in one timestep, floating point weirdness aside. (Maybe I should do the calculations symbolically?) I've already spoken to a few Hacker Schoolers who are interested in pairing on this, so that's pretty exciting.
Meanwhile, I've worked on a few smaller things:
- The first day, I learned about scikit-learn from Amy Hanlon, and had a fun time shooting down bugs in a Usenet post classification problem.
- I've explored the weird and wonderful land of Haskell, Elm and functional programming, mostly with Chen Lin and Patrick Redmond. Thanks to Evan Czaplicki for a super accessible explanation of monads (they map and join!)
- Davidad led a workshop on x64 assembly that covered his incredibly fast and elegantly designed 8-queens solver that got me super excited about assembly - I'm strongly considering implementing the distributed search algorithm in assembly now (along with something like CUDA).
- Rose has given me invaluable tutoring on vim, which is now my main editor.
- Robert Lord (who incidentally has an awesome domain name) gave me invaluable assistance with getting three.js up, which I'm implementing yapa in. He also revived the Iron Blogger challenge, and is thus in some way responsible for this whole post existing.
- Amy also wrote a awesome Pelican/Github Pages tutorial, which was of immense help getting this blog set up. She was also super helpful with getting the configuration working with the particular theme I'm using.
I've missed writing about countless awesome pairing moments, presentations, happenstance conversations, tabletop games, banh mi lunches, and random moments of cool. I'm really hoping I'll get to them at some point, but there's such a density of awesome that it'd be hard to encapsulate it all. The amount and potency of concentrated help that goes on here blows my mind, and I can't wait to see what happens in the next few months. (I won't wait that long to blog again, though - due to Iron Blogger, I'm definitely going to blog this week, and I suspect I'll be blogging more often than that. I'm going to offer my own opinions about what makes Hacker School so great, as well as go more into detail on some of the projects that I've been working on here.)