New toys for Personal Telco

As I mentioned in November, the Personal Telco Project recently received a generous grant of two Dell PowerEdge servers from Free Geek. Thanks to the concerted efforts of Russell Senior, Tom Fitzgerald and myself, those servers are now operational!

The first machine to reach its new home was red, a Dell PowerEdge 2650 with 2x Intel Xeon 3.06GHz processors, 12GB of RAM and 5x73GB SCA disks. It's being hosted in rack space provided by the National Psoriasis Foundation; special thanks to Tom Fitzgerald for making this possible and helping out with the installation.

The other machine is called blue, and it's a Dell PowerEdge SC 1435 with 2x AMD Opteron 2212 processors, 8GB of RAM and 2x1TB SATA disks. It is being hosted at the same Integra Telecom Amber Glen facility where our faithful old server, donk, has resided for many years. Thanks are owed to Dat Nguyen, who provided the hard disks, and Russell Senior, who assisted with the installation.

Various services will be moved over to these new machines over the next few months. Access to blue will be available to Personal Telco members on request - let me know if you want an account!


In with the old

Lately, I've been spending a lot of time working on basslin.es, my recently-created record label. This new label is a replacement for my old label, which was called The Basement Productions, or TBP. I abandoned it after years of neglect resulted in losing the domain I once used for it. (It also didn't help that dozens of other people were also using indistinguishably similar names for their crappy independent record labels.)

With TBP dead, there was a reasonably significant volume of music which was orphaned, with no label to call home, so I decided to re-release a few of my favorite selections. Some of these are now available for download: The Green Hit by my first rap group, 5 oh Trees; Transparent Pleasancies and Spasm by the elusive str1ng; 23space by Juno Process; and my first compilation release, the venerable Firesign Revisited.

I won't claim that any of these are marvels of modern sound engineering or amazing works of sonic art, but a few of these tracks have aged remarkably well, and they hold a significant level of sentimental value to me and everyone who worked on them.

There should be a couple more re-releases within the next few weeks, as well as new releases of old material which has never been heard outside of the artists' studios. I also intend to release the debut Hundred Round Drum album by the end of the year; I only need a subwoofer so I can finish up the post-production process, then it's ready to go. Last, but not least, I'm told there's new str1ng material coming soon.

Anyway, if you're in the mood to listen to something different, head on over to basslin.es and check it out!


IPv6 returns to Personal Telco networks

While many still consider the next-generation Internet protocol to be a fringe technology, there's no denying it's an increasingly important step forward for data networks everywhere. The Personal Telco Project's production Internet servers have been equipped with IPv6 capabilities for some time, but nodes were long left in the dark ages of IPv4.

On World IPv6 Day, a weekly PTP meeting was held. At this point, I was just starting to get involved with the project again; when we discussed the fact that no IPv6 support existed for the majority of nodes and no such support was planned, I volunteered to find a clean solution to this problem which didn't involve a lot of extra work to deploy.

This wasn't the first time this project had been undertaken. Years earlier, when Jimmy Schmierbach and I worked together to develop the PTPnet VPN, we had included IPv6 support in the design from the beginning. Unfortunately, when we both took a break from the project, the IPv6 components of our solution fell into disuse, and were eventually removed. Despite that fact, luckily, the fundamental design of the VPN had remained unchanged, so reinstating IPv6 support wouldn't require any significant changes to the underlying network.

Armed with this knowledge, I set out to integrate IPv6 into the new node configuration generator scripts created by Russell Senior, and a couple of prototype builds later, I came up with a reasonable solution. Using a /48 prefix delegation from the Hurricane Electric Free IPv6 Tunnel Broker service to one of the core servers, and OLSR for IPv6 mesh routing, all new nodes will now be deployed with basic IPv6 capability. Existing nodes will be updated as time permits.

Pretty cool!


New domain

Things have been quiet here, lately; I've been busy with Personal Telco business, music, personal life, and of course, dealing with the relentless onslaught of headhunters and prospective employers which has resulted from publishing my new résumé.

However, today I have something relevant to announce. This blog is now on a new domain: keegan.ws

Although I used my previous domain for over a decade, the word has since been adopted as an unfortunate euphemism, making it an increasingly unprofessional choice. I may someday look into selling it, but for now it's acting as a redirect to this new one, and will continue doing so for the foreseeable future. Links should be updated where possible, but old links should also remain valid - please let me know if you see any issues with the transition.


My amazing new résumé

I've been consulting since returning to Portland in February, but the time has come for me to locate a more permanent professional home. So, without further ado, I am pleased to present my new résumé.

If you or someone you know is looking for an experienced, professional software engineer, look no further - send me an email or give me a call!


Self-contained Rails with RVM and Bundler

The idea here is to create a completely self-contained Ruby on Rails 3.1 application structure, for a nice, clean starting point to begin development of a new web application. To accomplish this we'll be making use of RVM, the Ruby Version Manager, and Bundler, the gem dependency manager.


Before you begin, you'll need an account on a Unix-like system. Any Linux, BSD or Mac OS X system should be fine.

I think you'll also want a C compiler and related "build-essential" bits installed on this system, although you may be able to avoid that requirement by using an RVM Ruby that doesn't need to be compiled.

Superuser (root) access is not required for any of this; everything resides within ~/.rvm and a single directory for the application.

It may also be possible to do something like this on Windows, but I know nothing of such evil things.


First, you'll need to install RVM, if you haven't done so previously. Follow these instructions to do so.

Once RVM is installed and working, you'll need an RVM Ruby. In these examples, I'll be using MRI 1.9.2; if you want to use a different Ruby, change ruby-1.9.2 to whatever you like. If you already have an RVM Ruby installed, that should work fine, just make sure you specify it in the .rvmrc file which follows in the next section.

$ rvm install ruby-1.9.2

The Application

Now that you have RVM and a Ruby to go with it, you can actually create your application structure. First, you need a project directory, and an .rvmrc file within that directory. The .rvmrc is used to configure RVM to switch to a certain Ruby and gem environment when entering the directory. This can be accomplished with the following commands; be sure to replace PROJECT with the name of your project.

$ mkdir PROJECT

$ echo "rvm ruby-1.9.2@PROJECT --create" > PROJECT/.rvmrc

You can confirm that our new .rvmrc is working, like this:


$ gem env

All of the paths displayed by gem env should be within your home directory.

Now that you have an empty environment, you can start adding the gems you need to get some work done. First and foremost, you'll want to install Bundler, the gem dependency manager. From this point onward, all commands should be run inside your new project directory.

$ gem install bundler

With Bundler installed, you're now ready to create a Gemfile, which will describe all of the other gems you want to use. I've provided an example Gemfile which installs Rails 3.1 here; feel free to use your own or change my example to fit your needs.

$ curl -s https://raw.github.com/keeganquinn/bits/master/blog/Gemfile > Gemfile

Once your Gemfile is in place, you can run Bundler to calculate your gem dependency tree and install all of the desired gems.

$ bundle install --without production

Finally, all gems are installed - you can now run Rails to generate the actual application structure. Note that you should call bundle exec to run commands associated with gems which were installed by Bundler - this will ensure that system-installed Ruby and/or gems will not override or interfere with your nice

$ bundle exec rails new . --skip

At this point, you should have a complete, self-contained Rails application structure, ready for you to start building it into the most amazing website in the history of the Internet - or whatever it is that you wanted to build.


Dual-boot: Lion and Ubuntu

It had been a very long time since I set a system up to boot more than one operating system, and I was itching for an excuse to play with Linux: what better way to scratch that itch than to install Linux on my MacBook Pro?

Game Plan

Running Linux on an Intel Mac involves what is probably one of the most complicated ways for any modern computer to load system software. (Sounds like fun, right?) Apple's EFI firmware is started directly by the hardware, then loads the rEFIt boot menu, which allows OS selection. Although Intel Mac disks are all GPT-based, selecting Linux causes rEFIt to boot from an MBR compatibility block, which contains a GRUB installation. GRUB then displays a kernel selection menu, and finally boots Linux when a selection is made.

I started my process by following an article by a guy who refers to himself only as Scott. He doesn't say anything that is incredibly clever or insightful, but he clearly outlines what looks like a nice, conservative process for dual-booting.

Bad Luck, Good Luck

Unfortunately, as soon as I rebooted my system for the first time, immediately following the shrinking of my HFS+ partition by Boot Camp Assistant, I was greeted by a very plain gray-on-black screen informing me that there were no bootable volumes in my system (or something to that effect). At this point, I hadn't even done anything outside of Apple-supported Boot Camp territory. To make things even more interesting, the Snow Leopard install media which came with my computer wouldn't boot - it claimed my processor was unsupported.

By an unusual stroke of luck, I happened to have burned a rEFIt CD earlier, and using that, I successfully booted my Lion system again. With OS X running, I used the Startup Disk tool in System Preferences to make my system bootable again. At this point, I'm more or less back at square one, except I have a chunk of unpartitioned space at the end of my hard disk. I'm also starting to notice intermittent weirdness (long delays/hangs) booting OS X, which caused me some small amount of panic, but this issue seemed to resolve itself after a while.

rEFIt Installation

Although there is a convoluted bug report which states that rEFIt is unable to boot Lion, I wanted to give it a try anyway; after all, it worked perfectly when loading rEFIt from the CD.

My first few attempts, using the recommended rEFIt installer package, yielded no results whatsoever; although the files were installed under /efi as advertised, I couldn't conjure up a menu no matter how many times I rebooted.

Next I tried the manual installation process, and voila! Happy boot menu is happy. My guess is that, for some reason, the rEFIt installer package is not yet compatible with Lion.

Linux Installation

My first installation attempt was with a Debian GNU/Linux AMD64 disc. I was pleased to see it boot, but also was not particularly surprised when it completely failed to detect any sort of network hardware. I've never been a big Ubuntu fan, but I switched over to an Ubuntu 11.04 disc at this point - after all, this sort of thing is exactly why that company exists.

From this point on, everything went relatively smoothly. I ran through the Ubuntu 11.04 installation normally, and was immediately able to select between Lion and Ubuntu from the rEFIt boot menu.

I did reinstall Ubuntu two or three times; at first I had used the standard 64-bit installer, then I discovered the "Intel Mac" version of the installer. I was hoping to avoid the need for an ugly old MBR on my shiny new GPT disk, but I didn't actually see any difference at all between the two versions. One day, I will revisit this issue and make my system pure EFI/GPT again, but for now, everything is working quite well.


OSCON 2011

I've had a busy week, manning the Personal Telco Project booth at the O'Reilly Open Source Convention - better known as OSCON.

It was my first tech convention experience, and I enjoyed it thoroughly. I met dozens of interesting people, had some great conversations, got some decent swag, and made a few potentially awesome connections for PTP. I haven't written about it here before, but I've been involved with Personal Telco for many years; check out my PTP wiki page for more about my work with that organization.

One project I worked on during the convention was particularly interesting: the OSCON wireless network wasn't working very well in the huge exhibit hall, so I flashed a Netgear WGT634U to run OpenWRT, then tethered it to my Android phone via USB and used my data connection to set up a temporary PTP node for our booth at the convention. I followed the recipe outlined in Luis Gallardo's article to get the tether working with OpenWRT.


HP drivers: still terrible after all these years

Poking around on my Mac the other night, I noticed something odd: with nothing in particular running, the system load average was pegged above 1.0. A quick glance at the process table revealed something called HPShortcutManager.app sitting there, quietly laying siege to a processor core.

I like to know my enemies before I destroy them. A quick search led me to a fascinating thread on the HP Support Forum, detailing how anyone who is so bold and daring as to install the HP scanner drivers on a Mac is doomed to suffer the loss of a CPU core, unless the user actively intervenes to prevent it.

Of the available (trivial) workarounds, I opted for killing some processes and deleting some files - problem solved, no more runaway CPU core. Ignoring the fact that HP is aware of this problem and does nothing about it, which strikes me as terribly irresponsible, this made me think: apparently my little MacBook Pro is such a beast that it can sit above 1.0 load for several months without me ever even noticing - and I'm not exactly a light user!

I had noticed the machine running a bit hot, and the average battery life was somewhat disappointing. In retrospect, I feel rather foolish for not looking into it sooner - I simply assumed the i7 was just that power-hungry. It will be interesting to see what the machine is like now, without a bunch of resources being wasted on nothing...

On a related note, HP's software was all installed on my system owned by a non-existent user/group ID 504:504. If I had more user accounts, that may well have been some random person - not ideal. I've changed them all to be owned by root:admin, and scanning still works with this configuration.

These are the commands I ran to accomplish everything described here:

sudo killall -9 HPShortcutManagerStartup.app
sudo killall -9 HPShortcutManager.app

sudo mv "/Library/Application Support/Hewlett-Packard/HP Scanjet Scanner/HPShortcutManagerStartup.app" "/Library/Application Support/Hewlett-Packard/HP Scanjet Scanner/HPShortcutManagerStartup.app.broken"
sudo mv "/Library/Application Support/Hewlett-Packard/HP Scanjet Scanner/HPShortcutManager.app" "/Library/Application Support/Hewlett-Packard/HP Scanjet Scanner/HPShortcutManager.app.broken"

sudo find /Applications /Library -uid 504 -exec chown root:admin {} \;


Making Launchpad suck less

So, Mac OS X 10.7 "Lion" is out, and it's (mostly) awesome. One thing that many people don't like about it is Launchpad, the new iPad-style application launcher; one of the major reasons people don't like Launchpad is that currently, it's impossible to remove things from it that weren't installed via the App Store. (Yes. Really. Not slick.)

This bothered me enough that I decided to do something about it. I've written a quick little script that will, given the name of an application, forcibly remove it from Launchpad's internal database. That script is called LaunchTrimmer and it's available for download now. The source code is also available on GitHub.

After downloading, you should be able to double-click the script in Finder, or you can run it from Terminal directly if you're into that sort of thing. It will prompt you for the name of an application, find your Launchpad database, confirm your selections, and remove all references to that application from that database.

I may actually make a nice friendly GUI application out of this; if Apple doesn't fix up Launchpad very soon, I can imagine quite a few people being interested in doing it themselves!


Lion, Xcode and MacPorts

A couple of quick notes for other developers who use MacPorts and are upgrading to Lion:

  • Xcode 4 was $4.99 on the App Store prior to the release of Lion; now, at least if you have Lion installed, it is free.
  • After upgrading the OS and Xcode, sudo port selfupdate handled the MacPorts part of the upgrade just fine, although it took an unexpectedly long time. Unfortunately, at this point, major problems with ports began to manifest. I moved forward with the migration process from the MacPorts wiki. In retrospect, it would probably have been more efficient to just completely blow away /opt/local and reinstall everything there from scratch.

That's it for tonight!


Thoughts on Google+

Google+ seems to be what everyone is talking about right now - and for good reason. Love it or hate it, Google has just made a strong entrance to the ever-changing world of social media.

My first impression of this new service is that it isn't just another Internet tourist trap, like MySpace always was and Facebook has now become. Advertisements are conspicuously absent, which is very pleasant. So far, there are no signs of the "social" games that so many of us have come to loathe.

Instead, in Google+ I see an elegant solution for disseminating information between people based on the ways they are connected in the real world. The web interface is smooth and intuitive, allowing you to define groups of people (called "circles") based on your relationships with them and share with only the circles or individuals that you want to. You can share messages, conversations, links, images and videos. You can also tag anything you share with a location, if you like, and video chat quickly and easily.

To be fair, part of the reason for my enthusiasm is that I am generally a fan of Google products, and one of the things that appeals to me about Google+ is the integration with other Google stuff. For example, I've had a Google Profile for a year or so, and when I signed up for Google+, it was linked automatically. It's a small thing, but details count, and I anticipate much stronger and broader integration in the near future.

As far as the future goes, things could very well change. They could plaster their shiny, expensive new toy with advertising, throw Mafia Wars right into the middle and fill it with an endless army of well-paid spam mongers. I'm just hoping that doesn't happen any time soon. Someday, its feature set will probably fall behind, and we'll look to the horizon for the Next Big Thing. Today, however, Google+ is here, and I'm there.


Blog changes

If you've actually been to this blog more than once or twice, you've probably noticed some things have changed recently.

I've switched from Posterous back to Blogger, with a few tweaks to the theme. I liked some of the ideas behind Posterous, but unfortunately, their implementation left much to be desired. Meanwhile, Blogger seems to have improved significantly over the past year, and the ability to export my data easily is very appealing to me.

Unfortunately, this means any old links pointing to here are now broken. Please let me know if you find any such links or see anything wrong. Thanks!


New old things

Busy, busy, busy.

My music project has (yet another) new name. This time, we're calling ourselves HRD - Hundred Round Drum. Nobody is using the name, it abbreviates well, isn't completely stupid and rings well when you say it, so I'm pretty happy with it. I liked the previous name, but Devon didn't particularly; he came up with this new name.

We also went ahead and released three new tracks on our new SoundCloud page. These are final tracks, as they will appear on our upcoming album, available for free download now. Check them out!


Just a moniker

Today, my music project has a new name and I have a new domain.

My electronic rap group is now called Straight-Jacket Syndicate. It was originally 5 oh Trees, many years ago, but I never really liked that name. For the last six months or so, we had been using The Asylum, but it turns out there's already another established group by that name. I think I like this one better, anyway - we'll see if it lasts. "Like" our page on Facebook!

The new domain is basslin.es and I do believe I'm going to be turning that into my "record label" - since we're publishing independently. This means I need to make a website and all that nonsense, but I figure it will be good for me.


Where am I?

We came from San Diego to Portland in February. This was supposed to be a temporary situation; the original plan was that we would house-sit for my mom while she was visiting Japan, then head off to Europe for a month or two and see all of those things we've always wanted to see. After that, we were to make our way back down to San Diego. Unfortunately, that's not quite what happened.

Everything went according to plan until tax day, when the government appropriated a large portion of our vacation money. Most people never have to actually pay a full year's taxes out of pocket - some money is taken out of each paycheck by the employer, in most situations. However, due to some shady bookkeeping by her previous employer, Sarena never paid any taxes last year, and owed a significant sum. Of course, neither of us realized this, until I asked whether she had done her taxes on the night before the due date. Surprise, surprise. It gets worse, but really that's her story, not mine.

Despite this setback, we still planned on hopping the pond as soon as possible. Make a little more money, then we'll go.

It sounded like a good plan, at the time.

Winter gave way to spring, then spring gradually gave way to summer, and we were still in Portland. The lush, verdant paradise that is my hometown had finally seduced Sarena, and we made the decision to stay here.

So, here I am. Life is good.