Like a jazz riff, but with words.

In Memory, Aaron Swartz

When I begin to write, I start with an almost audible internal monologue, a set of rambling and rarely cohesive set of words and fragmented sentences that if I’m lucky, I’ll edit later into a rambling and barely cohesive set of run-on sentences.

But until I wrote that sentence, every time I’ve started this post, I had not gotten farther than “I… uh”

I… I’ve never really completely understood that when a tragedy occurs, particularly with famous people, the reactions, the emotions, the out-pouring of grief, or anger, or sadness. I don’t mean that I don’t logically, or psychologically, or sociologically understand the connection that people form to a person that they’ve never met, but yet touches their lives through music, or art, or politics, or whatever bridge that forms with someone you never know, but still know through that connection. I’m not a stranger to suicide, but even then, I’m not sure that even that particular tragedy when it has happened to strangers, celebrity strangers, has ever really moved me prior to now

Now? Now I can’t stop thinking about Aaron Swartz.

If you know anything about that how’s and the why’s and the who’s of the technology and the politics and the issues of the internet, you’ll know about Aaron. If you don’t, you should. Start where I learned about his passing – from a link by Jason Kottke to Cory Doctorow’s post. Then others, from Duncan Davidson to Larry Lessig to danah boyd and maybe what touched me the most, from Quinn Norton

You should know, and once you know, I don’t know anyone in my life that wouldn’t care. Aaron seemed to be able to make you care.

I never knew Aaron Swartz, I never met him, I never interacted with him. But I’ve known a little something about Aaron maybe as long as anyone has known about Aaron in the internet world. I had vague memories of Phillip Greenspun’s ArsDigita prize – I remember (after Phillip’s reminder) when Dave Winer bitched about the 17 year old kid, Reddit, Recap, the MIT/JSTOR incident, all that I had read.

Most of all, I’ve read and known as much as you can know a stranger through his own words

During a particularly difficult conversation with a colleague last year, I linked to Aaron’s words post-Steve Jobs biography, because it said what I was trying to say, about how I approached things, and even sometimes, and unfortunately, how I expressed things.

Another time I had linked to Aaron’s “Sweating the Small Stuff” post in the attempt to explain to others just what it took to do the job we do.

Aaron could communicate things and see things in ways that I’m not sure I’ll ever be able to do.

Aaron was 26 years old. I’m almost 40. I’ve worked very hard and very long and I’ve been lucky as well to be in a position to be good at what I do, but in what is part of a source of both connection and conflict with friends and colleagues, my work and the work I’m involved in is never good enough.

Because I want to be as smart, and as lucid, and as good at what I do as Aaron Swartz.

As Duncan pointed out, Aaron once said that “I think a lot of what people call intelligence just boils down to curiosity.” I don’t disagree with that, but the most awe-inspiring thing about Aaron was his ability to act on that curiousity at the level in which he did.

And even still, like all of us, Aaron was human, with all the foils and flaws of us all, maybe made even harder and harsher by his intellect. Our greatest strengths are just as often our greatest weaknesses.

I can understand where he was, at least as much that anyone that can only know him through his own writing and through the writing of his friends can understand. I went through some things in my 20’s that were a pale comparison to what Aaron was facing with the federal trial. Had I faced what Aaron was facing, I don’t know that I would be here today. Looking at 40, I want to say the same things that Duncan Davidson would have said and that Quinn Norton said to him and undoubtedly others in his life have said and would say. It gets better.

Aaron’s life inspired his friends, and those of us that were his fans. And those friends and fans will make sure that his life continues to effect change.

I just wish for Aaron, for his family, for his friends, for all of us, that he was still with us to see it.

Maps - Illustrated

I’ve been giving a lot of slack to Apple over their release of their own Maps service in iOS6. Maybe it is because I don’t depend much on my iPhone maps to search for businesses or places. Maybe it’s because I’m pragmatic enough to know that mapping is really hard, and pretty much all mapping software has challenges, and while it’s so un-Apple like in recent memory to be so bad – maybe I remember how bad the first versions of OS X and OS X server were, and that iOS didn’t even have copy and paste for goodness sakes. And don’t get me started on the Xserve. Maybe I’m still pissed at Google about Google Wave. Or maybe I’m just an Apple fan(atic).

I really like parts of iOS6 maps, and the whole Apple-Google spat is at once great for innovation-through-competition, and lose-lose over Google data-backed features and Apple presentation – including Maps, all at the same time.

I’ve been searching for a new house in NC for about three years now, usually the western side of the Research Triangle Area, and sometimes in the mountains of NC from Boone to Asheville.

I’ve used Google Maps a tremendous amount as well as Microsoft Live maps (whose “bird’s-eye view” trumps Google’s aerials most of the time in NC). They are far from perfect, but it’s still awesome – 12 years ago buying my first house, I had nothing like this, and man I wish I had.

Apple deserves flak, especially with how they set expectations. And the maps can be really, really bad. And thankfully the internet is there to let us know just how bad

But if any of you out there, for one second, are going to somehow give Google some holier-than-thou-so-much-better-than-Apple-maps pass? You better think again, because while searching for where the Oklahoma City memorial was this evening – this is what Google Maps showed me – a sponsoring business 4.5 miles out of place – right on the Alfred P. Murrah Federal Building Plaza.

And that folks pretty much illustrates the whole Apple – Google difference for me.

Total Crap UX Design at Twitter

Like any self-respecting web developer, I’m pretty pissed at Twitter right now.

No, it’s not about that whole API thing where they are intent on becoming the next Compuserve.

It’s about what has to be the most idiotic settings page user experience I’ve had in a long, long time. (I’m just going to ignore that checkbox in my own application that didn’t do anything for about 3 years that I discovered last week)

About a week and half ago, in a bit of snit, I decided to “protect my tweets”

Through no fault of Twitter’s – I’m using 1Password for my twitter password. When you change your twitter settings, – it presents a javascript modal to provide your password. Unfortunately, the by-product of this was to enter my username in the email field which was then submitted along with the “checkbox” for Protect My Tweets, which then submitted the email as “jasonadamyoung” – which came back from Twitter as “This email is invalid” – but then Twitter in their UX brilliance, didn’t show “jasonadamyoung” in the email field (which it would have dawned on me as invalid) – it showed me my email address.

I took this as some Fail Whale event on twitter’s part at the time. I ended up working around it by managing to change my email to another email address and then cancel the confirmation of changing it.

Tonight, I decide to change the setting back, and finally – after multiple “this email is invalid” – both from the AJAX email lookup – plus the form submissions, managed to realize that 1Password was the likely culprit.

Only now, I want to check the setting off on my Twitter stream – and WHILE NOT CHANGING ANY OTHER SETTTING – I get this:

or “Sorry, but you’ve reached your limit on email updates for now.”

And I can’t change a single setting.

Clearly, I understand they’ve implemented the settings as a “change ALL THE THINGS” kind of deal. I pretty sure I have more than one of these in my own apps with far worse error messages. But I’m not Twitter, I’m not raking in millions in revenue, I’m not hundreds of employees strong. I’m not what is like thousands and tens of thousands of settings changes a day.

And while I probably should take some solace that even the bigco’s get it wrong too? I don’t. I just want to change a single setting, and it makes me curse Twitter like you wouldn’t believe. Okay, you’d probably believe it.

Importing a Google Spreadsheet Into a Rails Application

Recently at work I have been updating an application that provides a listing service for Extension professional development opportunities in order to facilitate some of the application’s features to be used for our upcoming conference (the application is typically geared toward interactive online sessions).

I work best in applications when I have real data to work with, and not a bunch of automatically generated “Lorem Ipsum” data. That’s why, as part of my development, I operate on copies of live data for pretty much every application I work with (which fortunately, other than a few transmogrifications like dumping passwords, we can do with our data). I even added an option to the tool a colleague and I wrote to post our deploys to a central deployment monitor to facilitate the data download.

So, I wanted real data to work with for our sessions. Fortunately, a few days ago, one of my colleagues sent out the sessions in a spreadsheet, which I spent a few hours reformatting and dumping to a csv – and then importing that data into the application.

But after doing all that work, on data that wasn’t yet fully complete (I didn’t yet have descriptions, or all the presenters in the data) – I realized that was going to be a continued pain in the ass to keep updating my translation of that data, dumping to csv, adding to the seeds, or wherever I would do a File.open on it – to keep it updated to when this actually gets deployed in production (after which it can just be updated in the application).

To be sure, there has to be a better way™ (I’m hereby trademarking this phrase because it is the muse for every podunk Dev/Ops/DevOps innovation ever, and should be a repeated mantra for all of us).

And it turns out there is. Publishing Google Spreadsheets to the web.

By publishing my import spreadsheet to the web – and using the csv output:

I can then import it at will (if you look close, you’ll see it’s only a one time thing, there’s no provision for a unique key in this particular data set to do a find_or_create on import – but the source data on this is only 4MB – so I’m constantly doing a capatross getdata rake db:migrate ruby importer.rb nexc_import) as needed.

In theory, updating the spreadsheet can now be crowdsourced among our staff. In practicality – probably not, but at least I can stop exporting, committing, and then running scripts on it any time a change is made.

Notes on Development Installs

Most of my colleagues and I on our engineering team for our initiative at work (a designer, software developer, sysadmin, and me – the wildcard draw four) just received new laptops last week, and Daniel (the sysadmin) and I have been putting together some instructions on setting up the development environment and software. We get to finally get them off Snow Leopard and onto Lion. Just in time for Mountain Lion.

I’ve been using my personal laptop for work ever since I started back, and that one had been done via a migration, so there’s years of built up tools and apps, so starting new gave me a chance to document all the apps I use for work (either free apps or ones I’ve bought)

A note about our development

We are a primarily a Ruby on Rails shop for all our development – though we have a few Wordpress/WordpresMU installs, and a Drupal install that is used as a content creation system for published content to www.extension.org (a Ruby on Rails app) and a content management system for administrative documents. You can see all our projects in GitHub.

We follow a “develop local” model, all our apps have to work locally (this seems old hat now, but we were doing it before it was fashionable, and you’d be surprised/saddened at how many higher education shops develop “on the server”). We use Pow for serving the rails apps, and with one exception (me), most use MAMP for serving PHP and using MySQL. We are considering using vagrant and setting up an Ubuntu VM to match our server configuration, but aren’t there yet.

We deploy to either a demo or development server, and depending on the app, we may have a staging server as well. We use capistrano for deployment, even for our Drupal and Wordpress deploys. We log deploys and announce them in our campfire chat room using an add-on to capistrano we wrote.

We use RVM to manage rubies and gemsets. I tried rbenv, and maybe it’s the sysadmin in me, but I didn’t like it as much – while I know there’s an add-on that does “gemsets” for rbenv, I like the native gemset support. I still think RVM is easier to get setup and going in a team, and Jewelry Box can make it even easier. Still, I’m definitely looking forward to Tokaido.

That’s us in a snapshot, here’s our checklist for the system installs:

Lion Notes

  • FileVault (full disk encryption) should be enabled, totally the right thing to do.
  • Natural scrolling is the default: you probably want to change this.
  • Apple doesn’t include Flash, which is a good thing for the most part, but you’ll probably need to install it for some things, like auto-tuned Dale Jr. videos

SSH Notes

Make sure to get your ssh keys (~/.ssh/id_rsa and ~/.ssh/id_rsa.pub) off your old macintosh (and copy the ssh key password from the keychain on your old Macintosh)

Add the following to your ~/.ssh/config file – this will help keep ssh connections open on remote networks, particularly wireless networks:

Host *
   ServerAliveInterval 120
   ServerAliveCountMax 3  

Getting your compile on

(steps numbered because order matters)

  1. Download the OSX GCC Installer (Prebuilt, 10.7 Lion)
  2. Install Xcode tools (version 4.3 from the Macintosh App Store)
    • Install command line tools inside of Xcode


Installation information

Install the following (brew install blah)

  • wget
  • libxml2
  • libxslt
  • imagemagick
  • mysql

other optional installs

  • git
  • pv (useful for database refresh scripts)
  • r (will need gfortran)

Getting your git on


Installation information

  • Need to have 1.9.3 and REE
  • per-app gemsets (rvm use rubyversion@appname --create)
  • create .rvmrc file in app directory (rvm use rubyversion@appname --create)
  • install bundler (unless you add it to the global gem set)
  • install powder (if not in the development block of the Gemfile already, which it should be)
  • Setup a proper build for nokogiri: bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26
  • bundle install
  • Jewelry Box (gui for RVM)



if using MAMP, use custom my.cnf (Applications/MAMP/conf/) to allow importing large db’s (darmok, create). Note: you will have to create this file, it does not already exist. Sample my.cnf and instructions on how to modify apache config to only listen on localhost – Daniel’s gist

Install the timezone tables:

/Applications/MAMP/Library/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo/ | /Applications/MAMP/Library/bin/mysql -uroot -p mysql

Optional/Advanced: Brew MySQL Install

Please note: means you have to do your own PHP environment somehow, also doesn’t include a database management tool – you’ll want something like Querious or MySQL workbench


Installation information

  • use powder gem to link the app (see RVM above)
  • powder open will open the default browser with “http://appname.dev
  • Pow 0.4 now includes an option for accessing the app from other systems. (not yet explored by Jason and Daniel)


Jason’s List of other Useful Applications

Macintosh App Store (MAS)

  • Evernote: (free – yearly service subscription available)
  • Skitch: (free)
  • Patterns: regex tool ($2.99)
  • Growl: ($1.99)
  • HTTPClient: debug HTTP requests in a GUI ($1.99)
  • Reeder: GREAT google reader “client” – also available for iOS ($4.99)
  • Meme Generator: (free)
  • Pixelmator: nice alternative to Photoshop ($$$) for simple things ($14.99)

Other applications (may be available in MAS as well)

  • Mailplane: GREAT front-end for gmail ($24.99) (also in MAS)
  • Alfred: App Launcher (free, has $ addon) (also in MAS)
  • Adium: IM client (free) – see also Xtras
  • Propane: nice campfire client ($20)
  • 1Password: GREAT password manager ($49.99) (also in MAS) particularly useful when combined with Dropbox
  • Querious: nice mysql management tool ($29)
  • Tower: nice git gui ($59 – I got it on sale, not sure I’d have leaped in at $59)
  • Fluid: create site-specific browsers (free/$4.99 gets extra features)
  • RStudio: GREAT front-end to R (makes using R approachable) (free)
    • Note: if using brew version of r: ln -s "/usr/local/Cellar/r/2.15.1/R.framework" /Library/Frameworks

Other tools

  • Zsh (using “Oh My Zsh”)
  • Pry
  • Linking to dotfiles in dropbox

Keynotes That Matter

I absolutely love the O’Reilly OSCON conference. It is one of the few conferences that align technology and passion in a direction that lends itself to meaningful change – both in the technologies themselves, but in how those technologies are applied. Very rarely at a conference are you going to hear about the technical issues parsing local government data sources in one session and the guts of Node.js in the next.

Last year, I came away completely inspired by the voices in the keynotes – particularly Eri Gentry and Ariel Waldman in the regular OSCON keynotes and Steve Yegge in the OSCON Data keynotes. Each focused on real problems, real open source and things that were “stuff that matters” as Tim O’Reilly himself exhorted of the community just a few years ago.

Maybe their keynotes were an ideal alignment for me, the intersection of science, and health, and software, and data. Maybe I’m just a year older and more jaded.

But this year the keynotes are so far nothing like last year. While the keynote that Dave Eaves presented resonated with me, as well as most of Tim O’Reilly’s message – the rest of the keynotes seem like empty sales pitches for the sponsor organization at best.

In summary – “We are [HP|Microsoft|Bluehost] and we love open source, and we love you, and most of all we love ourselves”.

While Mark Shuttleworth at least presented tools and real things that Canonical was actually doing – even that doesn’t seem like it belonged at the level of a keynote.

And that’s at best. At worst, it’s a mirror of the problems endemic to our industry, a celebration of rock-star engineers job-hopping every few years or less to yet another valley company to figure out how to “monetize” data, software, and people, and the companies that embrace it.

Dear keynoters: you are talented speakers and brilliant minds in leadership roles in technology. You are speaking to people who can, have, and will change the world. You have a chance to make a difference on that stage. Use it.