¶ June Recap

June was a busy month, if not a particularly vocal one — I apologize for the radio silence. I started my position at Walmart Labs as a node core contributor as of the 5th of the month, and spent most of June heads-down familiarizing myself with the current state of the C/C++ side of the Node project: running through open issues on the repo trying to find good "starter" tickets, building small projects with the "building blocks" of node — libuv, v8, and gyp — and immersing myself in C++ development by building a small JS tokenizer + parser. I've also been brushing up on syscalls, in particular how mmap is used in building JITs. It was an educational, if a bit scatterbrained, month.

Running through the issues was initially pretty difficult; there's a lot to run through. Luckily, TJ Fontaine has been a great resource: he explained how the issues are triaged into Github milestones based on the oldest version they affect. That is to say, for the most part, issues open against the v0.10 milestone are also part of the v0.11 milestone. Issues are tagged with the subsystem that they affect. Node core contributors "own" subsystems -- for example, Fedor Indutny owns the tls and crypto subsystems. That means that all pull requests and issues related to a subsystem go by its owner. One of the first decisions TJ presented me with on starting was which subsystem I was interested in taking over. I initially deferred, hoping to tackle bugs and expand my knowledge of the codebase; but I'm happy to say that as of Nodeconf I've decided which subsystem I'm going to work towards ownership of: streams.

After Nodeconf (which was amazing, and I'll write up my feels on it more entirely in a later post), I had the opportunity to visit the Joyent offices, where TJ gave me a rundown of the current state of streams. We spent a few hours talking with Dave Pacheco and Josh Clulow about how they've been using streams at Joyent, their pain points, and possible solutions. Dave and Josh are big users of objectMode streams, a use case that's near and dear to my heart since, at Urban Airship, I used objectMode streams heavily on the frontend — and many of my parsers, git tools, and other sundry packages are object-mode streams. There's a weird sort of pleasure in hearing about problems with something that you're going to be working on — an excitement for the chance to make things better, and I have definitely been riding that particular high since the visit.

Here are the things I'm considering for streams moving forward. It should be noted that these things are not guaranteed to happen, but represent my current thinking about the subsystem and where it should go. If you see something that bothers you or otherwise elicits deep feelings, please don't hesitate to let me know. (Thanks to Josh, TJ, and Dave — many of the ideas listed below are theirs!)