Me

Nolan Eakins

Indianapolis

nolan@eakins.net@sneakin

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

Aug. 2010 — Dec. 2010
Rails / JavaScript Contractor http://www.sproutbox.com/

I worked on a few of SproutBox's "sprouts" during my time there:

MyJibe
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.
SquadEdit
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.

Tools & Technology: Cucumber, rSpec, Rails, Basecamp, Devise, CanCan, Resque Scheduler, Recurrence

Agile Reasoning

Feb. 2009 — Aug. 2009
Rails Contractor http://www.agilereasoning.com/

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.

Tools & Technology: Cucumber, rSpec, Rails, Scrum Ninja, Pivotal Tracker

Bluefish Wireless Management

July 2008 — Sept. 2008
Senior Software Engineer http://www.bluefishwireless.net/

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.

Tools & Technology: Ruby on Rails, Capistrano, rSpec, RESTful Auth, Fetcher, Selenium, Acts as state machine

Dealerflow Corporation

Sept. 2007 — Feb. 2008
Developer / Sys Admin http://www.dealerflow.com/

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.
  • Attended two Pragmatic Studios, one for Rails and another on Erlang.

Tools & Technology: Ruby on Rails, nginx, Monit, ejabberd, JSJaC, Capistrano, restful_authentication, will_paginate, Erlang, MySQL, Prototype, Lowpro, Scriptaculous, RSpec, javascript_test, Gentoo, Debian, SVN, Trac

GoodServer, Inc.

Oct. 2006 — July 2007
Developer / Sys Admin http://rauschenbach.us/svnapp/index.html

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.

Tools & Technology: Ruby on Rails, Apache, SuSE Linux, Subversion, Swig, C, Rake, Gentoo Linux, XPlanner, Collaboa, Bind

Progressive Lawnscaping

Summer 2005
Contractor http://www.progressivelawnscaping.com/

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.

Tools & Technology: PHP, MySQL, HTML, JavaScript, Jabberd 1.4.3, Python, Jabberpy, WebClientService, class.jabber.php

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.

Tools & Technology: Ruby on Rails, Drupal, MySQL, HMTL, CSS, OpenSSL, and GnuPG

Projects & Open Source

GitHub

http://github.com/sneakin/

MC

http://github.com/sneakin/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

http://github.com/sneakin/doa/

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.

AtRest

http://github.com/sneakin/at_rest/

This is a RESTful wrapper around the at daemon. It makes use of Sinatra which made this a quick and easy project, and can also make use of ActiveResource to piggy-back another instance of AtRest.

MyPasswordSafe

http://github.com/sneakin/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.

Tools & Technology: C++, Qt, qmake, make, CVS, g++, gdb, doxygen, CppUnit, Portage

OSS.SemanticGap

http://git.oss.semanticgap.com/http://hg.oss.semanticgap.com/

Warning: These may or may not be available due to my hosting arrangements.

Bitter

http://bitter.rubyforge.org/

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]

http://git.oss.semanticgap.com/xbee.git

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

http://hg.oss.semanticgap.com/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

Fall 2003
Project Lead http://git.oss.semanticgap.com/pong.git

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?

Tools & Technology: SDL, C++, make, g++, gdb, Adobe Photoshop, SmartDraw, CVS, cygwin

Misc.

Psi

Aug. 2004 — Spring 2005
Contributor http://nolan.eakins.net/taxonomy/page/or/20
http://psi.affinix.com/

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.

Tools & Technology: C++, Qt, qmake, CVS, GNU arch

Education

Pragmatic Studios

  • Ruby on Rails: Denver, CO, September 2007
  • Erlang: Chicago, IL, Feb. 2008

Purdue University

2001 — 2002
Freshman Engineering West Lafayette, IN
  • Classes: Calculus, Chemistry, Communications, Freshmen Engineering
  • Activities: Purdue Linux User's Group, Purdue ACLU, ACM

Greenwood Community High School

1997 — 2001
Greenwood, IN
  • Core 40 Diploma with a 3.635 (3.92 weighted) GPA
  • Graduated 15th out of 250
  • Senior year curriculum: Calculus, Advanced Environmental Science, Advanced 2d Art, English, Economics, Government, Journalism (Web page), and Business Management.
  • Entry in Who's Who: Art Club; Drama Club; Math Team; Quill & Scroll; Honor Roll; Perfect Attendance Award; Pres. Academic Fitness Award; School Web page Designer (3 yrs.); 2nd Place Science & Art Contest
  • 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.