Friday, September 28, 2007

WIMP no more?

As I was about to fall asleep last night, the acronym WIMP came up in my steam-of-consciousness mental meanderings. For those of you who haven't been around sufficiently long to remember WIMP, it stood for (I believe, and assuming my senility isn't too far advanced) Windows, Icons, Menus, Pointer. While everyone takes this type of user interface for granted today, it was all the rage when personal computers first got sufficiently powerful to sport GUIs.

Anyway, back to last night. It occurred to me that my use of windows and menus has fallen precipitously over the past few years and is in danger of disappearing altogether. As I do more and more of my daily computing on the web, some curious things have happened.

Things that I used to accomplish by switching windows I now do by switching tabs in my browser. My personal email, to-do lists, news, reading material, etc. are all accessed via the web now. In fact, on a typical day I only spend non-trivial amounts of time in 4 different windows: my web browser, Lotus Notes (which I wish fervently I didn't have to use), a command line window and emacs.

Similarly, I almost NEVER use menus anymore. I long ago learned the mouse-click or keyboard shortcut for everything that I typically do and I find myself annoyed whenever I have to actually LOOK for something in an application's menus. Since web pages don't have the luxury of adding items to the browser's menus, web designers have found other ways to expose their functionality (rollover text, GUI's that morph in real-time, etc.).

So for me, at least, WIMP is dead. Long live...uh...TIP (tabs, icons, pointers)!...or WILT (web apps, icons, links, tabs)!...or something else!

Wednesday, September 26, 2007

Ex Post Forko

This may be unique to me, but I often find myself wanting to retroactively control-click a link on a web page. The following scenario seems to happen to me all too frequently:

1. I Google something & get the results back.
2. One of the search results looks promising, so I click it.
3. The page turns out to be interesting, but not really what I'm looking for at the moment.

At this point what I really want to do is rewind the clock a few seconds and control-click on the link in the search results to farm the interesting-but-not-immediately-relevant page to another tab for future consideration. Accomplishing this requires a click on the back button, scanning the page to find the link, then a control-click on the link. Am I the only one that would find it useful to do this with a single click/keystroke?

If there's anyone out there looking to write a Firefox plugin, could you please write an "ex post forko" extension that does this is with a single gesture? Control-forward comes to mind as a good candidate, but I'll take whatever I can get.

Wednesday, May 30, 2007

MacBook adventures: Additional Proggies

By sheer coincidence, I appear to have purchased my MacBook about the same time Bob Sutor got his Mac. By even sheerer coincidence, we both use Ubuntu as well. And we both work for IBM. This is getting spooky. I'm almost glad I missed his talk at UNC a few months ago -- the universe might have imploded if we were in the same vicinity.

Anyway, this is my first (well, first-and-a-half if you count the blog entry I almost-posted about locating a new screen background) blog entry about setting up my new MacBook. Today's ramblings are about additional programs I've installed on the Mac to make myself more comfortable. Mac purists (sorry John, that's you) will probably scoff at some of these, but productivity trumps purity everyday in my world.

Safari was ok as far as it went, but that wasn't quite far enough. Gmail's chat didn't work. David Heinemeier-Hansson is somewhat enamored of Camino, and after using it for a month or so I have to concur. Gmail is working fine & it's done a bangup job on every webpage I care about thus far.

Next Terminal.app had to go (no tabs?! WTF?!). iTerm is the replacement, but even it has some uglies that need to be configured around. In particular, I was pulling my hair out until I figured out how to create a new keyboard profile that sends option as meta. The bookmarks with associated commands and corresponding keyboard shortcuts are nice too. Emacs over ssh to the Ubuntu box is looking pretty good with Monaco 10.

Lastly (for this post, at least): Carbon Emacs. I drank the emacs koolaid in college about 18 years ago and Meta-X has been my constant companion ever since. It was a pleasant surprise to run across a Macified flavor of my favorite tool and defer an onerous retraining of the fingers for a few more years (ctrl-P is NOT print, damnit!).

More to come...

Wednesday, April 25, 2007

Adventures with XP and Ubuntu

About a month ago I got a new laptop at work. A nice one (or at least, nicer than my old one) -- a Lenovo ThinkPad T60p. The little bundle of computing power has a Core 2 Duo processor, 3GB of memory and a 100GB hard drive. Emboldened by the success stories of Sam Ruby and Jason McGee, I installed PartitionMagic 8.0, shrank the XP partition down to 65GB and carved out 35GB to install Ubuntu. As I said, this was about a month ago. I use Ubuntu on my custom-built desktop at home (which is another, even longer story), and knew that Feisty Fawn was due in mid-April so I decided to leave the partition empty.

Fast forward to April 19. Feisty Fawn goes public! Woohoo! Fire up BitTorrent, snag the ISO's (i386, BTW -- I got burned putting AMD64 binaries on my home machine) and start the install. On the whole, I'd say it went pretty cleanly. Had to click through a few quasi-nasty messages about using non-open video drivers for the ATI chips in the laptop, but that's far better than the old status quo. So I'm sitting there looking at my newly-installed Ubuntu 7.04 desktop and it occurs to me that I've done this all wrong...

I expect I could have mounted my NTFS partition as read-only under Ubuntu, but there are still several internal things at IBM that only run cleanly under Windows XP. Things like accessing printers, submitting expenses and building presentations. I'd spend a significant portion of my time rebooting back and forth between Ubuntu and XP. It occurred to me that I could get all the things I wanted from Ubuntu (rich command line tools, real filesystem, superior editors, etc.) by running it in a virtual machine -- I didn't need to let it own the entire machine! No problem, I figured, I'll just boot back to XP, use PartitionMagic to rejoin the partitions and host Ubuntu under VMware. That's when the fun began.

Apparently installing grub on the boot partition modifies the master boot record (MBR) in such a way that PartitionMagic can't recognize it anymore. PM steadfastly reported error 117 and refused to even start. That sucked. So I googled various combinations of "remove", "grub", "fix" and "MBR". The universal solution seemed to be to boot off the XP CD, go into recovery mode and do "fdisk /mbr". Except I don't have an XP CD -- we have a group of folks at work that install XP for us and we never see the CD's. That sucked even more.

I was desperate. So desperate that I made it all the way to the 3rd page of Google results before I ran across exactly what I was looking for on the Novell website. 15 minutes later, the partition was gone. An hour after that, Ubuntu was running under VMware and things have been peachy ever sine. Thank you Novell!

Friday, March 02, 2007

Ruby code blocks

I first started looking at Ruby in late 2005/early 2006 as part of a project at work. While the Ruby aspects of the project were eventually eaten by the vagaries of the IBM funding process, my fascination with the language continues. One thing about Ruby that really clicked with me was the use of code blocks.

Looking over the Ruby code I've written, it appears that I like them a lot, but it didn't occur to me until a few days ago to wonder why. I put a (very) little bit of thought into it and here are the reasons I came up with:

1. They allow me to represent a chunk of code as first-class object. This is horribly trite and pretty much straight out of the Ruby books, but it happens to be true. I never used to think this would be all that useful; then I used it. Man, was I wrong.

2. I can express my intentions so much more precisely and succinctly. The important bits of my code's logic all seem to wind up in the code blocks, and the boilerplate all seems to fade into the method calls and parameters. I have no idea if this is a universal in the Ruby world or just my style of writing Ruby, but I like it.

3. They are way more versatile than I ever guessed. Besides the obvious uses like iterator bodies (with each), accumulators (with inject), discriminators (with select/reject), pluggable algorithms (e.g. comparators) and elegant try/finally blocks (e.g. File.open), I have used them as (re)initializers, validators, formatters, slicers, dicers and julienne fry-makers.

My biggest gripe is that I can only pass one code block to a method. I know I could do Proc.new or Kernel.lambda, but they just don't have the same elegance.