Stephen Ball Rails Developer

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.

Rake Routes

Rake Routes is a new blog I’ve started on the fundamentals of Ruby and Rails development. It’s less than a month old, but has already gathered some great press and community support.

8,455 vistors as of March 3, 2012 since I launched it on February 5, 2012 (and only 1.9% from search engine traffic).

Featured Articles

Anonymous Blocks as Function Arguments in Ruby Let’s Write a Gem Coffee Taster: An Easy CoffeeScript Development Environment for Ruby Developers

CoffeeScript Cafe

CoffeeScript Cafe is a blog I started late last year on CoffeeScript. So far I’ve focused it on CoffeeScript news, but now that Coffee Taster has been released I plan to expand it into tutorials.

Movie Terminals

Movie Terminals is a fun site where I recreate famous movie terminals in JavaScript. I’ve currently only implemented the movie terminal from the movie Alien and started on Alan’s terminal from Tron.


Contributions to DuckDuckGo

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 that as a base and wrote in full support for rolls using Dice Notation; e.g. ”roll 4d6 - L” or ”roll 2d12 + 4

Bandwidth.com Company Sites

  • bandwidth.com - formerly site administrator and web programmer
  • broadband.com - 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.
  • republic wireless customer portal - a Rails app allowing republic wireless customers access to standard account management tools. My biggest contribution here was the phone number porting data model, UI, and API interface.

Broadband Map

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.

MediaRSS feeds for UNC Digital Collections

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 spaghetti 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.

You can now see my handiwork by going to any digital collection and clicking “View in 3D” to open a modal window I designed to house their flash photo browser.

Rails

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.

Ruby

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.

Just like Rails (not surprisingly) the community around Ruby is the most amazing thing about the language. Yes Ruby is beautiful and expressive, but the community of professional support and camaraderie is really where the magic of Ruby happens.

CoffeeScript (JavaScript)

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. So dive I did, and I got pretty good at writing gracefully degrading client-side logic.

Since Rails switched to CoffeeScript in 2011 I’ve been using that more and more for those quick snippets of jQuery interaction. I haven’t yet used it to make anything large or complex, but I like what I see so far.


TextMate

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 pragprog book on TextMate and made myself an expert. Using TextMate I can slice through text files, HTML, JQuery, and ruby like butter. Even years later it’s still my goto editor that looks gorgeous and gets out of my way.

Heroku

I was sold the first time I ran

git push heroku master
I 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.

Cedar stack’s support for custom process management has made it easier than ever to build and deploy more complex Rails apps with background processing and other interesting things happening alongside the web application.

resque / delayed job

When my Rails apps need to do some background processing, I turn to resque or delayed job to keep my user experience snappy. Good use cases are sending emails, calling out to slow third party APIs, or doing any kind of intensive processing. The key is: don’t block the controller from responding to the browser.


SQL (MySQL and postgres)

SQL queries were one of the areas of programming I focused on the most while learning to program professionally. Prior to Rails I developed PHP web applications without an ORM, so I’m quite comfortable getting down into the database level and pulling together some SQL.

rvm

When I switched from python to Ruby I immediately started searching for a replacement to the excellent virtualenv (python environment manager). Thank goodness I quickly found rvm and it was exactly what I was hoping for. Gem and Ruby version management wrapped up in an easy to use system.

Blog post at xyzzyb.com: rvm > virtualenv

git and gitx

I’m that guy who’s read multiple git books cover to cover. If someone is having trouble with git then I’m usually the fixer.

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.


solarized color scheme

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.

twitter bootstrap

The twitter bootstrap is awesome. 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.

The 2.x release has proven to be a great update to the original and all the supporting sites that are popping up are contributing some great stuff. Like the theme you are looking at now, for example.

DuckDuckGo search engine

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.

Its founder and main developer, Gabriel Weinberg, is also surprisingly approachable and happy to discuss new features or ideas for the engine.

@sdball on Github

  • coffeescripts

    A collection of CoffeeScript scripts to serve as examples and tutorials for CoffeeScript Cafe.

  • sdball.github.com

    Stephen Ball, Rails Programmer

  • puzzle_code

    A repository of solutions (or attempts at solutions) for various code puzzles.

  • batterylevel

    python script to output your mac’s current battery level

  • savonforce

    A Ruby interface to the SalesForce SOAP API using the Savon library.

  • django-projectboard

    Simply track upcoming projects or events.

  • SimpleValidator

    A simple data validation class for PHP

Github Achivements

DuckDuckGo Karma Widget


xyzzyb on pinboard

If it’s online and interesting I bookmark it for later reference. As of October 2011 I’ve collected 2500+ bookmarks.

Top tags:

RSS Feeds

I follow dozens of news feeds and programming blogs to keep current.

Some highlights

  • Chris’s Wiki: the blog of a sysadmin and python programming. A lot of what he goes into is both above my head and lower level than I normally get, but I still enjoy reading it.
  • Hacker News: a great place to keep up with the tech and business
  • slashdot: I was following this site back in the 90s and have the low five digit uid to show for it. I actually remember when /. introduced user accounts but waited to sign up for one because I thought that registering onto a website was a weird idea.
  • rubyflow: the ruby community blog, full of great links and posts

The Pragmatic Programmers

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.

github

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.

Ruby Rogues

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.

RailsCasts

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.

Destroy all Software

Watching Gary Bernhardt code is an amazing experience. Behavior driven development, masterful vim manipulation, and interesting discussion. These videos are like hanging out with a really, really talented programmer who’s just showing you a trick or two.


Programming

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.