2011 In Review
January 02, 2012
At the start of 2011, I blogged about a “professional goals” file I found on my computer, and compared it to what happened. I kindof enjoyed the exercise, so here’s a repeat.
At the start of 2011, I blogged about a “professional goals” file I found on my computer, and compared it to what happened. I kindof enjoyed the exercise, so here’s a repeat.
I just finished reading the short and to-the-point Working with Unix Processes, by Jess Storimer. Although I cut my teeth on C and UNIX programming, it’s been a while, and I figured I’d check the book out to see what insights it might have, especially given that it’s written from a Ruby perspective.
In short, I’d recommend this book to someone interested in command-line Ruby (and who might have my book), but who has very little UNIX programming experience. This book is a crash-course in the basics of UNIX Process management.
That being said, if you are (or have been) familiar with things like fork
and exec
, you’ll find this book a bit too light, especially given the price (update 1/2/2012 see inside).
I’ve spent the last year writing a book on building awesome command-line applications in Ruby. Over the course of writing it, I’ve used a lot of Ruby libraries for building command-line apps, and none of them work quite right. In my book, I spent significant time on OptionParser, since it’s builtin, and GLI, since I wrote it (and since it’s actually very fully-featured compare to the alternatives).
I just finished up an appendix where I showed alternate implementations of the running examples using main, thor, and trollop. I did this for a few reasons:
OptionParser
and GLI workI also surveyed many other tools, but, alas, I couldn’t include everything. Each of these tools have a common theme, which is to
avoid the boilerplate of OptionParser
, and make it really easy to parse command-line arguments. They all have done this, but at
a cost. All of them are less powerful and extensible than OptionParser
, and only slightly more compact (or, in the case of
main, more verbose).
Enter methadone, which has all of OptionParser
’s power, but the compactness of these other frameworks.
Woot!
My Book is in Beta! Whoohoo! It’s all about writing amazing command-line apps in Ruby. This isn’t about hacking together UNIX commands, or bash scripting…this is about making apps that are easy to learn, easy to use, easy to write, and that will delight their users. Seriously, stop making crappy command-line scripts, read my book, and start kicking ass.
It’s been a long time coming. Please stop now, and go check it out. I started this almost a year ago during PragProWriMo, where I wrote (almost) every single day in November of 2010. When I saw that Travis Swicegood (one of the few who made it all the way through) had gotten his manuscript accepted, I cleaned up a chapter and submitted and the Prags accepted!
I’ve spent my time since then writing, re-writing, re-organizing, and working hard to get this thing done. It’s in beta, meaning that you can buy the e-book and read the work in progress. It’s almost complete, just a few chapters to go, and by reading it in beta, you can give me valuable feedback to make the book even better.
Check it out now!
Museums aren’t the only things curated anymore - now, everything is!
Just got back from OSCON 2011. There were some really interesting talks, and “the big three” were all over the place: Google, Twitter, and Facebook. I attended the Twitter talk on how they moved from Ruby to the JVM, as well a talk by Rob Pike (of Google) on Go. I use Twitter and Google a lot, and enjoyed hearing about how they work (Facebook, on the other hand, I use begrudgingly).
My first reaction to these talks was “Wow, it sure sounds like a lot of fun to work at these places!” From inventing programming languages to using Scala to scale a massive architecture, it sounds like developer shangri-la. Until recently, I was slinging Spring MVC code in vanilla Java. Sucks for me, right?
This is lazy thinking, and I haven’t fallen victim to it in quite a while. Ask yourself: “Why would Google spend the time and money to get Rob Pike to work for them and invent an entirely new programming language?” Ask: “Why would Twitter spend the time and money to design and deploy an elegant, scalable architecture using the JVM and Scala?”
An awesome new programming language, or an impressive, scalable architecture is not an end to itself. These are tools that serve some other purpose.
In the case of Google, Twitter, and Facebook, that purpose is to serve ads.
Although Steve Yegge’s keynote features him “quitting” his project at Google (which he describes as “sharing cat pictures”) to work on some higher calling (still within Google), he’s just trading one ad-serving system for another.
Google+ isn’t about sharing cat pictures, it’s about serving ads. Twitter’s massive network of 140-character bits of information isn’t about connecting people across the globe or to view current trends in worldwide thinking, it’s about serving ads. Facebook isn’t about entertaining yourself with games or sharing interesting links, it’s about serving ads.
So, why are the best and brightest in the industry busting their asses to work at these places? If all you care about is watching performance metrics increase, or playing with something new, or just watching lots of tests pass, I guess it’s nice to get paid well. But, how can this be truly fulfilling? For me, it wouldn’t be. I need the tools I’m building, the products I work on, and the architecture I’m helping to create to all serve something I’m interested in.
I’m not saying that my code needs to save the world or support humanitarian causes, but it should at least be something that I like, or I would use, or that I care about.
And I can’t fucking abide advertisements. Honestly, I don’t know anyone who does. Except, apparently, a lot of really smart software engineers.
Co-worker sent out an email today, letting everyone know about a handy Mac app called cdto. You drag it to Finder and, if you click it, it will open a Terminal window where the current working directory is the folder you’re viewing in Finder. Pretty handy.
You don’t need schedule time to play video games
Merlin Mann has said this more than a few times on his great podcast with Dan Benjamin, and it really strikes a chord with me. Not that I play video games (I don’t), but the underyling message really speaks to me: “you don’t need to schedule time to do things you really want to do.”
At RubyNation, I gave a talk on Making Awesome Command Line Applications in Ruby, which I’ve done a few times, and is what led to my currently-in-progress book on the subject.
One of the assertions I added to the talk, based on my work on the book is the specific advice to not start off in bash…use Ruby. This was questioned by a member of the audience (who I realized later was Blake Mizerany of Heroku/Sinatra fame, i.e. someone far more knowledgable than me about CLI apps, Ruby, and shell programming).
My answer was about as eloquent as a middle-school debate team closing argument and amounted to “Me hate bash.”