Archive for December, 2009

Annoying tab behavior in Firefox 3.6 beta

Monday, December 21st, 2009

firefox logoI’ve finally started looking at the new Firefox beta releases, just to see if all the extensions I use still work (they do) and the sites I visit regularly still display correct (they do, too). While doing so, I found what I believe to be a new behavior in the way a new tab is opened when selecting ‘Open in New Tab’ from the context menu: It opens immediately to the right of the active tab. This is different than what I’m used to, that is, to have the new tab open all the way to the right. There are many use cases I have that flow much easier when tabs open as the very rightmost screen, and found this new (if it is new) behavior disruptive.  So disruptive, that I was about to uninstall the beta and go back to 3.5.  However, after doing a bit of investigation in the oh-so-useful about:config page, I found an easy workaround.

With the Firefox 3.6 browser running, type about:config into the location bar. If you’ve never visited this page before, you’ll see a dialog warning you that visiting the page will void your warranty (remember, this is free software, there is no warranty; this is a joke), go ahead and click the button in the dialog to get to the configuration editor. A list of configuration settings will appear.  To make it easier to find the value that needs to be changed, click in the ‘Filter’ field and enter ‘browser.tabs.insertRelatedAfterCurrent‘ (do not enter the quotes).  After doing so, only one item will appear in the list, and that’s the configuration item that needs changing:

Firefox's about:config screen with filtering

Firefox's about:config screen with filtering

Since this is a boolean (on/off) field, all you need to do is click on it to change it.  Once you click on the row, the value will change from true to false, and the text will be bold, signifying that the value has been changed by the user. Close the about:config window, and start opening new tabs, and you’ll notice that the tabs are always being opened all the way to the right, regardless which tab is active when the new tab is opened.

This appears to be a new configuration, as that preference name does not appear in the Firefox 3.5 about:config page. So it does appear this is new functionality.

Availability-based meeting anti-patterns

Tuesday, December 15th, 2009

3350030807_2e7e0d0935_mIn a prior post, I discussed three meeting “anti-patterns” regarding the use of laptops during meetings. Here, I discuss two availability-based meeting anti-patterns.

There aren’t any conference rooms available

Have you ever tried to have a quick chat with a few people, but ended up talking in a hallway because all the conference rooms were full?  Well, then you’ve experienced the There Aren’t Any Conference Rooms Available pattern. Being a conscientious co-worker, you know that having a discussion with two or three other people in your cube can be distracting to those around you, so when such conversations arise, you go looking for a conference room.  But they’re all full. You then start making a second round, trying to find a meeting that’s about to wrap up.  It’s then you notice that one of the rooms is occupied by two folks, each of whom have their own offices.  With real walls, doors, and everything. Then you find another room with a team — and it looks like they’re having a good time! They obviously can’t be having a serious meeting. That’s because they’re not; they reserved the room for an hour, and it only took 15 minutes to finish up their business, so they’re going to stay in the room because it’s theirs! It’s the principle, after all.

Both of those scenarios are true (I was the one looking for an open room).  There are a few things that a company can do to avoid this type of problem.  First, make sure there’s a small room available that cannot be scheduled that is used only for short, impromptu meetings.  Also make sure that there’s a whiteboard in the room for brainstorming.  Next, make sure that people with offices (executives and managers, typically) use their offices in lieu of taking up a conference room (leaving the rooms for people who do real work ;) ). Lastly, institute a policy that discourages keeping a meeting going until all time has expired; if you finish all the agenda items, close the meeting and leave the room.

The Next Time We’re All Available To Meet Is In Two Weeks

Now, another ripped from the headlines all too true story: You have a bona fide need for a meeting.  You fire up your meeting scheduler, set the appropriate meeting length, create the most beautiful meeting agenda known to mankind, and the click the “auto schedule” button, and your jaw drops at the result.  You’ve just encountered the Next Time We’re All Available To Meet Is In Two Weeks pattern.  There are a few possible causes for this.  One is that your company has too many meetings. There should be no better way to demonstrate this to your executive management than by showing them the schedules of those you need in your meeting, and explaining to them that your critical meeting (it is critical, right? Otherwise you don’t really need a meeting) is being delayed by two weeks because of the excess of meetings.  Be prepared to show examples of meetings with dubious need, such as hour-long status meetings.

Another reason is that some of the people on your invite list, in an attempt to ensure they get things done, are blocking out chunks of time on their calendars to avoid meetings. (Full disclosure: I do this every so often, even though I know I shouldn’t.)  The reason for this is the same: your company has too many meetings of a dubious nature.  If meetings were less frequent, and the meetings that were held actually provided value, people wouldn’t need to block out their calendar to get things done.

Something you can do to avoid this altogether is to ensure you’re inviting the absolute minimum number of people required to have a successful meeting.  Are you really sure that inviting someone with a full calendar is adding value to your meeting?  Remember, there is more to a meeting than just sitting in a room and talking. There is preparation, and time required to act upon items assigned during the meeting; if someone’s calendar is always full, they will not have the requisite time to do either. Aside from lowering the chances of a scheduling collision, inviting the bare minimum should be considered as “the right thing to do” simply because you will not be wasting other people’s time by including them in a meeting in which they will have little to no input.

Copying a VMWare Player virtual machine

Monday, December 14th, 2009

Over the past couple months I’ve been comparing VMWare Workstation against VMWare Player.  Workstation costs $200, while Player is free. While the “free” part is enough for me to keep using Player, there are some things I miss about Workstation.  One of the things I miss is the ability to make snapshots and copies of virtual machines.  However, with a little bit of work, it’s possible to create a copy of a virtual machine you created with Player. Here’s an example of how I did it with a minimalist installation of Fedora 12.

Copy the original “golden” virtual machine directory within the Virtual Machines directory.  The original virtual machine directory was named Fedora12Mini, and the new directory was renamed Fedora12Firewall. The first step is to change all the file names in the copied directory to match the new directory name (which will become your virtual machine’s name in Player).  The virtual machine directory contains (at least) five files that have the same name as the virtual machine’s name, differing only by their extension.  In the example below, all instances of Fedora12Mini need to be changed to Fedora12Firewall.

How the copied directory looks before changing file names

How the copied directory looks before changing file names

Once that’s complete, open the new Fedora12Firewall.vmx file.  The .vmx file contains most of the configuration settings for the virtual machine. Modify all instances of the original virtual machine name (Fedora12Mini) to the new name (Fedora12Firewall) in the .vmx file. While you have the .vmx file open, note two lines you’ll need to look for later.  These are the lines that start with ‘ethernet0.generatedAddress‘ and ‘uuid.location‘. These values are equivalent to the HWADDR (or MAC) and UUID values in your operating system’s configuration.  Both of those values are intended to uniquely identify your network card and computer, respectively. When you start the virtual machine, these values will be regenerated for your new virtual machine, and you will need to update your virtual machine’s configuration with those new values. Before starting the new virtual machine, you still need to make one more file name change, this one in the .vmxf file; change the original virtual machine name to the new name, just like you did in the .vmx file earlier.

The generatedAddress and uuid lines in the .vmx file

The generatedAddress and uuid lines in the .vmx file

Start the VM by starting VMWare Player, and then clicking “Open a Virtual Machine”. Navigate to the new directory and open the .vmx file in that directory.  Now click “Play Virtual Machine.” Shortly after doing that, you will be asked if you moved or copied the virtual machine.  When asked, say that you “copied”.  The virtual machine will then start up.


The network adapter will fail upon startup. You’ll know this because you will not be able to make any network connections.  Verify this by executing ifconfig and looking for the IP address of the eth0 controller:

Results of ifconfig

Results of ifconfig

Note there is no ethernet controller (there should be at least an eth0 setting). This is happening because Fedora’s configuration files do not match the changes made to the virtual hardware that were made when you told Player that you copied the virtual machine.  To fix this, open up the .vmx file on the host and note the new ethernet generatedAddress and UUID location values.  Open /etc/sysconfig/networking-scripts/ifcfg-eth0 on the virtual machine and enter the contents of the ethernet0.generatedAddress line into the HWADDR line in ifcfg-eth0, and the uuid.location contents into the UUID line in ifcfg-eth0. Copying ethernet0.generatedAddress to ifcfg-eth0 is straightforward, but the UUID value isn’t formatted the same as in the .vmx file.  When updating ifcfg-eth0 with the new UUID, just ensure that it follows the same pattern of 4 bytes-2 bytes-2 bytes-2bytes-6 bytes.  The easiest way I found to do this was to just add a new UUID underneath the existing UUID, then deleting the original UUID when finished:

ifcfg-eth0 after updating HWADDR and UUID, but before deleting original UUID

ifcfg-eth0 after updating HWADDR and UUID, but before deleting original UUID

After deleting the original UUID value and saving ifcfg-eth0, restart the virtual machine. (An aside: I’m not completely sure a full system restart is necessary here.  I tried to restart the networking service [service network restart], and the changes didn’t seem to take effect until after the full system restart.) You should now have an IP address, and all will be good with the world.

Meetings, laptops, delays and embarassment

Tuesday, December 8th, 2009
A laptoppy meeting

A laptoppy meeting

I hate meetings. They suck productivity, cause interruptions that further suck your productivity, and generally do not accomplish much.  However, I do recognize the necessary evil of getting everyone in the same place at the same time to ensure we all know what needs to be done.  All I ask is that they be as short as possible. Here are three meeting “anti-patterns” to avoid:

A scenario that I used to encounter often was the “I Didn’t Take Setup Time Into Consideration” pattern. This usually occurs in smaller organizations with limited conference rooms that end up being scheduled wall-to-wall all day long. The presenter, unable to gain access to the conference room before the meeting started (or worse, was a part of the previous meeting), proceeded to project a defect tracking system onto the wall to review open defects.  As the attendees gathered, we just sat there, waiting for the laptop to boot, then for the projector to get set up properly, and then the presenter finding the correct report to run. During the five to ten minutes it took to do that, the attendees weren’t doing anything other that wasting time and losing (the company’s) money. Always ensure there is sufficient lead time to set up for your meetings.  In the event that your conference rooms are always booked, schedule the meeting to start at ten minutes after the hour. Don’t just waste people’s time.

A related pattern is the “I Want To Use Software I’ve Never Used Before To Present At The Meeting.” It is very similar to the pattern described above, except that it continues the full length of the meeting.  Don’t use meeting time to figure out how software works. Consider it a part of your preparation for the meeting.  Do a few trial runs even before scheduling the meeting.

And then there’s the “Everybody Now Knows How Much Of A Raise Joe Got Because I Left My Email App Open” pattern. When you attend a meeting, and must bring the laptop to project information to everyone, remember to turn off your email client, including any notification tools that you may have.  Failing to do so could result in sensitive information being displayed to the entire meeting.  This becomes even more serious if you’re a manager or an executive level employee. I’ve actually witnessed emails regarding benefit packages and vacation requests projected on the wall during a meeting.

All three of these patterns have a common thread: the laptop. When meeting, ask if you really need the laptop. I’m a fan of the topless meeting, and feel as if I’ve been liberated during meetings.  I can now pay attention to the person talking instead of futzing with the laptop, plus I no longer have to worry about others asking me to look things up.  Ask yourself what projecting from a laptop buys you that a well written agenda on a whiteboard or easel pad wouldn’t.  Most of the time, but certainly not all the time, you’ll find the answer is “nothing.”

You forgot to include

Tuesday, December 1st, 2009

Sometimes strange things catch my attention. As a web professional, sometimes web sites acting strangely catch my attention.  Over the last couple of days, two different sites did things that not only caught my attention, but completely blew my mind. And not in the good way.

One of the sites (which will remain nameless) is a tech blog I normally read via RSS, but I found myself actually reading from the site recently.  As I did, I noticed the status bar flickering, and the load progress bar not quite all the way to the end.  The page was obviously still loading, but it appeared that the page was complete.  As I scrolled down the page, I noticed that the blogroll used the favicon of each blog listed in a very long list.  Because I do not visit many of the sites on that blogroll (apparently), my browser had to go to each site and download the favicon for each blog. The good news about that is now that I’ve fully downloaded the page, I have all those favicons cached, and subsequent loads of that page should be snappy, but I have to wonder if there isn’t a better way to do that.

It could be possible to put all the favicons into a sprite image, and download the single image file and let the browser’s CSS do it’s magic.  However, there are (at least) two things wrong with doing that.  First, if the blog’s owner decides to change the favicon, the incorrect icon will appear in the blogroll until the sprite image is updated. Second, copying somebody else’s graphic handiwork onto your server is ethically shady. Ethically, the blog’s designer did the right thing and reference the favicon from each of the remote sites. Unfortunately, the ethical thing to do was not the speediest thing to do. In this case, the blog’s designer would have to ask the question “does including the favicon from each of these remote blogs add any value worth the hit in performance?”  In my mind, the answer would probably be no.too-many-includes

The first attention-grabbing site was a personal blog site.  The second, however, is a high-traffic tech news site (which will also remain unnamed). This site is big into embedding JavaScript or Flash from other sites on their page.  The reason I know this is because I use a Firefox extension called No Script that blocks all JavaScript and Flash content unless I have explicitly allow a given hostname.  The image to the right is the No Script status bar. Note the number of sites. That’s a lot. (An aside: The sites with the blue S icon are those that I have not allowed to load, and the sites with the red circle and slash through them are being allowed.) Many of the includes are for site tracking or commenting, but in my mind, there are way too many includes here.  All of these things take time to load.  This, too, would be another one of those situations where the site’s designer has to ask if the value added by all these includes is worth the extra time it takes to load the site.

This same site doesn’t come close to having well-formed HTML, either.  Below is the output of HTML Validator, showing not just a large number of errors, but several frames as well.  I had thought frames died in 1999. Apparently not.