Testing my new 50mm f/1.8 lens and griping about the "Canadian Tax"

Frustrated by how difficult it is to take even passable handheld indoor pictures with the kit lens that comes with the Canon Rebel XTi (an EF-S 18-55mm f/3.5-5.6), tonight, on my way out from work, I decided to get Canon's 50mm f/1.8 EF lens. I didn't exactly splurge, at 120$ CAD, nevertheless I'm extremely impressed so far.

This captures a heckuva lot more light than the kit lens; I don't know why they don't package something like this with the camera, and sell you a cheap zoom lens later on if you need it...

What really gets my blood boiling though is the mysterious "Canadian Tax": the premium we pay for seemingly every imported product (even counting prices before any sales tax has been applied). It's all the more frustrating because no satisfying explanations have been offered: every time a retailer attempts to put forward a justification, it does so in condescending corporate-speak or advances arguments that are rapidly demolished by others in the know.

A few examples, starting with the very lens I bought tonight after shopping online and complaining about the local prices:

  Here in snowy Ontario United States
EF 50mm f/1.8 lens 120 CAD at Henry's 74.09 USD at Amazon.com
(73.79 CAD)
13" Macbook 1249 CAD 1099 USD
(1094.60 CAD)
The excellent Code Complete book by Steve McConnell 34.64 CAD at Amazon.ca 29.99 USD at Amazon.com
(29.87 CAD)


Although, to be fair...

Doctor's visit 0 Ha ha ha haa haa


Hiding .svn directories in the CruiseControl Status Page

If you've got a CruiseControl installation and you're anything like me, you won't be happy unless your entire CruiseControl setup is revision-controlled and lives in your subversion repository. (Here's a good article on how to get you started and auto-update CruiseControl's config.xml using bootstrappers.)

The Problem

There's a small problem, however, with your entire CC configuration living in source control, as you've realized if you've ever pulled up the status page and seen this:

Old and Busted

The status page blindly slurps up every directory under /cruisecontrol/logs, including the .svn directory. Whoops. I can see a few options:

  • Don't put the logs directory in source control, and remember to recreate it the next time we rebuild the machine.
  • Do an svn export to deploy the CruiseControl setup on our build machine.
  • Patch the status page code to not show the ".svn" entry.

I went with option 3.

The Patch (For CruiseControl 2.7.1, Binary Distribution)

Under $CC_INSTALL/webapps/cruisecontrol/, open the file index.jsp. It's a simple 4-line patch. Near the top, we will add 3 lines:

   final Date now = new Date();
   final String dateNow = dateTimeFormat.format(now);
+  final java.util.List ignoredLogDirs = Arrays.asList(new String[] {".svn", "CVS"});
   class SortableStatus implements Comparable {


Then, scroll down to line 460 and change it:

         else {
           String[] projectDirs = logDir.list(new java.io.FilenameFilter() {
             public boolean accept(File dir, String name) {
-              return (new File(dir, name).isDirectory());
+              return (new File(dir, name).isDirectory() && !ignoredLogDirs.contains(name));


Save, refresh the page to test your changes, and safely commit the new version:

New Hotness

Quick Note

Now, if we wanted to be really fancy and do the 100% solution, we'd fix the same thing on the individual project pages, in the left-hand panel where a drop-down menu allows navigating to other projects. To do this, however, we'd need to look at the ProjectNavigationTag source, and it's not in the binary CruiseControl distribution, so that's out of scope for today.

Western Digital My Book World Edition II Review

OK, that's a pretty retarded name, it should be called "WD 1TB NAS" or something. But anyway, this post exists to answer the question: how is it?


Shopping For a NAS

I recently started shooting in RAW mode and with every frame out of my DSLR taking ~9MB, I needed some safe storage options. My attention was drawn to the Western Digital My Book World Edition II (dear god the name!) because at 340$ CAD for a 500GB RAID-1 NAS device [or 1GB if configured as a spanning array], it's really cheap for what you get. I was almost put off by its dismal rating on Amazon (2 out of 5 stars), but from reading the reviews, it seems many are complaining about the poor sharing software, not the drive itself. [An aside: a hardware device with piss-poor bundled software? Gee, what a surprise! If you want to setup a streaming media server, just setup your own service on a real machine; that the masses would be crazy enough to expose a mostly closed machine, with upgrade availability at the vendor's discretion, to the public Internet forces upon me the sad realization of how little people understand or care about tech. Ahem. Revenons à nos moutons.]

The product page isn't particularly helpful, as it doesn't really tell you about the modes you can configure the device for, or the storage protocols it exposes.

Here's the info you need

  • 2 disks, 500GB each. ~455GiB available in RAID-1 mode, double that in spanning mode.
  • Comes configured in a single 1TB spanning volume. For RAID-1 mode, you need to switch the mode and let it reformat the drives, which takes a few hours. (I went to bed after 2.5 hours, I didn't get to see the process complete, but it was done the next day.)
  • Exposed Protocols: Storage is accessible through CIFS / SMB only. In fact, nmap tells us the only ports open on it are 80 and 139.


You'll want to configure it to use static IP settings rather than the default (acquire an address through DHCP). The setup can be performed through a web interface and it's pretty simple. Googling for how to mount it under Linux will point you to a few mostly unhelpful, ill-informed, blind-leading-the-blind-style forum threads [though to be honest I didn't peruse many of them], so here's what works. They seem to use Samba with CIFS unix extensions with everything owned by UID/GID 33, so I had to mount with noperm to get write access as an unprivileged user on my box:

mount -t cifs \

-o username=jp,password=,rw,uid=jp,noperm \

// ./wd


As an informal test, I generated a 100MiB file with dd and copied it to a Windows Server 2003 CIFS share and to the WD My Book's CIFS share, using time to measure real (wall) time. I'm only on a 100mbit switch, but I don't think the network is the bottleneck here:

  • To W2K3 server's IDE disk: 34.8s (2.9 MiB/s)
  • To WD My Book NAS: 23.4s (4.3 MiB/s)

Read speeds were very similar so I didn't include them. While not exactly blazing fast, it beats copying to other machines on the LAN, so it will do nicely as a storage box for RAW camera files. At that speed, you could probably even do HD video playback over the network, but I haven't tested that. There's an included disk with some sort of subscription service for remote access, and I have no desire to test that either.

All in all, don't let the negative Amazon comments spook you, it's a decent consumer-oriented storage box for the price.


The Wake Up Apparatus

My colleagues wouldn't exactly describe me as an "early riser". Some spring out of bed, fully energized, at the first ring of their alarm - my boss, for example, I've caught bragging about his ability to be up at 5:30.

As for myself, I appreciate the value of redundancy. Here's my setup; alas, I still don't wake up on schedule 100% of the time. Maybe we need a fourth stimulus?

Sequence is:

07:15 Halogen Floodlight
07:30 Alarm 1
07:35 Alarm 2

PS: I'm not kidding.


Oh baby, why don't you call? I'm here by the phone


Why is it so hard, when you promise to call, to actually do it? Oh, you break this promise all the time, and you survive year after year and get away with it because each and every last one of your competitors is equally bad. We care about customer service, but, one might suppose, not enough for it to actually make a difference.

Off the top of my head, here's a list of those who have failed.

Bell Canada: You promised to call me within 72h after opening a ticket to make an appointment for a tech to come out and test my dry loop line. Took you five days, and you never made an appointment, he just showed up à l'improviste at 10:00 AM on a Saturday morning. Lucky I was home.

Starbucks Canada: I called you to get a quote for how much it would cost to supply beans, an automatic coffee machine, maintenance, etc for an office of 50 people. You promised to hand off my info to the Ottawa account manager, who'd call me right back. It's probably been a year. Still waiting.

Purolator: You lost a really expensive package headed for me a few years back. Over two weeks, promised 3 times to call me back with updates, never managed to do it even once without me calling you.

Enbridge / DirectEnergy: You assured me the repairman would call an hour before getting to my home, so I could leave work and head home to let him in. I must be getting wiser - I didn't believe it and stayed home from work. Good thing, too, as the phone never rang before the guy showed up.

Philip van Leeuwen: You guys take the cake, you did it to me on two separate transactions. 2006: sofa delivery, instructions to call 60 minutes prior. I got a call on my cell from the delivery guys, waiting in front of my apartment, when no one answered the door. Rushed home fast enough. 2008: table delivery, 10am-2pm window, instructions to call 60 minutes prior. So of course they showed up at 9:30 without calling.

Apple Canada: You actually called me back when you said you would. En français impeccable. <3 Apple.