Last week, I decided to give myself the present of a 512GB SSD drive, which was available at a nearly 25% discount on NewEgg for a limited time.
The price-per-gigabyte for SSDs has finally fallen to nearly $1/GB, and the rewrite cycle problems that used to afflict these drives is now becoming a non-issue with the Linux kernel’s TRIM implementation and the updated firmware on these drives.
So, I took the plunge. My main development workstation was a Thinkpad T400, maxed out to 8GB of RAM, and with dual 500GB platter drives (via Thinkpad’s excellent Ultrabay extension). I was running Ubuntu 10.10 for a long time. I timed the SSD purchase with the release of Ubuntu 12.04 LTS — 10.10 no longer being supported, I figured I’d do a clean install on the new SSD and clean up my development workstation for the first time in a couple of years.
A couple of things occurred to me in this process. First of all, since 2009, I have moved more and more of my data into cloud services. I have moved the lion’s share of my “business and personal documents”, including photos, into Dropbox with my 50GB account. I have moved my Music into Ubuntu One Cloud, due to its excellent streaming service for iPad, iPhone, and Android (which I also use from my Macbook Air via a Fluid App). And I have moved my truly old files and digital keepsakes into NAS drives that I host in my little server room at home.
One aspect that I didn’t move into the “cloud” was my custom UNIX configuration. But last year, I started using Github, so I took this transition as an opportunity to remedy this, by open sourcing my dotfiles on Github.
The only remaining “non-cloud” files are:
- A Windows 7 VMWare image that I run solely for access to Adobe and Microsoft products not available on Linux
- A Windows XP VMWare image I run solely for browser testing
- My git repos — though all of these are, too, clones of repos hosted by Github
As a result of this, “migrating” to a clean install of Ubuntu 12.04 was actually pretty easy. I had to spend a Saturday getting the keyboard shortcuts and environment set up the way I like, and installing some workarounds for hardware-specific problems. For the most part, I was able to get “productive” very quickly.
I reflect on my new workstation and what is amazing to me is its speed and lightness. Thanks to the SSD and Ubuntu’s recent focus on performance, it boots in less than 10 seconds. Hibernating the machine with TuxOnIce takes less than 10 seconds, as well. Sleeping the machine takes 1-2 seconds.
The SSD is blazing fast. Even with all my personal files now consolidated in my home directory, running UNIX’s find command to enumerate every file in my home takes only a couple of seconds. Booting up my VMWare instances takes seconds, as well. Launching browsers, terminals, and vim sessions each take less than a second.
Further, in the last year, I have decided to drastically simplify my development environment. I have tossed aside all IDEs that I used to tout (such as Eclipse or WingIDE), and instead use plain old UNIX and a vim text editor. This software — designed to run fast on the machines available in the 80s and 90s — simply screams on my modern hardware. And thanks to the SSD, grep’ing through hundreds of megabytes of code and configuration can happen within seconds. The fancy search indexes that memory-hogging IDEs like Eclipse and PyCharm start to seem clunky and antiquated vs my good old UNIX tool from the 70′s. The speed of our hardware has made the simplicity of our UNIX tools seem wise in their old age.
There is another opportunity here, too. The only pieces of my old workstation that are not reproduced here are the various databases and data services that I used to run to test the software I build on a daily basis. Systems like Postgres, Redis, Solr, and MongoDB.
But I’m realizing that thanks to my fast hard drive and excessive memory — along with significant strides in developer operations tooling, such as Chef and Vagrant — I can now make these systems self-contained and thus not suffer the overhead of running them on my main box all the time. So, I’m now taking the time to check out my code but run all of the dependent services inside Virtualbox VMs created by vagrant. I should have done this earlier; this is providing an excellent opportunity to do it right.
Ubuntu’s 12.04 release — featuring the controversial Unity interface — has also gotten me thinking about desktop environments in general. Despite all the flak the Ubuntu folks are getting from the community for this — much of it deserved — I think the general direction they have identified is a good one.
One aspect of Unity is that it is focused on making the window environment and filesystem access of your desktop as speedy and lightweight as we have become accustomed for our web applications.
Unity’s Dash launcher and HUD display both leverage an important user interface concept that has always been underutilized on desktops but heavily exploited on the web: search.
It’s not perfect yet, but the concepts behind Zeitgeist, Lenses, and Scopes are some of the best I’ve seen in achieving web/desktop parity. The goal is the admirable thing: rather than guiding the users with interactive actions, let the user simply express what he or she wants. And then pull up the answer in less than a second. I am already brainstorming lenses and scopes that could help me during development — e.g. git commit log searches.
Thanks to virtualization, cheap memory, solid state disks, and cloud storage, my main development workstation is becoming notable for its speed and lightness. I really can’t imagine things being much faster or more optimized, though I am sure this trend will continue.
One thing’s for certain: it’s a great time to be a software engineer.