Alt-Tab-like history navigation

Here’s an idea for an extension that I’ll probably never get around to writing (but one of you might, perhaps for the extension contest!):

Overload Alt-(Left|Right)Arrow, the history back and forward keyboard shortcuts (Cmd-Arrows on Mac), to create an Alt-Tab-like experience with a row of thumbnail previews to which you can navigate by holding down the Alt key, pressing the arrow keys multiple times until you reach the target page, and then releasing the Alt key.

In other words, do the same thing for history navigation that Dão Gottwald is doing for tab navigation with his Ctrl-Tab extension.

(Bonus points for version 2: track non-linear meanderings and expose them as parallel tracks to which you can navigate with the up and down arrows.)


tabs for Thunderbird

Anticipating requests, I’ve spun some tab-enabled builds of the latest version of Mozilla’s mail/news desktop app for Linux, Mac, and Windows.

Note that the Mac version is no longer compatible with Mac OS X 10.2, as my Mac build machine (a.k.a. my laptop) has been upgraded to Leopard and XCode 3.0 and no longer has the 10.2.8 SDK on it.  It should work on 10.3.9+, 10.4, and 10.5, however.

p.s. Congrats to the Thunderbird team on the release of!  Getting a security and stability release out the door is no mean feat, requiring careful coordination between several groups of talented folk with a high standard for software quality that they consistently achieve.  Bravo!


Mac OS 10.5 First Glance

I spend most of my time in an Ubuntu VM, so I don’t use many of the features of my MacBook Pro’s host OS.  But I upgraded to 10.5 yesterday for dtrace and checked out a few other features in the process.


Spaces works about as well as VirtueDesktops.  It’s easier to configure, and it’s less crashy, but it doesn’t let me give my spaces names, which has been a palpable visual cue in VirtueDesktops that I’ve landed on the right one.

And although moving to the right of the rightmost space usefully wraps around to the leftmost one, the transition animation shows me moving left (but not across the intermediate spaces), which confuses me every time.

But most significantly, like VirtueDesktops it makes navigating to a window even more complex than it already was, with three somewhat-overlapping keyboard shortcuts: Control-ArrowKeys to change spaces, Command-Tab to change applications (across all spaces), and Command-BackQuote to change windows within an application.

I’m constantly hitting the wrong key.  Maybe I’ll get used to it, but I think I’ll continue to prefer how I’ve configured multiple desktops in Ubuntu, where one shortcut (Control-Alt-ArrowKeys) switches between desktops and another (Control-Tab) switches between windows on that desktop.  I wish there was a way to do that on Mac.

Time Machine

Time Machine looks like it could replace the manual backups I currently do with SuperDuper!.  It seems to lack a “back up everything now” button, which I want to press before leaving for a trip, but perhaps its automatic hourly backups are good enough.

Nevertheless, it’s unclear when and how it’ll back up my 40GB Ubuntu virtual disk file, which is almost always open.  Maybe I could exclude that file from Time Machine backups and then back up the files inside it from within the VM.

Unfortunately, there’s no Time Machine (or even SuperDuper!) for Ubuntu, as far as I can tell, just a hundred blog posts describing how various smart folks have used some arcane combination of tar and rsync commands to back up their systems.


The Network preferences dialog is much better organized, which is nice, since I seem to visit it more often than I’d like.  But perhaps I’ll be visiting it less now that Mac OS X no longer turns up its nose at my home network’s WPA personal security after every taste of the office network’s WPA2 enterprise security.

The WPA2 enterprise username/password dialog also no longer goes away while I’m in the middle of filling it out if I take more than three seconds to do so, a welcome change.

VMWare Fusion

VMWare Fusion has a few minor issues in 10.5.  It no longer resizes my Linux VM’s resolution when I plug my laptop into my external monitor, nor does it recenter the desktop when I go from the external monitor back to my laptop’s display until I switch from full screen mode to window mode and back.

And using Command-Tab to go to Fusion alternates between open Fusion VMs on two different spaces instead of taking me to the last one I used.  Plus the tools need some munging to properly integrate with X.

But on the whole it still works fine, and I can continue to live in my full-screen Linux VM (from where I’m typing up this blog post now).


I like the new darkness, with its multitude of gray tones.  But I bemoan the addition of even more rounded edges, like those at the bottoms of menus.  I prefer sharp edges in both virtual designs and physical ones (like cars and clothing), and its too bad everything has become a blobject since computers made it easy to draw a spline.  Bubble buttons, bubble cars, bleh.


automated JS code rewriting

Taras Glek has been doing awesome work on a framework for automated C++ code rewriting.  I’d love to see something like that for JS code, since there are potential optimizations that are hard to do by hand (like changing the way we memoize nullary methods or removing the names of function expressions assigned to object properties).

Maybe Narcissus could be repurposed to provide round-trip JavaScript parsing, modification, and reserializing?  This’d be a great project for someone who wants to help improve Firefox performance.


Bo Yang’s Advanced Microsummary Builder

This summer Bo Yang, a student at NanKai University in Tianjin, China, worked on a microsummary builder extension.  His goal was to make it easy for regular users to create custom live titles for pages while experimenting with some additional features for power users.

He’s recently uploaded the extension to, and I’ve created a screencast showing it in action.  Check out the screencast, then try out the extension (Firefox 3 pre-releases or nightly builds only).

Don’t forget to file any bugs you find, and let Bo know (in comments on this blog post or by emailing him directly) what kinds of pages you’re summarizing and how the extension works for you.

(For example, I used it to create a live title of’s World Clock page showing the approximate time in Bo’s time zone so I knew when I could expect to see him online.)


tabs for Thunderbird 2.0

A user of one of the “Thunderbird 1.5 with tabs” builds I made a couple years ago recently asked me if it would be possible to update the patch for Thunderbird 2.0.  After some wrangling, I got the patch to apply and behave itself in my testing, and I’ve spun some tab-enabled builds of for Linux, Mac OS X, and Windows.

Note that the Thunderbird developers are implementing a different version of tabs for Thunderbird 3 over in bug 218999.  So I won’t be porting this patch to the trunk.  But if you can’t wait for that release to get your tabs, these builds may be useful to you.

To open a message in a tab, context-click it and select “Open message in new tab” from the context menu.  To make this the default behavior when opening messages, set Preferences > Advanced > General > “Open new messages in” to “A new message tab”.

p.s. congrats to Thunderbird on the new organization!  I’m looking forward to great things from it.


Dave Winer’s take on feed reading in Firefox

Dave Winer came to MoCo yesterday for a chat about feed reading.

He gave us some food for thought, in particular the idea that limiting Firefox’s feed reading functionality to a mere conduit for transferring feeds to the user’s third-party reader of choice doesn’t meet the needs of users who don’t already understand the benefits of aggregated feed reading (which may well be a large majority of users).

Dave suggested we instead integrate feed reading directly into Firefox (while preserving choice for users who want to use another app).  I’m inclined to agree, but I’ll note that there’s a third option: we could simply choose a default third-party feed reader, just as we’ve chosen a default search engine, and direct users there when they click on a feed.


it’s not just about Thunderbird

Folks seem to have missed half of Mitchell’s recent email call to action.  It wasn’t only about finding a new home for Thunderbird.

Mitchell also says that “we would also like to find contributors committed to creating and implementing a new vision of mail” and that “Mozilla has a range of resources – funds, code, etc. – that can be applied to this problem. We’re looking for people with expertise, vision and leadership capabilities.”

MoCo’s raison d’être isn’t Firefox, it’s improving the Internet through Firefox and other initiatives.  That’s why it’s investing in the mobile space with projects like Joey, and it’s why Mitchell and others (like me) are interested in mail.

But Thunderbird only has 5-10 million users (including me), while Firefox has 100 million, which means that at least 90% of Firefox users (and many more users of other browsers) are not being helped by Thunderbird.

That’s not because MoCo hasn’t invested enough into Thunderbird, it’s because Thunderbird isn’t the right solution for those users.  And, based on its development trajectory to date, I don’t expect that to change.

But neither do the other extant mail apps serve their users particularly well.  As Mitchell says, we need a new vision for mail, and for me it’s one that combines the portability of webmail with the usability of a desktop app and provides innovative new features for presenting and participating in conversations.

So let’s not only focus on what to do with Thunderbird, let’s also figure out what to do about mail and how to do it.


multi-OS builds from one source tree

Someone asked me recently about the tabmail patch for Thunderbird, and, in some spare time between the super-intensive Hungarian language classes I was attending the last two weeks, I thought I’d see what it would take to get the patch working in Thunderbird 2.0.

I also figured I’d take the opportunity to switch my Windows build environment from the old Cygwin-based environment to the new MSYS-based MozillaBuild environment and–following roc’s lead–try to set up a shared source directory on my Mac laptop that my Linux and Windows Parallels-based VMs could build from.

Setting up an SMB/CIFS share in Mac OS X via Apple > System Preferences > Sharing was trivial.

And mounting the share in Linux also proved fairly easy. I just had to install the smbfs package (available from Applications > Configuration > Synaptic Package Manager in Ubuntu 6.10) and then use Linux’s standard mechanisms for mounting to an arbitrary filesystem location, f.e. via the smbmount command:

smbmount // ~/Machome -o username=myk

Note: you need to setuid on the smbmnt and smbumount binaries to be able to mount as a non-root user.

Getting things working on Windows proved harder, however. I tried to use mount to mount the share:

mount \ /home/myk/Machome

But mount complained “function not implemented”, and googling for a solution proved unfruitful.

Then I tried adding a mount point to /etc/fstab per the instructions in /etc/fstab.sample, which got MSYS to mount the share (after also restarting Windows, since MSYS only parses /etc/fstab on DLL initialization), but then cl mistranslated a filename on the share and died with this error:

cl -Fohost_cppsetup.obj -c -TC -nologo -Fdhost_cppsetup.pdb -DXP_WIN32 -DXP_WIN
-DWIN32 -D_WIN32 -DNO_X11 -Ox -MD -DINCLUDEDIR="/usr/include"
-DOBJSUFFIX=".obj" -I../../dist/include/mkdepend -I../../dist/include
-I../../dist/include/nspr -I../../dist/sdk/include -I../../dist/include/nspr
cl : Command line warning D4002 : ignoring unknown option
cl : Command line error D2003 : missing source filename

I thought perhaps I could fool cl with a symbolic link:

ln -s /home/myk/Machome /home/myk/Machome2

But MSYS’s version of ln apparently copies the directory (and all its contents) instead of linking to it (at least for network shares).

Finally I discovered that I could map a drive letter to the share in Windows Explorer > Tools > Map Network Drive, which MSYS (after restarting Windows again) maps to a path (/z in my case) that–although it’s not where I want it–at least doesn’t get screwed up by cl.

So now things are (almost) working. But not quite, as I’m seeing strange build errors like this one (when trying to build Firefox on the trunk):

/c/mozilla-build/moztools/bin/nsinstall -m 644 _xpidlgen/mozIPersonalDictionary.h _xpidlgen/mozISpellCheckingEngine.h _xpidlgen/mozISpellI18NUtil.h _xpidlgen/mozISpellI18NManager.h ../../../dist/include/spellchecker
make[5]: Leaving directory `/home/myk/Projects/minefield/build/firefox-opt/extensions/spellcheck/idl'
make[5]: Entering directory `/home/myk/Projects/minefield/build/firefox-opt/extensions/spellcheck/locales'
make[5]: Leaving directory `/home/myk/Projects/minefield/build/firefox-opt/extensions/spellcheck/locales'
make[5]: Entering directory `/home/myk/Projects/minefield/build/firefox-opt/extensions/spellcheck/myspell'
make: Entering an unknown directory
make: *** src: No such file or directory. Stop.
make: Leaving an unknown directory

And this one (when trying to build Thunderbird with the tabmail patch against the release tag):

/c/mozilla-build/moztools/bin/nsinstall /z/Projects/bonecho/mozilla/xpfe/bootstrap/showOSAlert.cpp /z/Projects/bonecho/mozilla/toolkit/xre
nsinstall: cannot copy z:ProjectsbonechomozillaxpfebootstrapshowOSAlert.cpp to z:ProjectsbonechomozillatoolkitxreshowOSAlert.cpp: Access is denied.

So I’m still working on building on Windows.

FWIW, build times feel OK on Linux and bad (but tolerable, for occasional use) on Windows, where initial build configuration and CVS operations seem particularly slow.

Speaking of CVS operations, I edited MozillaBuild’s start-msvc71.bat file to start ssh-agent so I wouldn’t have to enter my SSH key for every CVS transaction:

start "MSYS Shell - MSVC7.1 Environment" "%MOZILLABUILD%msysbinssh-agent"
"%MOZILLABUILD%msysbinrxvt" -backspacekey � -sl 2500 -fg %FGCOLOR% -bg %BGCOLOR%
-sr -fn "Lucida Console" -tn msys -geometry 80x25 -e /bin/bash --login -i

Note: unlike in Cygwin, ssh-add in MSYS only registers ~/.ssh/identity by default. To get it to register your SSH v2 DSA private key, you have to specify the path to that key on the command line, i.e.:

ssh-add ~/.ssh/id_dsa

FWIW, MozillaBuild is a dream to install compared to the old Cygwin-based environment, but I miss the more Unixy Cygwin, not to mention the much more functional Puttycyg terminal.


The Importance of Good Translation

A Hungarian and an American were walking down the street, both of them wishing they were holding hands.  They’d been teaching English in the same Hungarian school for months, and they’d grown quite fond of each other.

The American was talking about a man she knew, and the Hungarian grew worried about this potential rival.  “Did you two have a romantic relationship?” he eventually asked pensively.

“No,” the American reassured him, “it was platonic.”

The Hungarian was crushed.  In the Hungarian language, a plátói relationship is an unrequited one, in which the pair still pines for each other.  Quite different from common usage in English to mean a relationship devoid of romantic attraction.

So they didn’t hold hands that day or any other for a year until they discovered the misunderstanding.  All because of that single error in translation.

Fortunately, they did eventually discover the error, and last I heard, they were getting married.