Friday, May 30, 2008

Control Windows Media Player with the ThinkPad Play/Pause Keys

Quick tip for ThinkPad owners: the media control keyboard keys located on the arrow keys at the bottom-right corner of the keyboard can be used to control music or other media playing in Windows Media Player (WMP) even when WMP isn't the foreground application! 

ThinkpadMediaKeys

To use these keys, hold down the blue "Fn" key at the bottom-left corner of the keyboard, and press the appropriate arrow key.

With these keys, I can have music playing in Windows Media Player in the background (or in a minimized window), and be working in other applications in the foreground.  Then, when I get interrupted and want to pause my music (when the phone rings, or when a visitor arrives at my desk), instead of having to open the WMP window and click on the Pause button, I can just quickly push Fn + Play/Pause (the down arrow key), and my music is paused.  Another press of Fn + Play/Pause, and my music starts playing again.  Quite handy!

Wednesday, May 07, 2008

Tip: Expand your Windows Taskbar

A quick tip to make your Windows Taskbar a lot more usable is to expand its area and make it two rows high instead of one.  A pair of pictures are worth 2000 words:

TaskbarSingleRow_700

TaskbarDoubleRow_700

These two images show the same Windows XP Taskbar with 12 applications running, and a bunch of icons in the system tray.  The difference is that in the second image, the Taskbar has been expanded to be two rows high instead of just one.

With the increased area available on the Taskbar, it's much easier to read the text that accompanies the icon on each application button, making it a lot easier to find (for example) a specific Firefox window or Word document.

To increase the number of rows in the Taskbar in this manner, just use the mouse to drag the top edge of the Taskbar upwards.  (You'll need to temporarily unlock the Taskbar first if you have it locked: Right-click an empty portion of the Taskbar, and uncheck the "Lock the Taskbar" option from the context menu that appears.)

Increasing the Taskbar area to two rows has a few other benefits as well:

  • The system tray icons are grouped into three rows instead of just one, saving a lot of horizontal real estate on the Taskbar.  As a result, there's even more room available for application buttons to be shown.
  • Windows shows the day and date in addition to the time on the right edge of the Taskbar; no need to hover over the time display with the mouse to see that information anymore.
  • Although it isn't shown in the screen cap above, I've found that the bit of empty space below the Start button is a great place to tuck a SlickRun command line into.

With the large screen resolutions (and hopefully, multiple monitors) available on modern machines, the additional screen real estate consumed by increasing the Taskbar size to a second row is trivial compared to the usability and productivity gains realized by doing so.

(You might also note that I have the "Group Similar Icons" option from the Taskbar's Properties dialog turned off.  That option does save some Taskbar real estate, but at the significant cost of not being able to identify or access specific application windows from the Taskbar with a single-click.  Again, with the large amount of screen real estate available on modern systems, I don't see the benefit in ever having that option enabled.)

Tuesday, April 22, 2008

Fix: Windows Live Writer install: "Sorry, we couldn’t install this program"

I ran into an issue while trying to install Windows Live Writer, a blog-posting package, at work earlier this week.  The installer would work for a few minutes, and then fail with the rather uninformative error "Sorry, we couldn't install this program", and offer to put a shortcut to the installer on the desktop for me to "try again later."  I did "try again later" a couple of times, but the install kept failing in the same manner.

Tonight, I brought my laptop home, and tried the install again, and it worked just fine.  I suspect the difference is that here at home, I'm not behind a proxy server.  Why the Live Writer installer didn't pick up my proxy settings at work from IE and contact whomever it wanted to contact using those, I'm not sure.  For anyone getting this error who is behind a proxy server, though, I would suggest trying the install again from an alternative location that is not behind a proxy server, if you are able to.

WindowsLiveWriter

This post is also doubling as a test post, written and published via Live Writer!  Thanks to Scott Hanselman for the recommendation (in this post).  This does seem like a very nice tool so far.  It appears to support uploading images to a customizable FTP destination separate from your blog host -- hence my image test above -- and if this works out, it will likely replace the custom FTP image resizer/uploader app that I wrote for my wife that she uses when she blogs!

Fix: "Bluetooth device not found" on Thinkpad T60

I recently picked up a Bluetooth-enabled camera phone, and so I became interested for the first time in getting the Bluetooth functionality on my work laptop (a Thinkpad T60 running Windows XP) working to allow me to easily download pictures from the phone.

However, when I launched the Bluetooth Configuration applet from the Control Panel, it would hang for 5 or 10 seconds, and then show an error: "Bluetooth device not found. Please verify that your Bluetooth device is properly connected and turned on." In the Device Manager, under "Bluetooth Devices", only "Bluetooth Bus Enumerator" was listed, but no other specific Bluetooth device.

At this point, I was wondering if I didn't actually have Bluetooth hardware installed (despite the presence of a Bluetooth usage indicator icon on the machine); when I first got this machine, the internal wireless card wasn't yet installed, and I needed to take the machine down to the IT department to have them pop it in. However, one of the IT folks I talked to confirmed that the Bluetooth capability should be present in the existing wireless card.

The solution turned out to be that Bluetooth was disabled in the BIOS. In the BIOS, in the Network section, there is a setting named Internal Bluetooth Device; the value was set to "Hidden." I changed this to "Enabled," saved, and rebooted, and now the Bluetooth card does show up properly in Device Manager and in the Bluetooth Configuration applet.

So, I can now successfully pull photos directly off my camera phone to my PC, without having to individually email them to myself from the phone as picture messages (and pay my wireless provider for the privilege)!

Friday, April 11, 2008

Software Developers' $300 Discretionary Productivity Budget

Currently, there is a state of affairs at many companies that employ or software programmers or developers is that if a developer wants or needs something to improve their personal productivity -– for example, a new piece of hardware such as a 2nd monitor, or a book on a new software development methodology –- that need is essentially treated as "non-standard" or "out of the ordinary", and requires special approval from a manager.

After reading Jeff Atwood's recent blog post We Don't Use Software That Costs Money Here, I got to thinking: Wouldn't it be nice if every developer had a small discretionary budget from their employer of, say, U.S. $300 to go out and buy themselves things they want or need to help do their job better? The developer could just order themselves what they need -- no special approval required -- and then expense it to the company, up to that annual $300 limit.

What would the discretionary budget cover?

Some things that a developer could use the budget to purchase:
  • Hardware:
    • An additional monitor - around US $150-350
    • A video card or laptop dock to run the additional monitor, if needed - $50-150
    • A custom mouse or keyboard - $30-80
  • Software development-related books/manuals - $30-60
  • Non-free software tools - $5+
  • Non-free development-related magazine subscriptions - $10-40
  • Possibly, even "non-technical" things like a desk lamp or a nicer chair
Things the budget would not be intended to cover:
  • The obligatory development machine upgrade every 3/4/5 years that developers generally need to be able to keep up with modern software.
  • Major software packages that developers require to do their jobs, such as a copy of Visual Studio for developers working in a C# shop.

Why $300?

I picked $300 because it's enough to buy a modest amount of items that can make a real productivity impact; say, a decent $200 monitor and a couple of $50 books on development methodology. If a developer needs to spend beyond the $300 limit – say, to buy one more book, or to do something more expensive like attend a conference – they could just get special permission from their manager (as would otherwise be the status quo for any request, without the discretionary budget).

A budget amount of much more than $300 – say, $3000 – could be problematic because developers at some point would likely feel like they would rather have some of those budgeted funds go directly to their salary. $300, spread over an entire year, is an amount that is probably low enough for most developers not to feel annoyed that they are losing potential compensation.

Benefits

What are the reasons that an employer of software developers might want to set up a discretionary "productivity budget" for their developers?

  • Productivity. Developers can use the budget to increase their own productivity, which directly translates to a productivity gain for their development team, and in turn, for their employer.
  • Morale. Existing developers are happy because they can (within limits) just order themselves what they need, instead of needing to worry about getting approval from a manager, or that they might be "overstepping their bounds" by making a special request.
  • Recruiting. Recruiting is benefited, as the discretionary budget can be presented as a differentiator to prospective hires. Prospective new employees could see the budget as a sign that the company is in tune with developer's concerns, and that the company's developers are empowered to make their own development-related decisions (rather than having such decisions be made by potentially non-technical management staff).

Costs

Why might an employer of software developers not want to implement this policy?

  • Budget. If a development manager implements the $300 discretionary budget policy for his team, and there are 10 developers on the team, that's an annual cost of $3000 that needs to come from somewhere. Taken on its own, that figure might initially seem like a somewhat large amount for the manager to approach upper management and request. However, I would argue that the multiple real benefits provided by the discretionary budget (as outlined above) outweigh the relatively insignificant additional cost of the budget as compared to the (most typically) six figures already being spent on the developers' salary and benefit packages.
  • Perception of lost salary. As noted earlier, the potential exists for some developers to be annoyed that the $300 is money that could be going towards an increase in their base salary. However, I think the potential for negative impact stemming from this perception is limited – I suspect there aren't too many developers today who are annoyed that they have such a nice development machine to work with, because their employer could have bought them a weaker machine, and passed the $150 saved along to them!

Who owns property purchased with the budget?

If a developer buys a monitor or a book with the money from their discretionary budget, who does that item belong to? Who owns the item?

The Developer. The developer owning such purchased items, no strings attached, probably isn't a good policy. There would be nothing to stop a developer from buying a new video card and taking it home to exclusively use for playing computer games. The employer wouldn't see any real benefit in that case, and the development budget might as well just be rolled into the developer's salary.

The Company. A policy of the employer owning purchased items is a possibility. If the developer leaves the company, the company would retain possession of any items purchased. There could be situations where developers might purchase specialized items, though, which the company wouldn't have any real interest in retaining, such as a left-handed trackball (in the case that there are no other trackball-favoring lefties on the team).

The Developer – with a caveat. An employee-friendly approach that blends these ideas would be to allow the developer to have ownership of purchased items, but stipulate that the items are for use at the office only. This would give the company all of the benefits of the developer gaining productivity through use of their purchases; and in the event that the developer leaves, the company wouldn't be out a significant amount of money. This would also mitigate any perception by developers that the discretionary budget funds are coming out of their salary.

Whatever ownership policy is chosen, there are cases where exceptions to the general policy would be reasonable; for example, the company might allow developers to purchase a development-related magazine and have it delivered to the developer's home address (rather than to the office), to allow the developer to read the magazine at home in their spare time.

What happens to leftover funds at year's end?

My suggestion would be that funds left over at the end of the year would not be carried over to the next year; time-limiting the budgeted funds in this manner would encourage developers to use the funds to improve their productivity (per the budget's intention), rather than "hoarding" budget dollars, or alternatively, just ignoring the budget.

One potential issue with this approach is that some developers might, at the end of the year, spend their budget on frivolous purchases, just so their funds aren't "lost." One possible way to deal with this might be to give developers a cash award equal to something like 20% of their leftover budget funds. A developer with $100 left over at the end of the year might then be encouraged to not spend their money, to get the extra $20 in their paycheck; but the 20% is a low enough amount that developers probably wouldn't be very motivated to purposely refrain from spending any of their $300 budget throughout the year, with the intent of earning a mere extra $60 at year's end.

A realistic implementation of an existing concept

Certainly, the idea that developers should be given significant latitude to obtain whatever equipment they feel they need to do their jobs, and to have other exceptional on-the-job benefits isn't a new one; good articles on this topic include Joel Spolsky's A Field Guide to Developers and Jeff Atwood's Programmer's Bill of Rights. However, I have observed that companies which aren't among the group of a relatively few "elite" development-centric companies along the lines of Google, Microsoft, Joel's Fog Creek, or Jeff's (until just recently) Vertigo would (and actively do) simply balk at the prospect of the required expenditure and (perceived, at least) questionable ROI of implementing Joel's and Jeff's suggestions.

On the other hand, a basic $300-per-developer budget at outlined in this article might be more palatable, and thus realistically more likely to be implemented, at the mainstream of companies that employ developers -- both software-industry companies, and companies in other industries that have developers on staff to develop internal applications.

Action Items

Developers, feel free to present the developer's discretionary budget as described in this article to your manager, and see if you can't get a productivity-enhancing discretionary budget approved for the developers on your team.

If anyone does get such a budget implemented at their workplace after reading this article, please do let me know. I would be happy to hear about it!