Ruby Fellow for AppFolio
2016-present
2019
I was AppFolio's Ruby fellow, a sponsored full-time position working on measurement and tooling for the core Ruby language.

Faster Apps, No Memory Thrash (RubyKaigi)
2018
My 2018 RubyKaigi talk was about understanding and optimizing your Ruby application's memory configuration. This is the talk where I introduced the env_mem tool. The slides were good enough that they got their own mention in Ruby Weekly. I also gave the talk at RubyConf Malaysia in Kuala Lumpur. (rubykaigi page) (slides)
Play link for YouTube (<- YouTube link) RubyKaigi stage picture RubyConf Malaysia picture RubyConf Malaysia picture
Make Ruby 2.6 Faster with JIT (Southeast Ruby)
2018
I gave a talk on Ruby 2.6 JIT in Nashville, at Southeast Ruby. As I write, the video is not yet available.

(slides)
Southeast Ruby site picture
Ruby Rogues Episode on Measuring Ruby Performance
2018
In 2018, I was again a guest on Ruby Rogues, this time about my more recent work on Ruby performance. I was also a guest on My Ruby Story, also part of DevChat.tv.
Remote Ruby - JIT and Ruby 3x3
2018
Jason Charnes and Chris Oliver had me on Remote Ruby to talk about JIT and about Ruby 3x3.
(<-- link)
How Close is Ruby 3x3? (RubyKaigi)
2017
After a year as AppFolio's Ruby Fellow, I spoke at RubyKaigi with a summary of the speed history of Rails by Ruby version. I assessed how fast current Ruby was compared to 2.0. (rubykaigi page) (slides)
Play link for YouTube (<- YouTube link) RubyKaigi stage picture RubyKaigi stage picture
DAQRI Augmented Reality Smart Helmet
2015-2016
At DAQRI I was back-end services architect and team lead for a tools and infrastructure team for their Smart Helmet product. The smart helmet was designed for workplace safety, and we added monitoring, system configuration and automation to support reliability and auditability. Our infrastructure was AWS-based, using Puppet for configuration management. Our team was about 50/50 infrastructure tooling and app development in Ruby, with me doing both.
OnLive: Engineering Blog, Open-Source Software
2013-2015
While at OnLive, I scrubbed and open-sourced older code, wrote and open-sourced new tools and started an engineering blog while coordinating with legal about code and information release. I wrote most blog content and some of the open source code.
See the OnLive GitHub repository and the OnLive Engineering blog.
OnLive Analytics
2013-2014
I served as OnLive's head of Analytics — the old team was gone before I arrived. I analyzed, documented and debugged the system, and then began making upgrades while recruiting a team. The existing system was enormous, and much cleanup work was replacing underused technologies with smaller, simpler replacements. I also supported the Business Intelligence team's needs for new data sources and infrastructure. Technologies maintained and/or sunsetted included Pentaho Reports, Kettle, Coral8, Esper, InfoBright, sharded MySQL, Grails, Java, Tomcat, Flash. Newer technologies used or integrated with included Rails, ZenDesk, iPost.
Valhalla, a Ruby SOA Platform
2013
I was brought in to be technical lead for Valhalla, a prototype to replace an existing legacy allocation and scheduling system for back-end servers. It used a novel dual-mode SOA/monolithic architecture based on Olaf, also written by our team. We attempted to use Cassandra for geographically distributed sync, with mixed results.
Hastur, a Cassandra-Backed Monitoring System
2011-2013
At Ooyala, I co-architected Hastur, a Cassandra-backed observability system, with Amy Tobey. It used ZeroMQ transport and had front ends in Ruby, Go, Scala and C. At peak, it pushed over 50,000 production messages/second. Useful features included high-cardinality retrieval, automatic collection and dashboards.
Overwatch Dashboard 1 Overwatch Dashboard 2 Overwatch Dashboard 3 Hastur Front Page Hastur Dashboard 1 Hastur Dashboard 2
Analytics for Ooyala
2011-2012
I worked as a senior engineer on analytics for Ooyala's 'Backlot' asset management system. We used Cassandra for storage, metrics/rollups and tagging.
Ooyala Backlot 1 Ooyala Backlot 2
DAQRI Technical Talks (Speaker, Organizer)
2015-2016
At DAQRI, I established a series of weekly technical talks on relevant topics: distributed systems, reliability, DevOps, Ruby, security. I gave about half the talks, and filmed and edited all of them.
Ruby Remote Conf 2015
2015
I spoke at the Ruby Remote Conference 2015 on Ruby Web Appliction architecture.
(<-- YouTube link)
Ruby Rogues Episode on Deployment Tools
2015
I had the good fortune to be a guest on the Ruby Rogues, a then-extremely-popular Ruby podcast, in March of 2015. They liked me enough to invite me back for another episode in May of the same year.
Guest Chef for Avdi Grimm's RubyTapas
2014
Avdi Grimm asked a few folks about recording a guest episode of RubyTapas, back before that was common. I got to be one of the earliest guest chefs!
Sorry, this episode is not free, so you'll need to subscribe to see it.
GottaBeGood Tour Talk: "Sustainable Ambition"
2015
My wife and I delivered a talk on Sustainable Ambition for Sebastian Marshall's second GiveGetWin tour. It covered how to succeed in large projects (writing books, running a marathon, homeschooling children) when real life gets in the way.
OnLive Recruiting Talks
2013-2014
I gave talks on Ruby concurrency (threads and processes), Ruby app servers and Ruby HTTP app architecture at local meetups to recruit new Rubyists to OnLive. I also arranged a private meeting with Matz (Yukihiro Matsumoto, creator of Ruby) for OnLive while he was in the US. (slides) (slides) (slides)
The Littlest ORM (GoGaRuCo 2013, TorontoRB)
2013
At 2013's Golden Gate Ruby Conference, I was honored to deliver a talk on building a simple ORM in Ruby called "The Littlest ORM." The ORM code was small and simple enough that I showed and read through all of it from slides in a nice large font, in a talk that clocked in under 30 minutes! I later gave the same talk for the TorontoRB Meetup. (GoGaRuCo video on YouTube)
OnLive Talks on Ruby and Distributed Systems
2013-2015
Many talks on many topics at OnLive, including:
Rack in Every Framework (eLance, others)
2013
Rack in Every Framework - writing Rack endpoints and middleware, and integrating them in various ways with various frameworks.
Picture of a slide
Hastur: Open-Source Scalable Metrics with Cassandra
2012
"Hastur: Open-Source Scalable Metrics with Cassandra," from the Cassandra Summit 2012 (Video) (Slides PDF)
The talk primarily covered our Cassandra schema. This was before CQL, and some of the architectural decisions are specific to that era of Cassandra. It's a decent example of how to store a complex and highly-indexed time series in Cassandra.
Hastur architecture slide Hastur architecture slide
Ruby Big Data Tools at Ooyala (GoGaRuCo lightning talk)
2011
Ruby Big Data Tools at Ooyala, given as a Lightning Talk at GoGaRuCo 2011. It was a brief rundown of how we used Hadoop, Cassandra and Logstash at the time.
Ruby Big Data at Ooyala
The Ruby Hangout Rack Talks
2013
The Ruby Hangout
Just Build Your Server on Rack (and the Five-Minute Ruby Framework). (YouTube video). Given as an informal talk plus questions for The Ruby Hangout.
The Ruby Hangout
Building Ruby Castles in the Clouds
2013
Building Ruby Castles in the Clouds, an interview with Sebastian Marshall (text interview). Sebastian runs a popular blog on self-improvement and strategy, and GiveGetWin.
The Five-Minute Ruby Web Framework
2012
The Five-Minute Ruby Web Framework. Given as a Hacker Dojo lightning talk with slides.
Skillshares at Ooyala
2011-2012
Various skillshares and presentations at Ooyala:
Self and Instance Vars Ruby Gotchas
Consulting for Serpikko
2012
Serpikko (then called ScamArmour)
Part-time freelance work on ScamArmour's prototype web site and Mechanize-based scraper. Pre-funding company, rescue job.
ScamArmour 1 ScamArmour 2 ScamArmour 3
Ruby on Rails Associate Adjunct Professor, CMU West (Silicon Valley campus)
2011-2012
Carnegie Mellon University West
Office hours and tutoring in Ruby on Rails for masters students in the Master of Software Engineering program at CMU's Silicon Valley campus. Part-time.
Ooyala Open-Source and Tooling
2011-2013
Various projects, usually open-source, including Hastur, Glowworm, Nodule, Nimrod, Tortoise, Sequel Rails Migrations, a documentation server, MapReduce Framework, Barkeep, Ecology, Termite. See Ooyala's GitHub repo for all the released projects
Glowworm control panel 1 Glowworm control panel 2 Documentation Server 1 Documentation Server 2
Replacing Java Incrementally with JRuby
2010
On-Site Manager, Inc
A talk, "Replacing Java Incrementally with JRuby", about JRuby work at On-Site. Delivered at LinkedIn's campus. (video)
a picture of me speaking (link to YouTube)
On-Site.com
2009 - 2011
I worked as an engineer at On-Site.com, a SaaS web app for the multifamily unit rental industry. On-Site had a Java app of long standing that we were converting to use JRuby and Ruby on Rails.
On-Site front page On-Site user search (dev)
Emblaze Mobile Operating System
2008 - 2009
Systems Americas, purchaser of PalmSource
At ACCESS, I co-architected a mobile phone OS/UX project called Emblaze First Else. This was powered by ALP, but involved a complete UI and graphics rewrite. We primarily used GObject (the basis of GTK+), Clutter and OpenGL.
Emblaze Else Emblaze Else Emblaze Else Early prototype hardware running ALP 3.0
ACCESS Linux Platform, a Successor to PalmOS
2007 - 2008
I worked with the former PalmSource/PalmOS team on the ACCESS Linux Platform, including Tasks, Memos, Photos and Attention Manager. We worked in GTK+ and C on Linux. An expanded multinational engineering team was managed from California. Code quality was kept up using Coverity, which helped immensely.
ALP Screenshot ALP Screenshot 2 ALP Screenshot 3
PeakStream, Inc.
2006 - 2007
At PeakStream, now part of Google, I wrote CodeBaby, a Python template system for C and C++ source-code generation (and a few other projects)
Ultra-Fast Zoomable Graphics for SugarSync Mobile
2005 - 2006
For our Photos product, now called SugarSync, I integrated Kakadu's implementation of JPEG2000 and prototyped the same with LuraTech as well. I also handled scaling, zooming and cropping, for which I wrote custom very fast fixed-point image libraries. My implementation was shown off within Palm to demonstrate, "hey, these new Windows phones have a lot of horsepower! Look how fast the graphics can be!" Code ran on WinCE and Windows2000. Our client apps team was two people - I focused on graphics and custom image decoding.
Win32:
Windows Mobile:
TapWave Graphics Hardware Acceleration
2004 - 2005
Hardware acceleration support for the TapWave Zodiac, created by TapWave using PalmOS.
Tapwave Zodiac
BroadCom Set-Top Boxes
2002 - 2003
Captioning APIs (CC, CGMS, WSS, TeleText) for various BroadCom cable set-top boxes, including the now long-discontinued 97115 and 7110.
NVidia Graphics Drivers
2003 - 2004
Engineer on Linux NVidia graphics drivers for iTanium and Intel.
PalmOS SD Card Support
2000 - 2002
File system and launcher integration of apps on SD cards for PalmOS (launched with m500-series.) I was on the team of 4 engineers building this.
PalmOS HostFS
2000 - 2001
HostFS, a file-system emulator for the PalmOS Emulator
.
A newer emulator.  The old one was blockier.
Automated Source-Code Analysis and Generation
1999 - 2000
NOW Solutions
RIPC, a system to generate CORBA-like pairs of proxies and stubs. It used a Perl script to generate the code from C++ headers, including inheritance information and additional keywords for timing and data handling. This was used by NOW Solutions for embedded WinCE in-vehicle tracking.
Callout Tools from a Highly Dynamic Language
1995 - 1997
As a student employee of CMU's Gwydion Project, I helped maintain Melange, a C callout tool for Dylan
Shards of Faerie
2018-2019
A simple implementation of an Entwined-like choice-based game engine, intending to put other simple games into it as well. Open-source, like nearly all my hobby projects.

Shards was partly an attempt to use Rails and ActionCable to see how they held up for web game programming.
Trackless Sea
2016-2018
Trackless Sea, a PIXI.JS display server for TMX terrain files and graphics from the Liberated Pixel Cup. This was based on Surveyor, with a new game engine under the hood and a new display library partially completed.

The server engine was built on EventMachine, an evented Ruby library.
No More Lost Data
2016
No More Lost Data is a no-longer-for-sale text-and-video technical class on Rails Migrations and how to avoid downtime, data loss and other problems for large or busy production databases. (teaser video)
Rails Deploy in an Hour
2014-2015
Rails Deploy in an Hour is a no-longer-for-sale text-and-video technical class on deploying Rails apps quickly and easily on highly-scalable open-source tools. Normally the integration of these tools can take days or weeks to set up — the class software allows this in well under an hour using the open-source Ruby Mad Science software, also by me. Primary tools included Rails, Chef, Capistrano and Vagrant.
Ruby Mad Science
2014-2015
Ruby Mad Science is MIT-licensed software to deploy a custom server for your Rails apps, quickly, using Chef, Capistrano, Vagrant and other tools. The setup takes under an hour for most apps, but uses standard best-in-class open-source tools so you can scale out later.
Octopress Bootstrap Sites
2014 to 2016
I redesigned Codefol.io and several product sites to use Octopress, and wrote several large batch jobs to reprocess Disqus comments properly for Codefol.io.
Rebuilding Rails (self-published)
2012 to present
2016, 2019
Rebuilding Rails, an ebook on building your new Rails-like framework from scratch — "Understand Rails by building Rails." It's also one of the best sources of documentation on the Rack framework, which can be difficult to approach. In addition to the book, I wrote the sales site and initial Stripe payment integration, plus marketing materials like email.

Rebuilding Rails has sold a few thousand copies and is one of the few books to help intermediate Rubyists become advanced Rubyists.

Rebuilding Rails was also taught as an in-person class at OnLive and AppFolio.
Surveyor
2013
Surveyor, a CreateJS display server for TMX terrain files and graphics from the Liberated Pixel Cup. Graphics via Source of Tales.
Parallel Ray-Tracer (student project)
1998
Parallel raytracer for a CMU computer graphics class. Group project. I wrote the distribution server and some of the renderer.
Navier-Stokes Fluid Simulation in JavaScript
2011
Navier-Stokes fluid flow simulation in JavaScript, based on Jos Stam's GDC03 code and paper. I added a lot of controls and some minor modifications.
Click to play with it (<- Live Javascript Link) Screenshot Screenshot Screenshot
This Portfolio
2010-present
2010-2015
This portfolio. Initially this was an exercise in frontend development like hashchange, jQuery and templating rather than the server-side dynamic sites I was used to. It has slowly changed into an appreciation of how much easier modern Bootstrap is than old Bootstrap, and how much I can improve my visual presentation skills by just writing less.
end-of-2018 redesign screenshot of the portfolio Screenshot Screenshot Ooh, recursion!
Shanna's Pizza
2010
I wrote Shanna's Pizza, a simple game to teach young children to use logic gates for simple programming. Minimal text, for ease of use by pre-readers. Written in C with SDL. Linux and Windows.
Early screen 1 Early screen 2 Later screen 2 Later screen 2
RailsGame, a Server-Push Experiment
2009 - 2010
RailsGame (implementation, example), a Juggernaut-based approach to merging a persistent game server with a dynamic web site, sharing content and permitting use of a web client without constant AJAX polling. A dynamic, persistent browsergame engine.
very early screenshot design diagram
CheapToad
2009-2010
CheapToad, a very simple plugin to turn any Rails project into a HopToad exception server with only a few lines of code! Uses Rails Engines and a gemplugin to make this happen. Generates an RSS feed of your app exceptions.
NeoArchaeology, an Early Success at Writing
2004, 2009
NeoArchaeology was a column I wrote for Skotos back in 2004. one article got SlashDotted, which was gratifying. Edited by Shannon Appelcline.
RailsFrame, for Server Automation and Configuration Management
2011
RailsFrame, a deployment framework to set up a virtual Rails server with Vagrant using a specified set of applications and packages. Useful for things like server-push apps that often have extensively dependencies on other processes running at the same time.
WantMyJob
2007 - 2008, 2010 - 2011
WantMyJob, a web app for trading suggestions about finding good employers. Ruby on Rails. My first significant Rails app, rewritten multiple times as I improved. It was useless in practice, but invaluable exercise.
Late 2010 screenshot Early 2010 screenshot 2008 screenshot 2007 screenshot
RefactorIt
2010
Refactor It, a very simple web app to let users upload snippets of code, and suggest refactorings of other people's snippets. It was also a simple Rails 3 app tutorial with blog post (GitHub repo for tutorial).
My Blog, the Early Years
2009 - 2010
Once called Blog.angelbob.com, (ancient implementation), it was a simple Rails-based blog, from scratch. Includes route mappings to translate from ancient WordPress entries, Disqus comments, tags, and other normal blog features. I mention it for content, not codebase. This was some of the first content I carried forward with me, treating it as something important to transition and to preserve.
2009 screenshot older top screenshot older bottom screenshot old post with Disqus form
DiffEQ, My First RubyGem
2006-2007, 2010
DiffEQ RubyGem. Symbolic manipulation, numerical integration, basic graphing of Ordinary Differential Equations. Includes its own simple algebra package and GNUplot output.
simple code excerpt simple graph output large Lotka-Volterra pred/prey graph small Lotka-Volterra pred/prey graph simple ruby code for Lotka-Volterra predator/prey graph
Phantasmal, an LPC MUD Library for DGD
1999 - 2008
Phantasmal MUDLib for DGD. I was the initial and primary author, primary maintainer until 2008. I handed off control in 2008, but it was never successful enough to have a user base.
DGD's Primary Documentation Site
1999 - 2008
I wrote the first significant documentation site for the DGD programming language. There was a many-years-old mailing list, which I organized into a site with Perl-scripts and HTML. I handed off control of the site in 2008, and it seems to be offline these days.
CrystalSpace Physics Code
1998
Early work on Physics code for CrystalSpace, a 3D library
Maslow, an AI Experiment
2008-2009
Maslow, a trivial needs-based AI for evaluating actions and predicting futures.
Facelets
2007, 2010, 2012
Facelets, a simple JavaScript Canvas webtoy for FireFox and Safari. Later, one of my earliest forays into CoffeeScript as a rewrite.
SillyBand for MIT Scratch
2007
SillyBand, a very quick demo project for MIT's Scratch. All media made by me, very, very quickly.