Multibooting Linux, Windows, and Mac OS X on a Mac and using them as Virtual Machines

Recently, I set up my Macbook to boot OS X, Ubuntu, and Windows XP, with a large common partition that they all can natively read and write.  Then I decided it’d be nice to be able to interact with these other systems through OS X in VMware Fusion, so I set that up as well.  This took many tries, and a lot of experimentation.  In the spirit of science, after I had everything working, I documented it, and then started from scratch to verify my instructions.  I wrote up my instructions along with a dabble of theory.  They follow.

Windows XP, Ubuntu Linux, and Mac OS X

This is what shows up when I boot.

rEFIt showing Mac OS X, Ubuntu Linux, and Windows XP

If you try this, make sure to have a backup of everything.

To multiboot a Mac with OS X 10.5.5, Ubuntu 8.10, and Windows XP SP3 circa November 2008:

Ingredients:

  • Intel Macintosh
  • OS X 10.5 Media
  • Ubuntu 8.10
  • Windows XP SP2 or higher media
  • VMWare Fusion (If you want to be able to run Windows and/or Linux inside of OS X.)

There are many ways to get this working, but also many ways that do not.  One way that works is this:

  1. Boot the Mac from the OS X install media.  Instead of installing right away, go Disk Utility.  Use Disk Utility to partition the hard drive into four partitions, Linux, Share, Windows, and Mac.  Set the first three to be MS-DOS (FAT).  Set the Mac partition to be Mac OS Extended (Journaled).  Apply this.  Quit Disk Utility.
  2. Install OS X on the Mac partition.
  3. Reboot and set up your administrator user.  Do all software updates.  Reboot.  Check for software updates again.  Reboot and repeat until no updates are available.
  4. Install rEFIt.  rEFIt is an EFI boot menu.
  5. Set the windows partition to be active (bootable).  This can be done in OS X through the terminal.  Open the terminal (/Applications/Utilities/Terminal.app) and run the command: sudo fdisk -e /dev/rdisk0
  6. You will likely get the error, “fdisk: could not open MBR file /usr/standalone/i386/boot0: No such file or directory”.  That’s ok.  Type p to print. You should see four partitions.  If you look carefully, the first partition is a 200 megabyte one and what you thought was partition one is actually partition two.  OS X put an EFI System partition in the first spot when you formatted the disk, so you actually have five partitions on the disk.  Your last partition, the Mac one, shouldn’t be visible from this screen.  The disk is a GPT disk, which contains inside of it a Master Boot Record (MBR). This MBR is how older OSes find partitions and bootloaders.  With Apple, this MBR doesn’t support extended partitions, so you can only have your four primary partitions.  That’s what you’re seeing here.  You have to type f 4 to set the Windows partition as bootable.  After that, press q to quit and then y to save changes.
  7. Insert the Windows XP media and reboot.  Select the Windows CD when rEFIt asks how it should boot.
  8. After loading drivers, Windows will ask where it should install.  Once again, it’s going to see four partitions.  The 200 meg EFI partition, and the first three partitions you defined.  I’ve tried this step in many, many ways, and the only times I’ve been successful I’ve done the following:  Make sure that the install partition is labeled C: and is the last partition shown.
  9. Select it, and format the partition.  A FAT32 quick format and long format both work.  I haven’t tested NTFS.  If I didn’t format the partition, after Windows reboots and tries to continue the install, I have gotten “Missing Operating System” errors, “hal.dll not found” errors, as well as any other excuse Windows can find for why it cannot boot.  If a different partition is labeled C: than the Windows partition that we created at the beginning, quit the install, reboot into OS X, and go back to step 5.  See if there is a little asterisk next the partition we’re trying to install to.  That means active and bootable.  From my experiments, it looks like Windows sets C: to the the active partition if there is one, otherwise it is first FAT/NTFS partition.  Why don’t we make this easy and install Windows to the first FAT/NTFS partition?  If Windows isn’t installed on the last partition in the MBR, it fails to install properly.  I’ve tried mucking around in boot.ini and other files with no luck. Windows will need to reboot twice while installing.  Finish the install.
  10. Insert your OSX 10.5 disk.  This has all the drivers you need for your system.  If you don’t have it, or you have a developer edition that doesn’t have those drivers built in, you can extract the drivers from the Boot Camp Assistant application or find them on the internet.  Go through the “Boot Camp” driver auto-installer that autoruns, and then reboot.  When rEFIt shows up, select the Windows install on the hard drive, and do all the Windows updates. Reboot and continue to do updates until there are no further updates.
  11. At rEFIt, select the partitioning tool to sync the GPT and MBR.  If it doesn’t need syncing, it will tell you.  Then select OS X and verify it boots properly.  Insert your Ubuntu media and reboot into the disk using rEFIt.
  12. Install Ubuntu as you normally would, with two exceptions: partitioning, and the boot loader.  At partitioning, select the manual partition option.  It will scan your disks, and show you yet another view of the drive.  Check the format box on the Linux partition, and set it to mount at /.  This will be sda2 if you’re following the partitioning layout.  Then proceed.  The installer will complain about a lack of swap space.  If you need swap space, you can set it up as a swapfile after the installer.  Acknowledge the complaint and move on. At the last step before you let the install finish, there is a little button labeled “Advanced”.  Clicking that button opens a window that includes a dropdown box for setting the location where the GRUB bootloader is installed.  If you leave this as the default, you’ll have to go through GRUB for both Windows and Linux, which you probably don’t want.  Instead, set this to be the Linux partition (/dev/sda2).  You won’t have to tell Windows about this bootloader because rEFIt will use it directly.  After clicking next on this screen, Ubuntu will install and prompt you to remove the media and reboot the machine.
  13. Verify Ubuntu, Windows, and OS X all boot by choosing them at the rEFIt menu.  Boot into OS X last, and remember which non-OS X OS you booted into last before choosing OS X. (You shouldn’t need to, but if you have issues see if you need to sync your partition tables between GPT and the MBR using the partitioning tool in rEFIt.)

At this point, if you don’t want to be able to use those installs in VMWare while booted into OS X, you’re done!  Otherwise, trek on, my faithful reader.

In OS X, install VMWare Fusion.  There’s nothing special about VMWare Fusion over any of the other products, its just the one I already have.  Start VMWare Fusion, and ignore the “Boot Camp Partition” entry.  There’s a bug filed at VMWare to allow people to remove it.  There’s not a real reason why you need to ignore it, but I’m going to teach you how to do it manually. You’re going to have to do it manually at least once to get Linux working, and its pretty easy.

To create a VM that points to a partition on the disk, so we can use a partition to boot into as well as run in a VM, we need to do the following.

  1. Use vmware-rawdiskcreator to create a disk file that points to the partition.
  2. Create a new VM, and remove any autocreated harddrives and add our raw disk file.
  3. Edit the vmx preferences file to disable snapshots and suspend.  With these enabled, its too easy to corrupt your partition.

vmware-rawdiskcreator is a command-line program that allows VMware VMs to directly address partitions instead of using a file as a hard drive.  It can only address the MBR, so there are the same restrictions on which partitions can be pointed to as with Windows.  At this point, I’m going to copy and paste the help.

tredegarh:~ wolf$ /Library/Application Support/VMware Fusion/vmware-rawdiskCreator –help
Usage:

/Library/Application Support/VMware Fusion/vmware-rawdiskCreator print <diskDev>
Print the partition table of a physical disk.

/Library/Application Support/VMware Fusion/vmware-rawdiskCreator hasBootCamp <diskDev>
Check if a physical disk has an Apple Boot Camp partition (exit
code is 0) or not (exit code is non-0).

/Library/Application Support/VMware Fusion/vmware-rawdiskCreator create <diskDev> <partNum> <virtDiskPath> <adapterType>
Create a VMware virtual disk backed by a partition of a physical
disk.

<diskDev> is a disk device, e.g. “/dev/disk0”.

<partNum> is the partition number as printed by the “print”
command, e.g. 3. 0 is special and means “the Apple Boot Camp
partition”.

<virtDiskPath> is the path of the virtual disk description file to
create, e.g. “~/Virtual Machines/My VM/My Raw Disk”. Two files
will be created: “<virtDiskPath>.vmdk” and
“<virtDiskPath>-pt.vmdk”.

<adapterType> is the virtual disk type. It must be one of “ide”,
“buslogic”, or “lsilogic”.

<virtDiskPath>.vmdk is a human-readable parameters file.  It identifies the vmdk as a raw disk and points to the device representing the partition.  When we’re done with this, the booted VM is going to see this raw partition as the only partition on a virtual device.  What’s going to happen when the VM wants to read the MBR and partition tables of the virtual hard drive?  Those aren’t stored in the partition we’re pointing to.  This is where the second file comes in–the <virtDiskPath>-pt.vmdk.  According to my experiments, this file is a copy of the drive’s (<diskDev>) MBR and some modified partition tables.  This is created when vmware-rawdiskCreator is run.  It isn’t dynamic.  This is why we have to remember which non-OS X partition we booted last.  rEFIt marks a partition active/bootable when we select it from rEFIt’s menu.  If we make a raw disk file pointing to a non-bootable partition, the bootloader won’t start right when loaded by the virtual machine.

Back to the doing!

Assuming we’re following my partitioning layout, and assuming we booted Linux last, we run
/Library/Application Support/VMware Fusion/vmware-rawdiskCreator create /dev/disk0 2 linux ide

Now we need to create a VM.  Open VMware Fusion, and create a new VM.  When it asks about install media, skip with “Continue without disk,” then “Create a custom virtual machine.”  Pick the closest OS you can, then finish the wizard.  Then VMware opens up the System Settings.  In the Hard Disks section, remove the automatically created hard disk.  If you want, remove the automatically-created vmdk files inside your VM.  You’ll have to close the virtual machine from inside of VMware in order to remove some lock files.  To remove the rest of the files, you can use the Finder or the Terminal or however else you want to remove files.  Virtual Machines are just directories but they look special to the Finder.  The VM will appear as a bundle (just like applications) probably inside of your Documents/Virtual Machines directory.  You can right-click on the virtual machine icon inside of the Finder and “Show Package Contents” to get to the contents of the virtual machine, or else you can just use the Terminal.  Everything ending with .vmdk inside of this new virtual machine directory is safe to remove at this point.

This is a good time to disable snapshots and suspending from this VM.  To do this, edit the .vmx file in the first level of the VM bundle.  Add the lines:

suspend.disabled = “TRUE”
snapshot.disabled = “TRUE”

and save the file.

Open VMware Fusion again, and get to the Hard Disks section of System Settings of your new virtual machine.  Add a new disk.  Choose an existing disk, and navigate to the place where you saved the .vmdk and -pt.vmdk file.  Select the .vmdk file.  Copy it or move it, depending on which you’d rather do.  Apply, and then start the virtual machine.

A common error at this point is “Missing Operating System” or VMware Fusion complains that there are no bootable devices.  This can be a problem with the raw disk files.  To fix this, remove the hard drive, rerun vmware-rawdiskcreator after rebooting into the OS through rEFIt and rebooting back into OS X in order to get the boot records correct.

At this point you can install VMware Tools.

To set up the VM for the other OS, reboot into it through rEFIt, and then back into OS X.  You could also use fdisk -e like we did earlier, but this way lets you verify that the other OSes are still bootable.  Once you’re back in VMware, create the disk for the other OS through rawdisk-creator and follow the same process we did for the first OS.

Now, you might notice an issue with the share partition.  The share isn’t accessible from more than one OS at the same time.  This is for filesystem consistency reasons.  If more than one OS were editing the drive at the same time, corruption would likely occur.

How do we fix this?

We can use file sharing through something like Samba or NFS, or Shared Folders through VMware for the VMs.  Windows and Ubuntu will still be able to access the share when they’re booted natively, and through Shared Folders when they’re in a VM.

At this point, you should have a triple-boot Mac OS X / Windows / Ubuntu Linux system.   From inside OS X, you can open the Linux and Windows partitions as VMs.  Each OS can see the share partition when natively booted, and the virtual machines can see the shares if you set up Shared Folders.

Why did I choose this partitioning layout?

It was a lot like a logic puzzle, with little facts teased out after repeated installations.

  • Windows needs to be in the last spot in the MBR or you get install issues on an Intel Mac with OS X.
  • The EFI System partition is rumored to be used in firmware updates, so I left that in the first spot, where it puts itself.
  • Grub needs to be installed on a partition located in the MBR, but Linux doesn’t.
  • Windows can only see partitions in the MBR.
  • OS X can see all the partitions.
  • Linux can see all the partitions.
  • I want a share partition that can be read by all OSes without installing programs.  This means FAT32.  To be seen by all OSes it needs to be in the MBR.
  • OS X doesn’t need to be installed in the MBR.

Let me know how it works out for you guys.

Adding an audio jack to headphones

IMG_0126

A few months ago, my headphones broke. They were Sony MDR-NC6s, pretty cheap but the noise-canceling really helps cuts out the HVAC in a cube environment. They failed when I stood up and the cord was wrapped around my chair. The cord pulled out of the bottom of the headphones. I took them apart, and saw that there was probably enough room to fit a headphone jack in if I used a Dremel and some creativity. The cord now goes out the side of the headphones instead of the bottom, but the repair only took an hour and didn’t cost more than five dollars either. I now use an audio patch cable to connect my headphones to audio sources, and if I stand up with the cord tangled, the cord pops out of either end without damage.

I posted some pictures of the process on Flickr at the photoset Repairing my headphones.

The only real lesson learned is that I wouldn’t use the Radio Shack 3.5 mm stereo jack. It doesn’t grip the cable well. I will have to replace the jack next time I order from digikey.

Making a Doctor Who TARDIS Cake with Jelly Babies

Last Saturday marked the finale of the third season of the new Doctor Who. To celebrate, Amanda and I made a cake–a TARDIS cake, with Jelly Babies.

I had an easier time than I expected finding Jelly Babies. Our local grocery store had them in their tiny British section.

IMG_0674

We used Betty Crocker “Party Rainbow Chip” cake mix. This is the Betty Crocker version of Funfetti, the best cake in the universe.

IMG_0682.JPG

Amanda cut the Jelly Babies up in to little pieces, and we mixed them into the batter.

IMG_0698.JPG

When the cake finished, we flipped it over. The Jelly Babies had melted, coloring the cake. The melted Jelly Babies kept the cake moist, and when they crystallized, the cake was almost crispy. Yum!

IMG_0701.JPG

We cut the cake into the shape of the TARDIS, using some reference photos from the Internet.

IMG_0703.JPG

Because we haven’t had a lot of cake decorating experience, I wanted to minimize the amount of detail work we’d have to perform upon the cake itself. We melted almond bark to make the letters and the windows. For the letters, I put the almond bark in a plastic bag and pierced a corner to make a piping bag. For the windows, I lined the bottom of some tin tea canisters with aluminum foil, and filled them with almond bark.

IMG_0703.JPG

IMG_0706.JPG

Although we weren’t able to match the blue of the TARDIS perfectly, we did as well as we could with a lot of blue and a few drops of red food coloring.

IMG_0707.JPG

After spreading the frosting on the cake, we piped lines for the doors and other details.

IMG_0714.JPG

We then added the white windows made of almond bark, the letters, and outlined the panels.

IMG_0717.JPG

It was delicious. The melted Jelly Babies really added something special to the cake. A little Huon energy or something.

Next year, or perhaps for the Christmas special, we’ll have to do a few things differently. I’d like to match the blue better. I’d also like to use dark chocolate and white chocolate to make a proper “Police Box” panel. Maybe we’ll get fancy and use fondant and gum paste.

I have more pictures (and a slideshow) on Flickr.

Restoring to a single partition after installing Linux with Boot Camp

I recently installed Linux on my Macbook with Boot Camp. I recently decided to use a virtualization solution instead, and wanted to get that space back. When I ran Boot Camp, it wouldn’t combine my partitions together, possibly because I put Linux on there, instead of Windows, and it changed the partition type.

Using this article, I fixed it and successfully combined everything.

IF YOU FOLLOW THESE INSTRUCTIONS, AND YOU LOSE ALL YOUR DATA AND YOUR MOM MAKES YOU MOVE OUT, IT IS NOT MY FAULT.

If you decide to do what I did, please understand what you’re doing. Please read all applicable man pages, and have recent backups.

I booted into the Mac Install CD, and opened the Terminal. Using gpt show disk0 and diskutil list /dev/disk0 and diskutil info /dev/disk0, I confirmed a little bit about how my disk was being managed. My Linux partitions were /dev/disk0s3 and /dev/disk0s4, which corresponded to gtp indexes 3 and 4.

I used gpt remove -i 3 disk0 and gpt remove -i 4 disk0 to remove the gpt entries.

I ran diskutil resizeVolume disk0s2 limits to find out how large I could make the original partition. I then tried to run diskutil resizeVolume disk0s2 *maximum size* but diskutil told me it couldn’t resize it. I rebooted, back into the cd again, and ran the diskutil resizeVolume disk0s2 *maximum size*. It succeeded, I rebooted, and I had my space back.

Actiontastic Exporter v0.1

I love Actiontastic. I really do. After I realized how much I was relying on it, I read a few Django tutorials and started work on an open-source clone. The morning I was going to release my clone to the world, the author of Actiontastic announced he was going to open source Actiontastic. *sigh*

Anyway, he pledges a sweet XHTML/CSS export eventually, but until then, there is no export. However, the data is stored in an sqlite database, so I wrote a little bit of python to export actions to plain text.

Pretty pictures first!

Screenshots:

  • Actiontastic Exporter showing the help screen
  • Actiontastic Exporter sorting by project
  • Actiontastic Exporter sorting by project with more information
  • Actiontastic Exporter exporting to a file

This is a python script, intended for use in the terminal or in scripts. To use in the terminal, extract the zip, and open a terminal. Use cd to enter the directory of the zip, and run python actiontastic-exporter.py. For help and options, run python actiontastic-exporter.py -h.

If you extracted it to your desktop, it will be like this:

cd ~/Desktop/actiontastic-exporter-v0.1/
python actiontastic-exporter.py
python actiontastic-exporter.py -h

It can export the output to a file. It can read from an alternative input sqlite database. It can put a little more information in the exports if you want, and it will sort by project or context. It preserves action ordering within projects and contexts.

It ignores actions that are in the inbox, and ignores completed actions.

Actiontastic Exporter requires Python 2.4. This is newer than the python shipped with any Mac at this point, and I debated on writing my own sorted() so that people could use this without upgrading their python install. However, since Actiontastic Exporter requires pysqlite2, which doesn’t come stock, and the python install is *so* easy, I decided to use the builtin.

Requires:

It never writes to the database, but if it destroys your Actiontastic database, please don’t be angry at me. Please backup your ~/Library/Application Support/Actiontastic.sqlite.

Anyway, you can download Actiontastic Exporter at the main project page at http://feelslikeburning.com/projects/actiontastic-exporter/.

Any feature requests, questions, or comments, feel free to comment below or email me using the contact form.

Linux Driver to Print Index Cards on the Samsung ML-1740–Lazyweb Request

Dear internets,

I would like to be able to print index cards on my Samsung ML-1740 in Linux. It can be done in Windows. Have any of you ever gotten this to work? I’m not averse to writing code. I’ve written a CUPS backend in python. It wasn’t that bad.

I’ve looked far and wide for this, and have only found one lonely mailing list post of a solution that doesn’t really work right.

You’re my only hope!

Reading Ebooks on the Nokia 770 with FBreader

The Nokia 770 is the best ebook reader I have ever used. I use FBreader, a very versatile reader for Linux. My favorite feature is screen rotate. This lets me use the 770 sideways in my hand, and I can use my finger change pages with the up-down rocker.
In these pictures, the scratches on the screen are on a cheap screen protector. The real screen doesn’t scratch that easily, but I’m paranoid anyway. The screen is a bajillion times brighter, but the flash washed it out.
Nokia 770 with FBreader in rotated orientation

Nokia 770 with FBreader in rotated orientation, showing the rocker page control

I’ve read ebooks on a Palm IIIxe, a Palm IIIc, a Treo 600, a Treo 650, and a Nokia 770, and the 770 is the best ebook reader I have ever used. I would have bought it simply as an ebook reader. I’ve used the Nokia 770 to surf to Baen Free Library, grab an ebook off there, and read it, all without an extra computer.

The 770 is better in almost all ways than a paperback. I never lose my spot. I don’t need to turn off the light to go to bed, as the screen is backlit. I can fit more paperbacks than I could fit in a house on a single memory card. The 770 fits in a single hand, and I can change pages with the same hand. The screen is beautiful.
The only real downsides are the fact that the Nokia 770 uses electricity and costs more than a single paperback.

With a Treo 650 and a Nokia 770, I shall take over the world!

Summary in photos:

Treo 600 and Treo 650

Nokia 770 and Treo 650

My Treo 650 arrived today! It’s a free replacement of my Treo 600 that no longer makes or takes phone calls. I haven’t had a lot of time to play with the new Treo, but because it has Bluetooth, I should be able to interface the Nokia 770 and the Treo 650 easily. This means that if I’m somewhere without free Wifi, but I get cellular signal, I can easily bridge the cellular signal to my Nokia 770 through the wireless magic of Bluetooth.

I’ve been meaning to post this except of a comment I ran across on Metafilter, but I wasn’t really sure how to introduce it. The setup is that there was a post on a video from the 70’s about ARPAnet, the precursor of the internet. A Metafilter user, loquacious, posted the following. The complete comment can be found at the original post.

Even in today’s realm of nearly pervasive computing, I’m still constantly astounded. I’m barely old enough to remember Pong. I sort-of remember the dawn of personal computing. I’m old enough to remember what 75 bps/baud felt like. Yes, I know that BPS != baud, but for the purposes of that particular modem and this argument, it’s fine – especially when confronted by the 9mbit cable modem currently providing my connection. I even remember the first single file in excess of 1mb I ever downloaded. At 300 bps/baud. With interruptions and download resuming, it took something like 2-3 days. My parents were furious when they got the phone bill that month. It was a local ZUM 3 zoned toll call. That 1mb file cost our household over $500 USD! And I don’t even remember what it was!!

And yet… for years now, people throw away working computers so powerful I would have chewed off at least one of my own limbs just to possess them, way back when. Though I jest easily, I jest not about such important things. Twenty years later it’s still difficult to even comprehend the fever that gripped me back then. Even now I go all clammy thinking about how potent those feelings once were. I am using such a throwaway computer now, and I have a few more such machines I use besides. Interestingly, it’s still faster than the modern WindowsXP laptop issued to me by my work!

I now carry around a now nearly ancient – and also thrown-away – Palm IIIC that has an order of magnitude more storage then my family’s first home computer. In fact, it’s nearly equatable in feel and power to a Mac Classic 512K. But in color. In my pocket. With, again, an order of magnitude more default storage space. This now obsolete device contains a dozen novels, assorted maps and transportation schedules, and dozens upon dozens of applications ranging from music creation tools to document editors, various utilities, a very complete interactive star chart, painting/art programs, numerous games, and even an infrared meter/detection tool – and more besides.

I also carry a rather bottom-of-the-line portable phone that has better graphics, a better display – in color rather than green monochrome, more CPU and more memory then my family’s first computer. That talks wirelessly. To most of the world. Much or all of it through varieties of packet switching networks. (And yet they still won’t let me connect to the internet, browse via WAP, send a proper email, or simply do an old-school data modem connection from it. Hrmpf. I use Cricket. No frills.)

People now routinely buy – at toy stores! – what were once astronomically expensive, experimental supercomputers, now packaged in slim, small, brightly colored enclosures, simply to play silly, inconsequential little games on. Rather than, say, simulating nuclear explosions on. By all means, play on! Chess? 😉

I have nearly immediate access to more information then I could ever hope to consume or even glance at – even in a hundred lifetimes. Or even a thousand. In fact, even excluding all the boring stuff, more interesting text and data is created or transcribed and uploaded every day then I could consume in n number of lifetimes.

Barring catastrophe, I will never, ever again experience what it feels like to read every Sci Fi novel, every technical manual, every art book at the rather large central library that I spent much of my formative years growing up in.

Barring catastrophe, I will never, ever (truly) again experience what it means to be unable to communicate with someone, regardless of physical distance or time of day. Excluding the internet itself as a channel, but including the internet simply as the container for many channels, I have at my fingertips half a dozen ways of communication with a vast number of people. Hundreds, thousands, hundreds of thousands if I want to expand this to include the myriad number of ways of sending information to and receiving information from a recipient. Without even touching my stand-alone, battery powered phone.

Even without a computer and connection of my own, the cost of entry would be absolutely nothing at all if I just schlepped myself down to the local library.

—–

Amongst all this I’m still intensely aware of all of these things. They do not fade readily into the background as a much as a “given” (in the so-called civilized world) as running water fades into the background. As electricity does. As breathing itself does.

And sometimes I wonder if all this pervasive computing and connectivity will ever fade into the background for me as a given, taken for granted metabolic state, as it probably does for those just a bit younger than I.

And yet, this connectivity is already as essential as breathing is to me. Without it I would not have my current job, this apartment, even the computer itself which I now use. (Thanks you craigslist!) I wouldn’t have immediate access to transportation schedules, which maintain my job. Access to vital weather information, which helps me maintain my health and my job, and enables good planning. I haven’t touched a paper phone book in years.

I wouldn’t have entertainment. I wouldn’t have the art and music I enjoy. I wouldn’t be able to pick and choose the minds I find fascinating to interact with. I would be but a fraction of who I am today.

The internet has literally saved my hide from certain doom – if not at least prolonged discomfort – at least a dozen times. It has enabled the seeking of shelter when it was needed most, the provision of economic viability, transportation, communication, and so much more.

I would even personally argue that I owe the internet my very life – via the convoluted, twisting paths of life itself, with it’s occasionally fatal levels of frustration leading to ideations of self harm and hopelessness – upon which once a frightened call in the dark was answered so long ago, not merely by one concerned soul, but dozens upon dozens bearing not only firm, kind wishes – but bucketfuls of wisdom, strength, and love.

There is no price for such a thing. It cannot be valued, bartered, bought or sold, or even given away. The very concept and abstraction of price becomes meaningless in the face of it.

I have a hard time comparing, say, the mechanical printing press and this nebulous, cloud-like concept we call the internet. They do not sit rationally or comfortably together on the same scale in my mind. While one begat the other, one now dwarfs the other with such complexity and massiveness it is as crude a comparison as relating a simple wheel or lever to something as fantastic as a (yet) fictional faster-than-light starship.

And yet I still revel in it, awash, even drowning in such fantastic knowledge and access that – even if it were to vanish entirely, right now – my mind would gibber and reel at the incredibleness of it all for the rest of its days, forever changed. Leary was right! PC+internet > LSD!

Thanks, nerds and hackers everywhere. Have you ever been properly thanked? Or was the fact that the whole world pretty much just ran off with your countless inventions and started using them with gusto thanks enough for you?

Thanks DARPA/ARPA, and even the DoD. Thanks for letting the genie out, and making sure it couldn’t be put back in. Thanks Bell labs, thanks Xerox-PARC. Ma Bell? AT&T? G’way, you malingerers! Stern, strict great-grandfathers though you may be, a pox on you! Thanks MIT, Stanford, Berkeley, Santa Cruz and everyone else. Thanks Apple, Intel, and even Microsoft. Thanks, Linus Torvalds. Thanks, Wozniak. Thanks, Lee Felsenstein. Thanks, Google, and it’s long-lost batty great aunt who once lived in a dorm closet, Yahoo. Thank you, thank you, thank you CERN. And thanks to all the countless others I’ve missed, both large and small.

You probably won’t be able hear me among the riotous, delicious cacophony you’ve enabled, but… Thanks for everything.

posted by loquacious at 4:59 AM PST on March 19

*nods*

I love Tab Mix Plus.

Tab Mix Plus is a Firefox extension, providing a veritable boatload of tab features and also a session manager. You can rearrange tabs, protect tabs from being closed, unclose tabs, have a loading bar for each tab show up in its little name spot, and my favorite feature of all: Making multiple rows of tabs! When I max out my tabs in Firefox, what usually happens is that they extend off the side of the window, making it very tricky to work nicely with them. Now, they wrap around and make a second row. Whoo hoo!

I don’t have many problems with Firefox stability, but I faked a crash to check out the crash helper thing. When I restarted Firefox, Tab Mix Plus came up and asked if I wanted to restore from the crashed session.

Here’s to you, Tab Mix Plus.