2019-08-10 -- S1'19 Return Statement
I’ve spent the last several months in the Summer 1 2019 batch at the Recurse Center. The whole trip has been a really interesting and occasionally intense experience, but I don’t regret a moment of it.
What I worked on
My main project, spanning about ten of the twelve weeks of the time at RC, was a 3D rigid physics engine written in Elixir. I got as far as collision detection, and then got stuck for the last couple of weeks on the project on convex polyhedra intersection. I’ve written previously about that, and am planning to keep banging on it in the run-up to Elixirconf this year.
I’m somewhat disappointed that I was not able to complete my main project, but I figured that that was a possible outcome. In the meantime, I did make a lot of progress on it and on other things. Here are some of the things I spent time on:
- The Elixir Rigid Physics Engine, a pure Elixir implementation of 3D rigid body physics, heavily inspired by the work of Dirk Gregorious, Erin Catto, David Eberly, Casey Muratori, Randy Gaul, Daniel Chappius, Stefan Hedmam, Phill Djonov, and others.
- The ERPviz visualizer for the ERP engine. Kit-bashed together from a basic Phoenix chat app and extended with some ThreeJS and a few other tricks, it renders the world state of am ERP simulation and provides a CLI for executing code on the browser and on the ERP server. It’s super hacky but solid for the sort of debugging and testing work I needed to do.
- I made several improvements to my Graphmath library. I fixed the quaternion implementation to meet my needs for ERP, I introduced a bunch of better helpers for doing 2D and 3D vector work, I added a changelog to better track work done in the library, I cleaned up the CI integrations and switched over to CircleCI, and added several routines for helping with things like random sampling and generation of vectors and quaternions. Next I suppose I could add support for dual quaternions, but I think I may want a break.
- A really simple little Mastermind script in Emacs lisp my colleague Shae talked me into pairing on. I’ve never written Lisp very much, and haven’t used Emacs at all, so finding myself doing both together was a delightful surprise. I fear that my solution was a little too Erlangy (tuples and tuples and matches and zips) but it was a great early exercise at RC.
- Pairing with Alan to try and write a document search engine. Basically, just being able to search for all occurrences of a word in a string and return their positions. However, the fun bit was that we aimed to support fuzzy/misspelled matchings, and so we did a quick naive implementation of Levenshtein distance.
- Pairing with Anna making a cute little VN-like engine in about a 100 lines of JS and HTML. I’ll probably expand on it in a later version, but apparently it was of some utility to her and gave some inspiration for how to start tackling something like writing a game and a simulation.
- I made a dumb little IPv4 picker, where you click on a grid square and generate an octet until you have a whole address. This was a quick little hack before a tech talk, so it never saw the light of day. I’m not sure I ever even put it into source control.
- This very blog engine, which took probably about a week of work scattered throughout my time at RC as I ran into features I felt it should have. Dora helped me make it display a lot better on mobile, and my friend Shanti showed me a function for chunking that helped when writing the index generation code. It’s not a pretty codebase, but it does everything I want it to right now and supports a couple of neat tricks (inlining everything into pages for “archival quality” downloading).
- Contributed a bit of design chatting and a cute little setup script to Steve for Groovebuoy, a really neat little social thing for music lovers.
- I finally broke down and started my own dotfiles and utilities repo, inspired by one of my friends and mentors and best jefe. I figure I’m finally far enough into my career to start putting down roots and carrying them with me. Most of the stuff in there right now is for blogging, but it’ll expand over time as I scratch itches.
- I reported a build bug to the lovr project and it was triaged and fixed! When I get home to my VR rig I’ll get to start playing with it more, and I’m really looking forward to that.
Talks and people
- I gave a three-session workshop on setting up a server from scratch on prgmr and buying a domain name and hosting your own site. This helped at least one other person, and I feel really good about it—even though we triggered their fraud-detection algo and I got a polite phone call from the wonderful Alyn Post inquiring if there was anything I needed.
- I also gave a two-session introduction to linear algebra for graphics and data visualization. I’ve taught similar material before at a local Hackerspace, but the RC community was wonderful and provided bright and attentive pupils.
- My final week saw me give a non-technical talk on my experiences with anxiety and panic attacks, and I delved a bit into how I found out about it (of), what it felt like, ways I’ve found to help myself and help others dealing with similar things. Several folks were kind enough to tell me that that talk resonated with them, so I feel that it was a success.
- I talked with Kathleen a bit about how to approach the problem of designing interesting tetrominoe-like puzzle boards (for connecting dots). I’m not sure any of what we talked about ended up being helpful, but it was great fun.
- My good friend Shae and I talked a good deal about how to approach his Fermat’s Last Margin project, a tool for annotating and discussing research papers.
- Aaron and I spent several hours talking about wikis and CRDTs and software in the style of the memex.
- I spent a great evening chatting with Micheal and his project partner on trying to generate assembly from Lisp, maybe using s-expressions. It was really neat, even though I don’t think I was particularly helpful other than as a rubber duck.
- I organized a long-haul check-in every week for folks that were doing projects that spanned most of their batch. Attendance was small, but it seemed to be very beneficial for folks to talk about their work to other people in a similar situation and to receive support and feedback.
- For my entire batch I went to every meeting of the Politics and Ethics of Technology (PEOT) group. A sort of quarantine zone inside the normally apolitical Recurse Center, we were free to discuss and present on things ranging from the ethics of space colonization to mass surveillance by NYPD to reflections on app usage and its impacts on happiness. PEOT was always a fun bull session, and I was delighted to see how other people thought about things.
- Feelings check-ins were a weekly chance to share feelings and fears and frustrations encountered while at RC. Since I had left my support network back home, this was a welcome and wonderful occurrence. I think that everybody who attended benefited from knowing that they weren’t alone in what they were facing, and if you attend RC I strongly suggest you look up this in its current incarnation and participate.
- Non-technical presentations every two weeks were amazing, and a great chance to learn about things like: bicycling across Africa, doing SCUBA diving, the lives of bees, constructed languages, and all sorts of other stuff I wouldn’t have run across otherwise.
So, there are a whole bunch of feelings about the whole thing, and I can’t really hope to get them all here (as my train hurtles towards Houston). I will say that, if you are at all interested in broadening your horizons, finding work, and getting a chance to become better as a developer, apply to Recurse. They have 1, 6, and 12 week batches, and they have wonderful stipends to help out folks who qualify and might not otherwise be able to attend.
I don’t want to be too dramatic, but…look.
The caliber of people I shared my time with and the caliber of interactions I had are the sort of thing that I imagined happened in the halls of Xerox PARC or Bell Labs back in the day.
We all have rent to pay, we all have hustles to run, but having the time and the space to play with new ideas and trade thoughts with new people is something that is incredibly valuable. Try it out. :)