Nolan Eakins

Overview

Summary

I have been doodling with programming, operating systems, servers, and web
design since my teens (the mid-nineties). During that time I have become
a proficient and disciplined programmer in a number of languages,
a good enough Linux admin, and a rusty graphic designer.

My early programming
was defined by C/C++, HTML, and JavaScript.
Sometime around the start of 2006 I drank the Rails kool-aid,
which caused me to nearly forget C++ and to shudder at the sight
of PHP. As a result my focus switched from desktop applications
to creating web applications with dreams of creating the
next Google.

Thanks to Rails and the surrounding buzz, I've found myself
creating and contributing to a number of Rails projects both
professionally and "on the weekend". It has also led me to
present at Indy.rb.

While I've been living and breathing Ruby since 2006,
that doesn't mean that my knowledge is forgotten or static.
I still retain some working knowledge of C/C++, XMPP, OpenGL,
and other technologies that I spent a significant amount of time
using prior to Rails.

In the past year I've filled in gaps of my knowledge of
electronics by playing with Arduinos and components,
understanding radio transmission and reception,
and had a moment of inspiration on how digital logic components
are used to build a computer.

I've also built packages to configure ArchLinux for
an old tablet computer, an HP TC1100, and used Puppet to setup
and configure servers while contemplating launching
MealMote:
a Rails app to place orders at restuarants using Twilio.

Professional Work

SproutBox

I spent a solid majority of my time at SproutBox working on MyJibe.
While working with the rest of the SproutBox team and MyJibe's founders,
I helped to implement the half of the main features including the
funding of budgets using Cucumber to drag around sliders and verify
that amounts matched what the founders were expecting from the algorithm.

While working alone, I implemented the opening
and saving dialogs for remote files of SproutBox's colloborative text
editor.
Prior to doing that I had to fix numerous bugs added in a prior
iteration along with a massive, time-boxed refactoring of
all the JavaScript.

Misc

I quickly fixed a show stopping bug in Proposable
and added a feature to ScheduleThing while cursing PHP and Zend.

Agile Reasoning

I was contracted by Agile Reasoning to jump start their Rails
development and learning. While there I helped execute two projects
with a test-driven process using Cucumber and Rails,
along with helping a former DBA get rolling down the Rails.
One of the projects is described on
AR's Case Study
page.

Bluefish Wireless Management

I came in on a two-man project that was using Rails that could have
been described as 80% done. I introduced RSpec, Selenium, RESTful
design, and some Agile project management techniques to
whip out a a set of features, a backlog, and a collaborative
environment. Some screen shots can be found on
the product's demo
page.

Dealerflow Corporation

At Dealerflow I worked on a Rails application targeted at auto-dealerships
with a handful of people with varying skill sets and specialities.

While there I:

Helped integrate ejabberd and Rails by
creating Rake and Capistrano tasks to control and deploy ejabberd,
devising a scheme of temporary passwords to allow JSJaC to securely
survive page refreshes,
and created the RESTful controllers that allow ejabberd to log
presence and messages to Rails.

Spent my final days reviewing over 100 pages of specifications provided
by an SMS aggregator. I reduced them to nearly two dozen stories allowing
me to estimate when we would be able to begin sailing through carrier
testing.
My hope was to allow SMS to be used as ejabberd's offline channel to
allow people to IM even when they weren't at a computer.

GoodServer, Inc.

I designed and implemented a project called SVNApp, short for Subversion
Appliance. I created a Ruby on Rails application to make managing
Subversion repositories much easier, and then packaged it up using Gentoo to run and
install from a bootable CD.

Created a Rails application that used Subversion's
Ruby bindings to display change logs; interacted with the user and group
shell utilities to manage the systems users and groups;
and reversed engineered ActiveResource's protocol so it could be used to
interface with a Lucene based indexing service.

Used Rake to control a Gentoo Linux build to produce an installable
LiveCD that contained all the parts of the application, all setup, and
ready to go including an unoptimized Rails based installer.

Setup and maintained two servers and a workstation using SuSE Linux.
The setup employed RAID mirroring, DNS, uninterruptable power supplies,
and an ISDN connection.

Progressive Lawnscaping

I was contracted by Andrew Shoaf to setup and theme a Drupal
powered web site for
a local landscaping company. I had to convert a Photoshop design
into an HTML/CSS template usable with Drupal. Various Drupal
modules were also setup to meet PL's specialty uses.

Volunteer Work

[David] Sanders for Congress

Webmaster

2008

I setup a basic site built with RefineryCMS and
deployed it onto a stack that I built using Puppet,
Nginx, and Varnish.

2006

I took over web master responsibilities a few months prior to
the election. This included migrating an ASP site to a small
Rails CMS I wrote and migrating email using FetchMail.
A mass-mailer was also created using Rails to send emails
to more than 1,500 people.

2004

I offered to put together the
technology to have an online chat which was used
in a small post-election chat. This initially was planned
to be a Javascript and HTML interface to a Jabber
chat room, but resulted in being completely database
driven due to constraints and problems with jabberd 1 and my host.
It also had Python script that moderated the occupants
creating a Q&A environment with one speaker.

Progressive Indiana, Inc.

April 2005 — Nov. 2006

Webmaster/Director

I maintained Progressive Indiana's web site, developed new
sites for specific
purposes, and sat on the board of directors providing assistance
and input on the group's activities until a majority of the board
decided to divert their energies elsewhere.

My work on the primary web site
included posting events and collecting news items which resulted in
approximately 1,000 visitors per month at its height, around 90
registered users, and attracted the attention of Senator Evan Bayh.

I developed a web site that was
used to accept donations for a full page ad in the Indianapolis Star.
The site featured a barometer to track the campaign's progress, and
made use of an idea of viral marketing by making it easy for a donor
to tell their friends about the campaign.

Projects & Open Source

GitHub

MC

MC is a Minecraft client that I built over a period of a few days.
It's not a sparkling clean code base, but you can almost play
Minecraft from a text terminal like an old school Rogue-like RPG
using an A* path finding algorithm.

DOA—the tester

From the README:
Doa provides macros that make Rails’ controller specs more
understandable and drier. It provides methods to provide the
context for a controller’s action, the params to be used in
a given context, and the means to easily call the action using
those params.

MyPasswordSafe

When I reinstalled Linux on my computer, I lost the ability to
access my list of passwords that was created with Password Safe.
MyPasswordSafe is the result of that need. It's a program that
provides similar functionality to Password Safe, but under Linux
and any other operating system Trolltech's Qt supports.

OSS.SemanticGap

Bitter

This is the microblogging platform that I use at bitter.nolan.eakins.net.
It's the result of being prodded to join Twitter while working for Dealerflow.
Its highlights are RSS support, SMS sending and receiving via
TextMarks.com and a broken XMPP bot.

Tools & Technology:Rails, TextMarks, MySQL, XMPP4R, bzr, RubyForge

XBee [lib]

This is a library that currently provides one of the layers
needed to interface with Digi's XBee.
I took a partial test-driven approach using C to
implement frame decoding and partial support for sending frames.
It currently lacks support for decoding and sending packets.

Tools & Technology:C, CxxTest, doxygen, lcov, Arduino

Station

This is an incomplete, but functional and working, HTTP server
written in Erlang. It was written to learn Erlang and demonstrates
the aspects of OTP used to define an application.
Its claim to fame may be an HTTP parser and a RESTful module
API for resources.

Pong

After I read Cleanroom Software Engineering
and The Pragmatic Programmer, I wanted to try some of the
approaches that were described
out on a simple game. Pong was the game that I chose,
while taking some liberties with the Cleanroom process.
I made use of various design tools such as a
specification, sequence enumeration, and a "tracer bullet".
The result was my first working game of pong that included a menu
system that I created, some basic AI, and time accurate collisions.
And did I mention that I finished?

Misc.

Psi

Psi, an open source Jabber client, only supported the undocumented
group-chat protocol. I offered to add support for
JEP-0045,
Multi-User Chat. I ended up partially implementing the full MUC spec
along with bookmark storage before the core Psi team decided to
switch to Qt 4 before my changes were committed.
While working, I generalized multiple use cases used to change an occupant's
role into a simple to use role/affiliation editor that used drag and drop.

Maintained and developed the school's web site for three years.
The site was a basic HTML site developed using Adobe GoLive, Photoshop,
and text editors without any server side scripting, which I wanted
to use during my final year.