Wednesday, December 20, 2006

Say what?

From Picasa's Terms of Service (emphasis mine):

Upon the termination of your use of Picasa Web Albums, including upon receipt of a certificate or other legal document confirming your death, Google will close your account and you will no longer be able to retrieve content contained in that account.

Errr... If I'm dead, do I care if I can't access content?

I'm afraid to ask if this rule is the result of a precedent.

Wednesday, December 13, 2006

What are my choices for "no"?

"Automatic Updates

Updating your computer is almost complete. You must restart your computer for the updates to take effect.

Do you want to restart your computer now?

[Restart Now]"

Whoa!  At least it's better than that "Your computer will restart in 5 minutes no matter what and I don't care if your name is Bill Gates and you're in the middle of a very important demonstration at the moment, so TOUGH LUCK."

For those of you who might be wondering how this could have happened, I run as a non-administrator on that computer and I "Remote Desktoped" back to my own machine as the administrator to install this Patch Tuesday's set of updates.  I wasn't quite ready to reboot, but Windows just needed to insist.

Thursday, November 30, 2006

Do what Technorati tells you to...

Oh, great. I think I just got suckered into another one of those linking schemes by accidentally creating a Technorati Profile so that I could post my picture somewhere or something.


Do what the interweb tells you to

So I'm reading Larry O'Brien's blog and he tells me (well, not me personally, but you know what I mean) to not only click on a link, but also to link to it in my own blog. The destination page says the same, plus:

Ask your readers to do the same. Beg them. Relate sob stories about poor graduate students in desperate circumstances. Imply I'm one of them. (Do whatever you have to. If that fails, try whatever it takes.)

...who am I to resist orders from the internet and random blogs?

Wednesday, November 29, 2006

$how me the Shatner!

This show called Show Me The Money recently came out on ABC. It is hosted by William Shatner and feels like a cross between Who Wants to Be a Millionaire and Deal or No Deal.

Unsurprisingly - and appropriately enough but most likely on purpose - WFS feels like a cross between Regis Philbin and Howie Mandel.! You!

Hacking the Microsoft Natural Ergonomic Keyboard 4000, redux

Earlier I wrote about hacking IntelliType's commands.xml file to enable the use of the "Zoom slider" as a "Scroll slider". Having recently repaved my computer, I found myself installing the latest version of Microsoft IntelliType Pro (version 6.02, a.k.a. 6.02.303.0) and trying to apply the patch I posted earlier:

C:\Program Files\Microsoft IntelliType Pro>patch -p0 < command.patch
patching file `commands.xml'
Hunk #1 FAILED at 1606.
Hunk #2 FAILED at 1694.
Hunk #3 FAILED at 2122.
Hunk #4 FAILED at 2134.
Hunk #5 FAILED at 2152.
Hunk #6 FAILED at 2182.
patch unexpectedly ends in middle of line
Hunk #7 FAILED at 2224.
7 out of 7 hunks FAILED -- saving rejects to commands.xml.rej

B'oh! Err... I mean: D'oh! Ok, time for plan B: Zoom2Scroll.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="" version="1.0">

<xsl:output method="xml" encoding="UTF-8" indent="yes" />

<!-- Pass-through (identity transform) template -->
<xsl:template match="* | @* | node()">
<xsl:apply-templates select="* | @* | node()" />

<xsl:template match="C319">
<C319 Type="6" Activator="ScrollUp" />

<xsl:template match="C320">
<C320 Type="6" Activator="ScrollDown" />


There. A quick trip to the command-line with my trusty xsl.exe:

C:\Program Files\Microsoft IntelliType Pro>xsl commands.old Zoom2Scroll.xsl commands.xml

C:\Program Files\Microsoft IntelliType Pro>

...and killing the IType.exe process, then re-launching that EXE again... it works! In your face, Larry Wall!

Oh, right. This post wouldn't be complete without the source code to xsl.exe. It's a JScript.NET program:

import System.Xml;
import System.Xml.Schema;

var src : String = System.Environment.GetCommandLineArgs()[1];

var transformer : System.Xml.Xsl.XslTransform = new System.Xml.Xsl.XslTransform ( );
var stylesheet : String = System.Environment.GetCommandLineArgs()[2];
transformer.Load ( stylesheet );

transformer.Transform ( src, System.Environment.GetCommandLineArgs()[3], null );

...which you can compile as follows:

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>jsc /nologo xsl.jsn

Thanks go out to the folks at Cute Overload for providing me with a [semi-]random web page to test the [new] scrolling capabilities of my "slider" in Internet Explorer.

Wednesday, October 25, 2006


From Larry O'Brien's blog, God, I Hate Classpaths:
I've spent the past 3 hours trying to figure out freaking classpath issues: something about a ClassCastException from a org.apache.commons.logging.LogFactory. I'm giving up for the day. Stupid freaking classpaths.

The feeling is mutual, brother. I've recently lost plenty of hours to weird errors that turned out to be classpath-related. Maybe I've simply gotten used to putting all my assemblies in the same local folder (and not having to re-create that list elsewhere) or using the Fusion Log, which will tell you what the runtime is trying to load, even if it's hidden by another exception or a silent failure.

Wednesday, October 11, 2006


I apologize for the recent feed duplications.  First, I upgraded to Blogger Beta (gone are the endless refreshes when "publishing"), then I started using Windows Live Writer (Beta).  In theory, everything should be good now...

...until the next round of betas, I suppose. :p

Comparison of Open-Source Licenses


This is a copy of an essay I wrote for an assignment in the Open-Source Software Engineering course I'm taking. The deadline was yesterday, so it's safe to post today. :) I wrote this essay using Confluence, so the HTML is a little weird when I try to copy/paste it here. The assignment was:

Compare and contrast (1500-2000 words) the open source licenses MIT, BSD, GPL, LGPL, Creative Commons to the Eclipse Public License. Make sure to include a table (rows heading is feature, column heading is license) that summaries your discussion. Submit the answer to this question as an HTML document.

Feature to License matrix

# Feature name \ License MIT BSD GPL LGPL Creative Commons EPL
1 Number of paragraphs 4 6 56 69 Average of 31 20
2 Distribute modified/derived work? Yes Yes Yes Yes Depends on "nd" option Yes
3 Must release source?

Yes Yes

4 Must identify all modifications?

Yes Yes

5 Is attribution required? Preserve copyright notice Preserve copyright notice Preserve copyright notice Preserve copyright notice Yes Preserve copyright notice
6 Is endorsement or promotion permitted?
Not without permission

7 Is commercial use or distribution authorized?

Yes Yes Depends on "nc" option Yes
8 Allows re-licensing?

Only by special permission Only to GPL, or by special permission Depends on "sa" option Yes
9 Requires patents be licensed to recipients?

Yes Yes


The open source licenses involved in this study have been analyzed and – although similar in the spirit of "no charge but no warranty" copyright licensing – were found to be primarily different in what they are specific or explicit about. It is speculated that this is representative of the values and interests of the license authors and therefore the level of detail surrounding a topic is assumed to reflect the degree to which the interests and values affected by said topic are important to the authors and the amount of effort willing to be exerted in order to ensure said interests and value are protected.

Examples of such interests and values are "equality", "merit", "freedom", "public good", "continuous improvement", "standardization" and "accountability". This analysis will examine these values, how they can be traced back to license features and finally how individual licenses emphasize these values by the use of the features and the requirements or conditions they attach to said features.


The matrix, and correspondingly this analysis, only examines the major differences observed between the licenses. Similarities are outside the scope of this study. It should be noted, also, that the matrix only contains entries for feature-license pairs when such a feature was explicitly mentioned in the license. As identified in the introduction, the licenses aren't always specific on all features and a lawyer may be able to interpret the licenses according to the local laws to make a definitive determination for each feature. That said, even a "Yes" is slightly misleading as there are often conditions or requirements attached to the permissions before they can be implemented.

1. Number of paragraphs

Although one of the more questionable choice of features, it is actually pretty representative of the level of detail of the licenses. The count was done quickly, by hand.

2. Distribute modified/derived work?

Since all licenses permit royalty-free redistribution, the distinction here is whether the work can be distributed with modifications or as part of a derived work. This feature is present because the Creative Commons licenses can restrict this activity with the "nd" (No Derivatives) option.

3. Must release source?

This feature is more accurately the requirement of making available, upon request, the source code of any binary re-distribution, independent of whether the work was modified or not. It may be sufficient to make an offer for the source code or to pass on the same offer to recipients. The GPL and LGPL are explicit about this.

4. Must identify all modifications?

Also known as "delta notification", this is a requirement that modifications be traceable back to contributors, usually in the case of derivative works. Again, strong features of GPL and LGPL.

5. Is attribution required?

Another feature that appears to stem out of nit-pick, the Creative Commons licenses stand out in that they require more than simply preserving the copyright notice but to make efforts to link back to the original work. This could be considered a special case of delta notification.

6. Is endorsement or promotion permitted?

A special case of attribution, in the case of derived works the BSD license makes a point of requiring "specific prior written permission" before using the names of the original project's organization or contributors for promotional or endorsement purposes. The Creative Commons licenses give this permission by default, but section 4.a reserves the right to the Licensor to request credit be removed.

7. Is commercial use or distribution authorized?

This feature is about the license granting permission to use or distribute the work (or portions thereof) in a trade for something of value between two entities [3]. The MIT and BSD licenses are not specific about this and the Creative Commons licenses offer this permission as the "nc" (Non-Commercial) option.

8. Allows re-licensing?

It may be desirable, during the construction of a derived work, to license said derived work under different terms. The GPL and LGPL offer this possibility as an exception, the EPL offers it under certain conditions and the Creative Commons licenses grant it if the "sa" (Share Alike) option is not used.

9. Requires patents be licensed to recipients?

Where patents are concerned, the GPL and LGPL, through sections 7 and 11, respectively, state clearly that any patents owned by contributors be licensed royalty-free to all recipients, direct or indirect. The EPL, on the other hand, only requires that patents on contributions be licensed royalty-free when combined with "the Program", although the EPL joins the MIT and Creative Commons licenses in reminding the recipient that there is no guarantee the work does not infringe on patents owned by third parties. The EPL goes furthest by stating it is the responsibility of the recipients to acquire any third-party patent licenses that may be required for the use or distribution of the work.

Interests and Values

These values were derived from the perceived intents of the license features identified earlier and form the basis of the respective philosophy behind each license.

1. Equality

Equality is a social state of affairs in which certain different people have the same status in a certain respect.[1]

This form of inclusiveness aims to fairly make available the work to all possible recipients and ensuring this possibility through various conditions, such as ensuring the re-distributed work is licensed "as a whole at no charge" [2]. While this is generally the primary principle behind open-source licensing, half of the Creative Commons licenses stand out here because the "nc" option – identified in feature #7 – prohibits the use of the work in a commercial fashion and thus can be interpreted as introducing inequality. It could also, on the other hand, be argued that such a restriction may be an attempt to restore equality among non-commercial entities relative to their commercial counterparts.

Another factor potentially affecting equality is the Creative Commons licenses' "sa" option – identified in feature #8 – that seeks to ensure recipients have as much freedom with the derived work as with the original, much the same way sections 2b and 6 of the GPL and sections 2c and 10 of the LGPL try to ensure the propagation of the rights and freedom of the original work to all recipients at all levels of distribution.

Lastly, feature #9 ensures that no person or groups of person be excluded from using the work by having the GPL and LGPL require that all patents be licensed royalty free to everybody.

2. Merit

This value can be understood to mean the desire for recognition or acknowledgement, such that a reputation can be earned and preserved. We can especially see the expression of this value through feature #5 but also through feature #6 where the authors of the BSD license imagined the possibility of mis-use or of sub-optimal derivative works that could potentially – albeit unintentionally – reflect badly upon the original authors. We can also see a similar attitude with section 4a of the Creative Commons licenses where endorsement is considered granted in the form of the attribution requirement, but for which the Licensor has veto rights over.

It can also be argued that feature #4 helps support the notion of individual merit and reputation by the GPL and LGPL requiring that all modifications be identified, even though all licenses disclaim any warranties to protect the same individuals from damage claims.

3. Freedom

Although all open-source licenses generally try to increase the freedoms of the recipients, the most fervent in its attempts to do so is the GPL, especially through feature #8. This value is highly regarded as it can help avoid vendor lock-in where critical or popular fixes and improvements could otherwise be withheld, delayed or prevented by the original authors. There are obvious similarities to value #1 (Equality).

Feature #3 tries to make sure recipients (direct or indirect) are as able or free to make changes to the work as the original authors, provided some conditions are satisfied. Again, this is the stated spirit of the GPL and LGPL, although the latter trades a few freedoms – hence the "Lesser" in the name – to support value #6 (Standardization). Some Creative Commons licenses are definitely at odds with this value as the "nd" option could be seen as taking away freedom, relatively speaking.

4. Public good

It is seen as an effort to help the development of the greater community and encourage cooperation to emphasize elements of feature #3. Similar to value #1, this value distinguishes itself from Equality by not only providing equal access to the work, but to improvements to the work, such that said improvements are done cooperatively and as a community so as to best reflect the needs of the many. That is not to say that the act of not making available the source code hinders public good per se – although some may argue otherwise – but that the public good is best served when the source code is also made available.

Feature #7 can play a role here, in that allowing commercial use and redistribution may also help accelerate the development of a popular work, as the LGPL. One could also argue the applicability of features #4, #5 and #6 in that they could help identify fraudulent or sub-optimal versions of a popular work.

5. Continuous improvement

The permission to re-distribute modified/derived works (feature #2), coupled with the guaranteed freedom to make modifications (feature #3) help support this special case of value #4 (Public Good) where the software is able to be evolved and improved. This is where works licensed under the GPL have the best chance for continuous improvements and No Derivative Creative Commons-licensed content the least chance.

It could also be argued that the ability to make improvements in secret could mean there is less overhead involved and the improvements themselves progress faster, but such modifications may not be for the greater Public good. In those cases the MIT, BSD and EPL licenses offer that opportunity and similar, more "open" projects may be created to emulate the more secretive counterparts.

6. Standardization

It may be that it is important a work become popular or widely-used. In such cases, the "lesser" conditions attached to feature #3 by the LGPL (or by other licenses) may allow works such as function libraries to flourish by being used by more recipients than otherwise would be possible if said recipients had to also release their source code, even if it only used the original work. [5]

7. Accountability

Feature #5 helps identify the authors and contributors to works and feature #4 enables an order of magnitude better traceability to help establish exactly who did what, generally to help track down problems and/or defects with the work That information could also, in theory, be used to assign blame, although all licenses try to avoid this situation by providing no warranty of any kind and attempting to shield authors and contributors from damage claims.

The GPL, LGPL and EPL, however, have an exception that permits, through feature #7, the exchange of a warranty for a fee, under the condition that the warranty protection can not affect other contributors.

Lastly, although some patents are licensed for use as per feature #9, not all possible patents necessarily are. The EPL and MIT licenses are the only two that specifically point out the fact that third-party patents may need to be licensed, mostly because there is no warranty of non-infringement. The GPL and LGPL, on the other hand, are specific about obtaining royalty-free patent licensing from all involved parties before distributing the work.


As was demonstrated in this study, the licenses vary wildly in what they are specific or explicit about, which helps to emphasize the differences in values and interests shared by the authors of said licenses. It is thus difficult to fully compare the chosen set of open source licenses because they do not generally disagree on many points, but rather delve into different facets of those points at different intensities.

It is thus recommended that the choice of an open-source license for a new work be made according to the compatibility of the author(s)' values with those implied from the licenses. An abstraction at this level is thought to deliver the best suitability and match.


1. Social equality, Wikipedia.

2. The GNU General Public License, Free Software Foundation, Inc.

3. Commerce, Wikipedia.

4. The Open Source Definition, Open Source Initiative.

5. GNU Lesser General Public License, Free Software Foundation, Inc.

6. Licensing HOWTO, Raymond, Eric S. & Catherine O.

7. The Power of Personal Values, Posner, Roy.

8. Commerce, Wikipedia.

Monday, October 09, 2006

DMA is a Good Thing (TM)

I was recently ripping audio CDs until I reached a point where it didn't work so well anymore. Symptoms: CPU usage would go through the roof (even after changing the process' priority to Low), my pointing device would be erratic, I couldn't play audio at the same time and the ripping itself didn't seem to go as fast as it used to.

Since the pointer was erratic, I suspected an interrupt problem. It turns out the drive had was now being accessed in PIO mode. I tried the usual "switch to DMA" trick, but it didn't work! Fortunately, I ran into this forum posting over at where the third post detailed a procedure which seemed less scary than the first one and which worked, to boot!

Quick recap, in case that forum vanishes into thin bandwidth (hardy har har), because everybody knows all the forums eventually get pwn3d by spoiled twelve-year-olds-who-should-really-be-doing-their-homework-instead-of-saving-the-public-good-from-useful-information-and-loitering-on-my-damn-lawn:

  1. Open your registry to the key:

  2. Navigate under the sub-key 0001 or 0002 (representing the primary and secondary IDE channels, respectively), whichever one represents the channel for which your device isn't getting DMA-enabled

  3. Delete the value MasterIdDataChecksum or SlaveIdDataChecksum, again depending on whether your DMA-deficient device is the master or slave, respectively.

  4. Reboot!

In conclusion, this momentary trip to the pre-DMA days really scared me and made me be thankful for DMA on this day of thanksgiving. I suspect one of my CDs was scratched or otherwise damaged and my operating system decided it was safer to switch to PIO mode.

Friday, October 06, 2006

Software Horror Stories

From's forums:

Here are 107 software horror stories where making a programming mistake can cost you your job or even your, or even somebody else's life. Many of these listed provide links to stories about the horrific event while others contain book or magazine references where you can read more about them.

We heard of the worst of these in our Software Engineering course at Carleton U. Many of the events include a link to the RISKS digest, which is a must-read for every self-respecting software engineer out there.

Thursday, September 28, 2006

The future of compilers: right now!

From Software by Rob's post on The Future of Compilers... The part where he talks about logic errors being detected by compilers can probably already be done with xUnit, as we (at work) have NUnit running almost like a compiler, right after the actual compilation, in the build script. That way, if we have a "minus sign in the wrong place", a unit test will catch it, if not prevent it from happening again.

Some software like FxCop (PMD in the Java world) can also help here.

Gopher the Demo Player

As part of a university course I am taking (I've gone back to Carleton U for a M.C.S.), I am to make a presentation on some open-source software. I picked my own project, Gopher the Demo Player.

The presentation slides can be downloaded here (PDF, 693 902 bytes).

Hacking the Microsoft Natural Ergonomic Keyboard 4000

I am very happy with my Microsoft Natural Ergonomic Keyboard 4000 as it's finally a natural keyboard that (again) has the inverted T arrow keypad and the standard-size insert key, just like the good ol' 101-key days. In other words, it's like the original Microsoft Natural keyboard, but with "new interweb buttons", an even more natural layout (the "comfort curve design" makes more sense for the way fingers are laid out) and a "zooming thingy".

That "Zoom slider", however, should have been sold/marketed as a "Scroll rocker button", because I do far more scrolling than zooming and, besides, you can usually zoom by scrolling and holding down the Ctrl key in most programs. Well, those by Microsoft anyway.

Anyway, it turns out it's configurable if you:

  1. don't mind editing some XML

  2. don't mind that it's not really XML
    Just try adding an XML comment to document your changes (like <!-- changed by Oli -->) and watch the type32.exe (or itype.exe, depending on your version) program crash every time you hit a magic key to see what I mean. :p

Here's a DIFF of the changes to C:\Program Files\Microsoft IntelliType Pro\commands.xml that disable most customizations of the C319 and C320 keys, which are rock up/away and rock down/toward, respectively. I know it works with versions 5.3.606.0 (aka 5.30.606.0) and 5.5.661.0 (aka 5.50.661.0) of the IntelliType software, maybe also others.

--- commands.old 2005-03-15 04:46:45.000000000 -0500
+++ commands.xml 2006-09-26 15:45:38.718750000 -0400
@@ -1606,8 +1606,8 @@
<C101 Type="5" KeySeq="alt rightarrow" />
<C103 Type="5" KeySeq="escape" />
<C300 Type="5" KeySeq="enter" />
- <C319 Type="6" Activator="ZoomIn" />
- <C320 Type="6" Activator="ZoomOut" />
+ <C319 Type="6" Activator="ScrollUp" />
+ <C320 Type="6" Activator="ScrollDown" />
<C1101 Type="6" Activator="HorizontalScroll" />
<C1003 Type="7" Subtype="0" />
@@ -1694,8 +1694,6 @@
<Application UniqueName="rctrl_renwnd32" AppName="Microsoft Outlook">
<C1003 Type="7" Subtype="3" wParam="0x01672" />
<C401 Type="5" KeySeq="F7" />
- <C319 Type="6" Activator="OutlookZoomIn" />
- <C320 Type="6" Activator="OutlookZoomOut" />
<Application UniqueName="screenClass" AppName="Microsoft PowerPoint">
<C100 Type="5" KeySeq="pageup" />
@@ -2124,8 +2122,6 @@
<C309 Type="0" />
<C204 Type="0" />
<C315 Type="1" wParam="0x09cc4" />
- <C319 Type="6" Activator="ZoomOut" />
- <C320 Type="6" Activator="ZoomIn" />
<C401 Type="0" />
<C900 Type="1" wParam="0x09cf0" />
<C902 Type="0" />
@@ -2138,8 +2134,6 @@
<C311 Type="1" wParam="0x09d23" />
<C310 Type="1" wParam="0x09cb4" />
<C315 Type="1" wParam="0x09cc7" />
- <C319 Type="6" Activator="ZoomOut" />
- <C320 Type="6" Activator="ZoomIn" />
<C401 Type="1" wParam="0x19d47" />
<C900 Type="1" wParam="0x09cf0" />
<C902 Type="1" wParam="0x09ddb" />
@@ -2158,8 +2152,8 @@
<C101 Type="1" wParam="0x01798" />
<C103 Type="0" />
<C102 Type="0" />
- <C319 Type="5" KeySeq="ctrl add" />
- <C320 Type="5" KeySeq="ctrl subtract"/>
+ <C319 Type="6" Activator="ScrollUp" />
+ <C320 Type="6" Activator="ScrollDown"/>
<Application UniqueName="MSN6 Window" AppName="MSN Window">
<C204 Type="5" KeySeq="ctrl y" />
@@ -2188,8 +2182,8 @@
<C106 Type="1" wParam="0x0a125" />
<C104 Type="2" lParam="0x05" />
<C105 Type="2" lParam="0x06" />
- <C319 Type="6" Activator="ZoomOut" />
- <C320 Type="6" Activator="ZoomIn" />
+ <C319 Type="6" Activator="ScrollUp" />
+ <C320 Type="6" Activator="ScrollDown" />
<Application UniqueName="Internet Explorer_TridentDlgFrame" AppName="Internet Explorer Child">
<C103 Type="0" />
@@ -2230,8 +2224,8 @@
<C105 Type="2" lParam="0x06" />
<C106 Type="2" lParam="0x07" />
<C104 Type="2" lParam="0x05" />
- <C319 Type="6" Activator="ZoomOut" />
- <C320 Type="6" Activator="ZoomIn" />
+ <C319 Type="6" Activator="ScrollUp" />
+ <C320 Type="6" Activator="ScrollDown" />
<Application UniqueName="HH Child" AppName="HTML C302">
<C310 Type="1" wParam="0x000cf" />

Warning: The preceding code block came with no warranty whatsoever, so if your dog died, your significant other left you and/or your house burned down as a result of reading the previous code block, well, sorry, but you should have read this disclaimer first. Please don't sue me.

Tuesday, September 26, 2006

Other cool software you've never heard of

Last time I promised to write about some less crucial but-still-really-useful pieces of software I often use. Here's the "priority 2" list:

  1. Compare It!

    • The best diff/merge utility and thus the third best use of $30 I ever spent. I think it's its keyboard support and light-weight-ness that I enjoy most.

    • I tried (and even purchased!) DiffDog, but then it crashed too often and would hog the CPU too much for my liking and it looks like Altova couldn't care less about fixing the bugs. I used to like Araxis Merge also, but why pay $130 (USD) when you get almost everything (except 3-way diff/merge) for $30??

  2. Hamachi

    • Secure VPN between computers. Fantastic for playing games with friends from different houses or for remote access between two [otherwise] firewalled hosts on the internet.

  3. K-Lite Mega Codec Pack

    • Finally! No more spyware-infected, 54324-AOL-icons-on-your-desktop and 3420-icons-in-your-system-tray multimedia player distributions! These guys packaged up Media Player Classic with a few lots of CODECs. This means that after installing this one package, you can play any audio or video file you aunt Linda will e-mail you every second rainy Tuesday afternoon.

    • Did I mention Media Player Classic?? (yes I did) Well, I need to mention it again, because it means you'll never need to ever see those stupid ads on the side or under the aforementioned funny video Linda sent you. You'll also never have to wait the extra 25 seconds it takes for those damn things to load, skin, check for updates and pop up some dialogs saying "please send us money to help us continue to make your media playing life hell". MPC is slick, fast, small and an excellent example of where Microsoft should have stopped working on their Media Player.

  4. RSS Popper

    • RSS/ATOM feed fetcher, delivers to specified Outlook folders. Works as advertised.

    • This means I can read my feeds from anywhere I can access my Outlook mailbox thus I don't end up reading the same articles over and over again between my work computer, home computer, laptop and PDA. (well, almost, as I haven't quite mastered mail sync for my ancient Palm III on a modern OS)

  5. Expresso

    • Regular Expression Development Tool. Allows you to write and test your regular expressions in a quick, tight loop so that you can fix the mistake before your string contains 5435643789 characters.

    • The testing itself is fantastic as it will present all matches in a treeview, allowing you to expand the match groups to see exactly what was matched.

How to inspire confidence in your build process

From the Ankhsvn website:

Same build as above, but works.


Update: added some labels

Friday, August 25, 2006

These are a few of my favorite things

No, I won't be talking about "raindrops on roses" or "brown paper packages", but rather a set of software tools I have found I cannot live without. Well, ok: I won't die or something, but if I have to use a computer without the following installed, I get very frustrated:

  1. Servant Salamander

    • The next step after the good old Norton Commander, this Orthodox File Manager (OFM) allows me to perform file operations faster than Windows Explorer or any command-line I have ever used.

    • This is the software that keeps me on Windows and the best $30 I ever spent. I have yet to find anything that equals it for other platforms, although Krusader comes close and Midnight Commander still feels as akward to use as Norton Commander does after trying Servant Salamander.

  2. SciTE
    • SCIntilla-based Text Editor. Syntax-highlighting, auto-completing and folding compact editor. I use it to edit every text file when I'm not using Visual Studio. Look for the occasional patch from yours truly on their mailing list.

  3. Maxthon
    • Internet Explorer with tabs and stuff! The single best feature is the download control, which allows me to turn off, by default, JavaScript, ActiveX, Java, sounds and videos. This makes it really easy to surf safely and only turn those features you need when you trust the site, although a persistent "safe list" would be really nice for those sites I visit often.

    • Some of you may point out that Firefox also has tabs and a similar script disabling facility (which does support a safe list), so, err..., until I can configure it to have an experience like I have in Maxthon (which is a similar problem I have with most OFMs), I'll stick with Maxthon a little longer.

  4. Net Transport (NetXfer)
    • Fantastic software for downloading files. I use it primarily to queue up and throttle downloads, but it's also super at preparing batches of downloads through its browser integration that scans the current HTML for links and allows you to pick which ones to queue up. It also supports tricky protocols and scheduled downloads. It looks like my wish for BitTorrent support has recently come true, so I'll be trying that new version out very shortly. :)

Next time, I'll post about other cool software you've never heard of, but this time I can sort of tolerate using a computer without.

Monday, August 07, 2006

Always provide a manual option

My wife and I picked up a friend from the Ottawa airport the other day. On our way out, we had to pay for parking at one of those booths with a mechanical barrier. Only when we paid, the barrier didn't go up. The attendant looked at us funny, saying: "Ok, you can go now", and we looked at him with an equally funny look saying: "Sure, just lift the barrier first".

After a few iterations of this, including the attendant's assurance he had pressed the right button (and hence the gate should be up), he realized maybe we weren't making it up (he's facing the other way) and told us he had to call someone else to get it open. That someone else eventually showed up with a set of keys and a screwdriver-like tool, which he proceeded to use to open up the mechanical barrier's box. This got the barrier to lift, apparently mechanically.

The RISKS? Well, you'd hate to have the power go out or have an emergency of some sort, since it can obviously fail. Those gates should use a mechanical assist -- thus allowing a human being the option of lifting the barrier themselves -- instead of a completely mechanical drive, just like most garage door openers have that dangling string you can pull on to switch to "manual mode".

Since this blog is about software, ummm... the lesson is the same! Always provide a manual option or an override in software. It's no coincidence computers in movies always have an "override" option (although it's admittedly unlikely those people can somehow always get authorization to do so), but the message is clear; there's always a special circumstance where normal rules/validation conflict or aren't appropriate and thus should be temporarily disabled.

That is, if you want your software to be used. After all, business must go on and if the software refuses to accept unusual input (especially as the business evolves), then people will work around the software and use it less and less.

So think about this issue the next time you need to implement some sort of validation and make it more like guidelines.

Monday, July 31, 2006

SanDisk is "cruzing" for a bruisin' with their U3 Launchpad

Tonight, I was helping my mother with her Mac laptop and new "SanDisk U3 Cruzer Micro" memory stick. She purchased it to be able to "carry pictures around", mostly from her computer to the Jean Coutu so they could be printed. Simple enough.

She tells me she had had some difficulty when she last tried it, so, this being 2006 and plug-and-play no longer needs to be [air] quoted, I ask her to plug it in to see what would happen. She does and some "disk utility" thing seems to pop up. She might have clicked something that was bouncing in her dock or something (my attention was diverted for a second) but there it was. I recognized the window for what it was, and had her exit it since I also noticed a new icon on her desktop that looked like what you should expect from plug-and-play.

She double-clicks on said icon and, as expected, a window opens up with the contents of the removable device. Except there already files in there. A System folder, a Documents folder and some EXE. At first, I thought it might have been the case she picked up a used memory stick. By digging into the folders, I notice it's software that would most likely be bundled, such as Skype. I simply have her delete everything on the memory stick, except that the EXE in the root folder wasn't getting deleted because it was marked as "protected". "Weird, but not a problem", I tell her; "I'll just erase that when I try it in my laptop".

So she plays around for a bit, I show her how she can drag pictures from iPhoto into the window representing her memory stick and all goes well. I show her how she "ejects" the device before unplugging it (she remembered the scolding she got last time she didn't eject it first) and then I plug it in my laptop to make sure the pictures were indeed copied.

After plugging it in to one of the USB ports, I notice my computer taking a long time "installing" the new drivers. I thought that was odd as I frequently pop in my digital camera's SD card in the appropriate slot on the side of the computer and it works just as floppy disks did. Then I notice the set of "devices" being detected includes a "CD-ROM" (??) and this animated splash screen follows by saying that the launchpad is loading and it will appear in my system tray when it's done loading. Only it just hung there, most likely because I was running under a low-permission account; I kill the process and fire up my favorite file manager, only to notice there are TWO new devices showing up and one of them indeed looks like a CD-ROM drive.

I'm pretty sure I didn't miss a Slashdot announcement on compact disks being reduced to the size of a dime (mini-SD cards excluded) and then I realize what had happened; that EXE on the memory stick had been executed and had installed some "drivers" to be "helpful". Remembering why Sony sucks, I start to panic: what if I just got infected with some similar shit? Why weren't my permissions low enough to prevent this?? Why didn't I turn "AutoPlay" off earlier???

If you are still reading intently at this point, you are probably a fan of hyperlinked IT drama stories, and that's pretty sad. Just scan like everybody else and scroll already to the part about removing the damn thing, which has been placed just below this paragraph to ease you into this "scrolling to the interesting stuff" business.

How to remove the damn thing

Web searches for "remove driver u3 sandisk" didn't yield anything interesting except that I noticed lots and lots of people are trying to sell or review the damn things. Note to self: remember to repeat the search and click on Google's "Dissatisfied? Help us improve" link. The closest I found was this answer from the U3 support commonly asked questions:

6. I want to uninstall the U3 Launchpad from my smart drive

The U3 Launchpad is only supported on Windows XP and Windows 2000 operating systems and this restriction extends to U3 Launchpad uninstallers. A U3 Launchpad uninstaller is a software module that removes the U3 Launchpad and re-configures the drive to be a single mass storage USB drive. U3 Launchpad uninstallers are only available for and must be run on Windows XP or Windows 2000 machines. The locations for the uninstallers are provided here:
...followed by two links to the product pages that contain no actual uninstallers (surprise, surprise! - but I did find a link called Launchpad Removal) and the last one allows you to download a program that pretty much reformats your memory stick to remove all traces of the launchpad software on the memory stick.

How to remove the malicious, self-installed drivers

Errr... I'm not sure. Before I found the uninstall software, I tried uninstalling the drivers from Device Manager, but they would come back after plugging the stick in again, even though I was holding down SHIFT the whole time and had disabled AutoPlay for removable drives. Hmmm... Note to self: investigate how to enforce the "no autoplay whatsoever" group policy and file a bug report with Microsoft if that's not possible... no, if it's not super easy.. not that either; if it's not THE DEFAULT BEHAVIOUR on new installs.

The best way is probably to reformat the stick with another operating system, or one that's suitably configured to not get itself infected when plugging stuff in.

What's the problem, here?

You must work for SanDisk or be one of the programmers of U3. I would like to point you to the THE RISKS DIGEST. Read it for a while. Browse through their archives. Find the story from two or more years ago that talked about how easy it would be for malicious programs to automatically run when memory sticks are inserted into PCs and how it could be used for instamatic industrial espionage/sabotage and how this has led to organizations filling in all USB sockets with epoxy (or simply removing them from boxes) to avoid having to deal with the problem altogether.

Now that you are enlightened in the matters of responsible software engineering, go convince your superiors that you should ship BLANK MEMORY STICKS and an optional software CD instead, after releasing instructions or software for removing all traces of your drivers in my registry as well as proving to me, in some way or another, that you didn't also install a keylogger or other malicious software on my computer.

In Conclusion

I'm obviously not paranoid enough about checking my system for the presence of a rootkit infection or disassembling the software to confirm/deny my fears. Maybe someone else (with more free time than me) will come along and make a more informed determination. Oh, and I should stick to the point and stop telling long, boring IT drama stories.

Thursday, June 15, 2006