Hello, Clojure.

I’ve recently finished reading my first book on Clojure, and I am pretty fascinated by this pure functional JVM programming language. I’ve been doing some FP in JavaScript over the past year, but Clojure is still quite eye opening.

So, what do I do with this new language? Fibonacci numbers of course.

My first (naive) approach to Fibonacci on Clojure was recursion (surprise, still sucks), then I tried my hand at a poorly implemented memoization version, and after speaking with some people in IRC, I landed on this approach:

Whats fascinating about this approach is that it utilizes one of the most interesting apsects of Clojure: lazy evaluation. This approach feels as close to linear as possible, even in large scale numbers (2000, 10000, 100000), and utilizes about 67 MB of constant memory, while distributing the computations across all available cores.

Yeah. Excited to be continuing my journey of FP, onward!

Also, excited to be attending the Clojure/West conference in March, I’ll see you there!

Code Rush

60 min interview, recorded in 1998/99. Follows the engineers of Mozilla/Netscape fighting against Microsoft in the latest 90s.

Google 2011 I/O keynote: Google Chrome

This is huge. I am a huge fan of the Chrome browser and platform. This video showcases how far they’ve come, and whats happening in the future.

Noted for historical reasons.

There is a lot to understand, especially in light of particular events. Its important that we as engineers try our best to fully understand the tooling we rely so heavily on.

In the last 11 years, Google has rolled out 7 significant releases to their overall system architecture, without any of their users realizing. This is a fantastic look behind the scenes at the architecture considerations that have gone into the amazing system that is Google, as it grew in time. Definitely a great lesson in scaling when you need to, and not a moment sooner!

These are two of my favorite slides from Nate Lawson’s Google tech talk, When Crypto Attacks! Nate does an exemplary job terrifying and enlightening onlookers about the various problems with products and techniques that believe themselves to be secure in nature. Great watch.

Competing On The Basis Of Speed

“When Toyota designs cars, they use a process called set based design: a Prius is designed in 15 months. For the first 4 months of the cycle they maintain 10 active engines under active development, in detail. They then decide which one of those ten is the best. They don’t just make one, and keep making it better. Toyota defers commitment as late as they can so they have the most information available to them when the decision needs to be made.”

— Mary Poppendieck

Managing Change

Being able to rely on open source technology is a huge advantage for startups. Teams are small, time is constrained, and there is a wealth of available libraries and packages out there to be used and tweaked for the needs of your company.

With so many people working on open source, commiting features, bug fixes, and forks, it becomes essential that we as users/contributors of this ecosystem are aware of things as they change, so that we understand how they effect our codebases and products. I thought I would share some of my tips for managing my consumption of open source, and I hope some of you share your tips in the comments below!

TL;DR: Github has totally revolutionized the way I write and consume software. There are plenty of ways it can help you, be creative!

1. Setup a Github organization for your company

Most projects that we rely on heavily, we end up forking to our organization account. We do this to make sure that our dependencies are stable and reliable. Nobody can delete these projects on us or somehow compromise our environment/requirements by just removing their projects from the internet. Having our own forks also makes it obviously very easy for us to apply changes and customizations to the libraries we use, and merge them into any upstream changes that become available from the author.

2. Setup an RSS reader for project commits

On every Github/commits page, there is a link to the commits as an RSS feed, I recommend grabbing an RSS reader (I use Vienna, its free), and capturing all of these feeds into a single stream that you can consume and track. I find this technique keeps the various components of our system on the top of my mind, and I can get a real sense for the impact and features of the version updates that I take in. You’ll feel much more connected to the developers, as well.

3. Read as much of the code as you can

Sure, you don’t have to read all of the code that makes up MySQL, but whenever possible, you should get to intimately know your libraries and components. Afterall, they may make up a substantial portion of your product, and if they have bugs or act incorrectly, its important you understand it. There is especially no excuse if the library you are relying on is written in a language you are fluent in. Read code. It makes you a better developer.

4. Find and read (and contribute to!) the bug tracker

Nearly all open source projects have issue trackers (especially on Github), make sure to familiarize yourself with the state of issues and feature requests. This is critical for you to have a sense of whether or not this library will have an issue accomplishing a given task you intend to use it for. Issues will happen, you’ll find bugs, its open source, you do have the power to fix issues and submit to the project, and its the right thing to do. If you are not capable, at a minimum, file the bug and attach a reproducible test case, this goes a long way in the author(s) actually wanting to help you.

What tips do you have for managing change in an open source eco system?

The Secrets of Building Realtime Big Data Systems

Really loved this slide deck. Orchestra’s backend team is learning lots!