I've been programming since I was old enough to learn that the Atari computer plugged into our TV did more than play games. I've been hooked ever since.
Online you'll either see me as XyzzyB or sdball@gmail.com.
I was first introduced to Ruby and Rails back in 2006 with the Pragmatic Programmer's book Agile Web Development with Rails (2nd edition).
I used it for hobby programming off and on until 2010, when I had the opportunity to switch from Django and PHP to using Rails professionally. Coming from the world of Django and its settings.py, the phrase "convention over configuration" was especially refreshing.
One thing about Rails that I've become particularly enamored with is the community. From Ryan Bates' RailsCasts to the Ruby Rogues to expansive Ruby/Rails community on github, I feel like I always have someone to turn to who genuinely wants to help.
I've been using ruby for scripts since I got into the language around 2005. Coming from perl, I was pleased to find that a lot of the idioms I was familiar with still worked.
My favorite things about Ruby? It's beautiful, expressive, and the community is fantastic.
In 2007 I watched Douglas Crockford, The JavaScript Programming Language and it single-handedly opened my eyes to the power, functionality, and (yes) beauty of JavaScript.
The introduction of jQuery at around the same time made client-side programming too enticing not to dive into.
MySQL was one of the areas of programming I focused on the most while learning to program professionally. Prior to Rails I developed web applications without an ORM, so I'm quite comfortable getting down into the database level and pulling together some SQL.
When I switched from to ruby from python fulltime I immediately started searching for a replacement to virtualenv. Thank goodness I quickly found rvm; it was exactly what I was hoping for. Rvm turned out to be an even more capable tool since it managed language versions in addition to project libraries.
More details: View Blog Post
I use the git command line interface for everything except staging commits; that's where GitX comes in. GitX allows me to easily see the differences that I'm about to commit, stage files or sections of a file, and amend the previous commit.
Ah TextMate. For years I was a diehard vim user; then I saw TextMate in a Unit Testing screencast by James Edward Grey back in September 2006. I was immediately hooked.
I dove through Grey's pragmatic programmer's book on TextMate and made myself an expert. I can slice through text files, HTML, JQuery, and ruby like butter. Even years later it's still the editor that looks gorgeous and gets out of my way.
Ah, Heroku. I was sold the first time I ran
git push heroku masterI had just finished spending four hours trying to get a Rails app to properly deploy to my Dreamhost server space. Ugh! I had the same app deployed to Heroku in just under five minutes.
When my Rails apps need to do some background processing, I turn to resque to keep my user experience snappy. Good examples are sending emails, calling out to slow third party APIs, or doing intensive processing.
Recently Qu has been released. It makes a persuasive argument for its use, but I haven't had the chance to give it a spin.
The Rails 3.1 asset pipeline is the answer to a problem I didn't quite realize I had: sanely partitioning third-party libraries, images, and styling from those specific to my applications.
I can now drop resources like the twitter bootstrap css I'm using on this site into /vendor then pull them into my application by adding them to the manifest files. Nice!
Solarized had me from the first time I visited their site and was greeted by the gorgeously clear color scheme with the tag line "precision colors for machines and people". Exactly what I was hoping for. Switching felt like seeing my code for the first time.
Rather than spending a lot of time upfront coming up with a design for a new application I can just drop in the bootstrap and get a perfectly nice looking base to build from.
My search engine of choice. Its zero-click results from stack overflow and github work very nicely for doing programming research. Its bang! searches paired with chrome give me hundreds of custom site searches for free.
Gabriel Weinberg, its developer, is also surprisingly approachable and happy to discuss new features or ideas for the engine.
My blog and primary hobby domain.
Currently xyzzyb.com is a tumblr blog. It has at various points been:
This is a fun site where I recreate famous movie terminals in JavaScript. I've currently only implemented the movie terminal from the movie Alien, but I have more planned. Now that I've gotten a basic framework down I should be able to move fairly quickly.
After yegg announced the ability to contribute code to DuckDuckGo, I jumped at the opportunity. I saw that pulling in XKCD from its jsonp API was a potential idea: right up my alley! I coded up a quick JavaScript script to plug XKCD into DDG and I was actually the first to have code accepted to the zeroclickinfo-spice repository.
Another contributor added a DuckDuckGo feature to roll a six sided die. I took it upon myself to improve on that and support Dice Notation; e.g. "roll 4d6 - L" or "roll 2d12 + 4"
I created the IPDatabase for the server team in the UNC-Chapel Hill University Library. It replaced an Access Database and added many new features in the process.
I was Bandwidth.com's primary site admin for about two months in early 2010. Now I've just contributed CSS and JavaScript expertise to the current design.
Broadband.com is the website for the Business Internet department and my primary responsibility at Bandwidth.com.
It's a Rails app that's currently just a brochure site, but for a time ran a resque-backed pricing engine with some interesting JavaScript for dynamic page creation.
One of my first tasks at Bandwidth.com was to take a look at our over 400,000 points of telecom data and see if it was feasible to plot them on a a Google Map. I went through various experiments such as locking the zoom, using marker manager, and using a custom marker loader before finally hitting on using Google Fusion tables locked down to our Google Premier key to house and serve the data.
The Broadband Map was featured on GigaOM in March 2011.
For UNC one of my projects was to investigate plugging CoolIris into our digital collections. Happily, I succeeded. The key was to add media rss functionality to ContentDM; no small feat since ContentDM is a complex third party application of nested PHP. While I was at it, I added general RSS functionality to our digital collections since that was a feature that we'd always been interested in delivering.
But get it working I did, you can now see my handiwork by going to a digital collection and clicking "View in 3D" to open a modal window I designed to house their flash photo browser.
If it's online and interesting I bookmark it for later reference. As of October 2011 I've collected 2500+ bookmarks.
Top tags:
I follow dozens of news feeds and programming blogs to keep current.
Some highlights
I'm addicted to these books. I bought an iPad in large part because of its capabilities as an epub reader so I could have my pragprog collection (34 books and counting!) wherever I go.
In addition to books, their monthly magazine is a wonderful resource.
This is a relatively new podcast — started in May 2011 — but it's proven to be a superb resource. Every week we get to hear a round table discussion of actual programming techniques and concepts from some of the top names in Ruby.
I can't fully describe how invaluable this website has been to me. For learning a new tool or technique, nothing beats following along with Bates' informative and insightful screencasts. Every new video seems to hit something that I was just talking about looking into with a co-worker.
Sure, github is great for hosting git repos. But it's biggest benefit is the social coding community that it's managed to build. I learn a lot by browsing through code the projects that I use; github makes it so easy.
To learn how to develop software nothing beats actually creating software. I firmly believe that there is an amount of mental muscle memory that goes along with being a great programmer.
Reading about a good technique? Ok if you're just about to use it. Reading about a good technique, writing a script around it, breaking it and seeing how it all fits together? Now you've built up some context memory around that technique and will be more ready to recognize when it can and should be applied.
One of my favorite hobby programming assignments is to improve DuckDuckGo. Yegg has built a system for enhancement that is surprisingly approachable and well suited for hacking on simple and fun features.
| Title | Author |
|---|---|
| The Pragmatic Programmer | by Andy Hunt and Dave Thomas |
| Advanced Rails Recipes | by Mike Clark |
| Agile Web Development with Rails (3rd edition) | by Sam Ruby, Dave Thomas, David Heinemeier Hansson, et al |
| Agile Web Development with Rails (4th edition) | by Sam Ruby |
| Agile Web Development with Rails (2nd edition) (Paper Book & eBook) | by Dave Thomas and David Heinemeier Hansson, with Leon Breedt, Mike Clark, James Duncan Davidson, Justin Gehtland, and Andreas Schwarz |
| Best of Ruby Quiz | by James Edward Gray II |
| CoffeeScript | by Trevor Burnham |
| Continuous Testing | by Ben Rady and Rod Coffin |
| Data Crunching | by Greg Wilson |
| Design Accessible Web Sites | by Jeremy Sydik |
| Everyday Scripting with Ruby | by Brian Marick |
| FXRuby | by Lyle Johnson |
| iPhone SDK Development | by Bill Dudney and Chris Adamson |
| Land the Tech Job You Love | by Andy Lester |
| Metaprogramming Ruby | by Paolo Perrotta |
| Practical Programming | by Jennifer Campbell, Paul Gries, Jason Montojo, Greg Wilson |
| Practices of an Agile Developer | by Venkat Subramaniam and Andy Hunt |
| Pragmatic Ajax | by Justin Gehtland, Ben Galbraith, and Dion Almaer |
| Pragmatic Thinking and Learning | by Andy Hunt |
| Pragmatic Version Control Using Git | by Travis Swicegood |
| Pragmatic Version Control using Subversion (2nd edition) | by Mike Mason |
| Programming Clojure | by Stuart Halloway |
| Programming Cocoa with Ruby | by Brian Marick |
| Programming Erlang | by Joe Armstrong |
| Programming Ruby (2nd edition) | by Dave Thomas, with Chad Fowler and Andy Hunt |
| Programming Ruby 1.9 (3rd edition) | by Dave Thomas, with Chad Fowler and Andy Hunt |
| Prototype and script.aculo.us | by Christophe Porteneuve |
| Rails for PHP Developers | by Derek DeVries and Mike Naberezny |
| Rails Recipes | by Chad Fowler |
| Scripted GUI Testing with Ruby | by Ian Dees |
| Ship It! | by Jared Richardson, Will Gwaltney, Jr |
| TextMate | by James Edward Gray II |
| The RSpec Book | by David Chelimsky, Dave Astels, Zach Dennis, Aslak Hellesøy, Bryan Helmkamp, Dan North |
| ThoughtWorks Anthology | by ThoughtWorks |
| Web Design for Developers | by Brian P. Hogan |
| Title | Author |
|---|---|
| Beautiful Data | by By Toby Segaran and Jeff Hammerbacher |
| Cooking for Geeks | by Jeff Potter |
| Designing Interfaces, Second Edition | by Jenifer Tidwell |
| High Performance JavaScript | by Nicholas C. Zakas |
| JavaScript: The Good Parts | by Douglas Crockford |
| jQuery Cookbook | Edited by Cody Lindley |
| Learning the iOS 4 SDK for JavaScript Programmers | by Danny Goodman |
| MongoDB: The Definitive Guide | by Kristina Chodorow, Michael Dirolf |
| RESTful Web Services Cookbook | by Subbu Allamaraju |
| Scaling MongoDB | by Kristina Chodorow |
| SEO Warrior | by John I Jerkovic |
| SQL Cookbook | by Anthony Molinaro |
| Title | Author |
|---|---|
| Delivering Happiness: A Path to Profits, Passion, and Purpose | by Tony Hsieh |
| Distributed Programming with Ruby | by Mark Bates |
| Eloquent Ruby | by Russ Olsen |
| Rework | by Jason Fried and David Heinemeier Hansson |
| A Short History of Nearly Everything | by Bill Bryson |
And many, many more on a wide variety of topics and varying levels of fiction and non-fiction.