Uses This

A collection of nerdy interviews asking people from all walks of life what they use to get the job done.

A picture of Marius Eriksen

Marius Eriksen

Software developer (Twitter)

Posted in developer, mac

Who are you, and what do you do?

My name is Marius Eriksen ([@marius](https://twitter.com/marius "Marius' Twitter account.")) and I write software. My formative years were spent at CITI at the University of Michigan, hacking on operating systems, distributed file systems, and various networking and computer security related projects.

Since then, I've spent time working on infrastructure at Google and Twitter. Recently, I've spent most of my time on what might properly be called the connective tissue of our distributed systems: our RPC system, Finagle, and our libraries for writing safe and performant concurrent programs. I try to push the boundaries of higher level techniques in systems programming. I'm currently working on a new system for composing distributed systems; details are forthcoming soon.

I also help organize the annual CUFP workshop.

What hardware do you use?

I'm using a Retina MBP 13". As with any new-ish computer, it's the best one I've had. It's light & compact -- this is important to me as I drag it along on my commute -- but also packs enough hardware that I am rarely in want of more power. And that display. It is gorgeous. When I get to work, I hook it up to a 27" Dell display, and use a wireless Evoluent VerticalMouse (I do a lot of mousing. See below.) together with an Apple Wireless Keyboard.

I have a beefy (headless) Linux box underneath my desk (running Ubuntu). It mostly does builds, benchmarking, and other periodic tasks. Twitter's compute clusters are always at my avail.

I use an iPhone 5, and also an iPad.

Also: lots of notebooks and paper. I tend to write things down on whatever is available. (To borrow an old adage: the best notebook is the one you have with you.) Most of the time, I write things down just to help me think -- a veritable Waste Book -- and only occasionally for posterity.

To get around I use a homemade fixed-gear bicycle with a Raleigh Rush Hour steel frame and wheels made using Velocity Deep-V rims and Wheelsmith spokes. I have a Bakfiets cargo bike for hauling groceries and kids around. I take Caltrain to work. (Now that's real hardware.)

At work, I listen to music with headphones: Beyerdynamic DR-1350s when it's quiet enough; otherwise a pair of Bose QC-15s.

And what software?

I used to be quite exacting of my software environment. I went to great lengths to make it just-so: I even wrote a window manager -- cwm, it survives to this day, and ships in the base OpenBSD distribution -- to escape the tyranny of having an environment designed by others. (A fun story: When I was at Google, Sergey Brin once rollerskated -- yes, rollerskated -- into my office, spotted my strange windowing system, and proceeded to debate me about the merits of tiling vs. floating window management.)

Now, I try to use whatever is available, whatever is easy, whatever is default. For one, I use OS X. Despite what others say, my experience is that it keeps getting better with each release: more stable, more performant, more energy-efficient. I use Safari (and I make frequent use of its Reading List feature), Calendar.app, Notes.app, Reminders.app. (Reminders.app runs my life; I am very forgetful.) I use Apple's Mail.app for email, and I try to keep it unsophisticated: I quell the flood of emails by subscribing only to mailing lists where I'm reasonably sure most emails are of direct interest to me. I use Apple's Photo Streams to share images with my family.

I use Pinboard to catalog my web excursions. I use Twitter's Mac app as well as our website to keep up with what's happening. We use Review Board to do code reviews, the pants build system to build software, and Mesos/Aurora to run programs on our clusters. Along with Twitter, iMessages and Flint.app keeps me connected to my colleagues. The Scala compiler continually taunts me with type-checking failures.

I have a rule I try to abide by: it should take no more than 30 minutes to set up a new device. That means no elaborate setup, not too much software, and most importantly, keeping as much state as possible in the cloud.

For that, I use Benjamin Pierce's excellent Unison. You can use it like a more sophisticated and private Dropbox. I have a simple script that synchronizes the pieces of my home directory that I care about. A new machine is bootstrapped with the same script.

I spend most of my time in a rather peculiar environment: Rob Pike's Acme editor, courtesy of Russ Cox's Plan 9 from User Space. It's a text editor, but it's really much more. You can think of it as an IDE, but that doesn't quite capture it either. I think of it as a work environment in harmony with Unix: You can extend it by writing small programs that compose well; it has a few well-defined and orthogonal mechanisms for interaction (the plumber, 9P, mouse chording). It's also what I like to think of as a system with a high power-to-weight ratio: It's a relatively small and simple program, but it wields a lot of power. You could make it a little more powerful, but not without adding a lot of complexity. Acme is very mouse heavy: it doesn't have keyboard shortcuts for complex navigation, or to invoke functionality. It means you do a lot of mousing. Initially that can be daunting, but you get used to it really quickly; in fact, I've come to prefer it.

On iOS I use the stock apps, and Twitter of course; Reeder for reading RSS feeds, Rdio for music, the New York Times app for reading news, and Audible for listening to audio books. I share short videos with Vine. I use the Kindle app for reading. (Since Amazon bought Audible, you can now sync positions in audiobooks and Kindle books. Great when you're commuting or running.)

The Duo Security app helps me access both monkey.org and Twitter's internal networks securely.

What would be your dream setup?

Instead of answering your question directly, let me instead wax philosophical.

I'd like my tools -- hardware and software both -- to be more like Leica film cameras: Using a Leica really requires you to pay attention to your environment. (Where is the light coming from? Where are the shadows? How contrastful is your environment? How far away is my subject? Watch James Nachtwey in "War Photographer": here is someone completely immersed in his environment. Attuned, aware, attentive.) This is something I try to bring to my work: choose simple, barren tools, eschew sophisticated ones that blind you to your environment. Work with what you've got. Be resourceful. Pay attention.

A Leica is fundamentally simpler than a modern camera, but everything on it serves a purpose. You can't remove anything from it without compromising its functionality, but it's only slightly less "powerful".

Unfortunately, the tyranny of consumer software is that it is marketed based on "features" without paying attention to what it is these features add. Accidental complexity abound, and we end up with software that is very powerful but also much too complex. You have no hope of understanding how it all works. Such software also tends to be monolithic: a big giant ball of features, all inconsistently tangled together. This makes it difficult to combine with other software. Put another way, consumer software tends to lack that wonderful combinatorial explosion you get when you put a few simple and well-thought-out abstractions together.

That is what I want: more thoughtful, composable software; fewer monolithic behemoths; less "weight," and only slightly less power. It's probably a losing proposition, but we can hope.