About

contact

ethos

Most of the problems we have are interesting in that they are questions looking for answers in a system of composed rules. Solving the problem is just a matter of solving at least a subset of the system or adding additional constraints to it.

For me, computers and computation represent an interesting microcosm of the available problem spaces in the universe. This is a system that, to anyone but the materials scientist or electrical engineer, is entirely constructed by humans. We decided to have a given number of registers in the CPU. We decided to limit ourselves to a particular transmission limit on the local network link. We meticulously designed the languages we use to express imperatives to the machines we want to control.

And yet despite these limits, computers seem limitless in the value we derive from them.

The part that interests me about all of this is that the blueprints to the entire computer system are available to solve the problem at hand. If knowing how the memory caches are interconnected helps optimized accesses, that information is available. If we need to know how gcc arranges the stack after optimization, that information is just a git clone away.

This is why I’m such an enthusiast for and advocate of open source software and open standards. The knowledge I’ve amassed over the years is only possible because the source code or protocol specifications for most of the things I’ve worked on is freely available and easily accessible. For those systems that are not open, the systems on which they sit on are, allowing for a black-box inspection.

The distinguishing skill of a systems programmer and administrator is not only being able to know where to obtain the copious amount of information available, is not only being able to quickly learn and understand it, but is not having the fear to delve deep into it in order to extract facts needed for solving the system. This skill is often far more important than the specific knowledge base already accumulated, as the systems programmer and administrator will be able to learn whatever tool necessary to complete the job.

That’s what I do and enjoy: taking apart systems and putting them back together1 (virtually or otherwise) in order to understand as much as I need to solve the problem I’m given.2

The one downside is that this requires somewhat of a jack-of-all-trades approach to computer systems. I think one day I would like to specialize into being a subject matter expert in a particular subsystem (say, one of the Linux kernel subsystems, high-speed interconnects, or something of that nature). For now, I’m having fun investigating whatever I can and enjoying the fact that I have the liberty to spend time doing it.

biographical

I grew up in a sleepy town in Upstate New York called Rhinebeck, attending 13 years of public school, not getting into trouble, and always doing my homework (and then some). I spent a solid year of my childhood coming back from school and watching two out of three Star Wars movies before starting my homework.3

My father worked at IBM for over 30 years and consequently had copious amounts of computer hardware lying around the house. It was only a matter of time before I started pounding on a bunch of Model Ms.

I had the benefit of spending most of my senior year of high school at Bard College, taking science and math classes at a hugely reduced tuition rate. Being exposed to advanced ideas and creative people was a very formative experience for my passion for computer science and overall geekiness.

I attended the engineering undergraduate school at Columbia University where I studied computer science. I was planning on studying applied physics, until I had a much needed existential crisis and decided to follow my intuition and engorged myself in computer science. I under-appreciated having so much time to hack on and investigate new systems; my perspective was at the 1.5-meter level when it should have been at 10,000 meters. Still, it was a super valuable experience.

I attribute my work ethic to having a short career in technical theater, starting in high school and ending in college. I was fortunate to gain a “do everything necessary” attitude to getting the task at hand completed. I transitioned to work for the university’s IT group, working on web applications ranging from employee scheduling to webmail once I knew that computing would be my future.

I currently work as a Site Reliabilty Engineer at Google in New York on our offline storage system. I love my job. I get to work with really smart people on improving the reliability and operation of a massive system that includes robots.


  1. Maybe this results from being a huge user of legos as a kid… ↩︎

  2. One recent example: a colleague and I were working on Oracle security integration into an existing, rich Kerberos infrastructure when we found an issue where the (non-mitkrb5) library Oracle uses for Kerberos operations rejected the valid service ticket presented by the client. The issue was that the ticket did not include one of the three available IP addresses available on the client; this being a virtual address that accepts traffic on either physical interface. The question then became: given a valid address-based Kerberos TGT, can one obtain address-less service tickets? We observed that forwarding a address-based TGT through SSH produced an address-less TGT on the target host. We subsequently navigated both the openssh and mitkrb5 code base to investigate the issue. This was fun. ↩︎

  3. This is an example of why the US is falling behind in the global education race. But, the benefit of this particular example is that I probably can recite each script in its entirety. ↩︎

On Converting to Jekyll

I wrote that I spent some time recently to convert my Wordpress-based weblog to Jekyll. As partially mentioned in that post, Jekyll is a “blog-aware” static content generator written in Ruby that uses a lot of existing components, like Maruku for Markdown formatting and Liquid for templating.

The documentation for each of these components is at times a bit sparse and strangely arranged. The following pages I just found but I should have read them earlier:

Between those three, they do a good job of discussing what Jekyll is and where it succeeds and fails. I’ll just comment on my process.

Looking over and stealing the structure of existing sites, including mine is recommended. Of course, be sure to respect the original author’s copyright for content and code (mine is Creative Commons and BSD, respectively). I borrowed Tate Johnson’s, who recently redesigned his site to explicitly mimic Latex output with CSS3 and HTML5.

The conversion process was both easy and painful: it was easy to get started and get all of the information in place, but was painful to import all 220 existing posts. Exporting the posts were painless: the provided Wordpress migration tool worked like a charm. I did have to tweak it a bit to get topic name → file name conversion just right, and to pull down the few drafts of unfinished content in the database.

Converting the posts to valid Markdown pages would have been a Herculean task, but I decided that I at least wanted to convert them to a format that Maruku would parse and export to valid HTML. Maruku is particular about where raw HTML can appear, namely approximately in its own block. A lot of time was spent wrapping things in <span>s to get Maruku to stop complaining. I wrote some shell aliases to help me with the edit-debug-commit cycle. For a large portion of the attention-required posts, I just converted to valid Markdown.

Wordpress has a nice feature that I started using liberally: if a media URL appears in the body of a post and is not contained in a tag, it uses the oEmbed standard to convert the media to an HTML representation. This meant that I had to revise all of my YouTube and Flickr references to be valid HTML or Markdown. I was half way done writing a Jekyll plugin that would support oEmbed, but then decided this defeats the purpose of having a simple, static conversion process.

The rest of the stuff was easy. I wrote an RSS 2.0 feed and heavily modified someone’s existing Atom one (both of which you should steal from me). I used Yahoo’s YUI 2 Reset-Base-Font and Grids CSS as I hate dealing with browser-specific CSS differences. I used W3C’s validator constantly. I wrote a Perl-based unit test to make it easy and integrated in my Rakefile.

I’ve so far decided against having comments, but I do have a trivial topic branch that integrates Disqus comments. I’ll probably merge it some day soon.

My next rainy day task will be categorizing or tagging posts, which Jekyll supports strangely, so a million different people have reimplemented it in different ways.

This work was worth it to uncomplicate managing this simple weblog. I can compose in Vim, write in a decent markup language, have Makefile-like automation for testing and deployment, maintain revision history and have sane branching with Git, and not have to deal with security upgrades and unnecessary slowness.