Monday, December 21, 2009

People think Y2K was a bust, thus proving it wasn't

I read an article recently about a significant virus or some other kind of security problem that people were being warned about. One of the comments on the article said something like "Yeah, well they warned us about Y2K as well, and that was a bust." I have read similar comments before and even heard similar sentiments from people I know. The truth is that Y2K was a real problem that would have caused real chaos if it hadn't been fixed in time. However it was fixed in time, and the fact that no significant problems occurred on January 1, 2000 is a testament to the amount of planning and work that went into fixing it. The fact that the general public thinks it was a bust proves that it was successful.

I know that there were Y2K problems in the database server that I worked on at the time (and continue to work on), and I know that they were fixed beforehand. Our problems were fairly minor, but I know of other problems that were not. Gail worked for a large steel company at the time (still does, kinda), and some time in the late 90's, they did some Y2K testing. They simultaneously reset all the clocks on all the computers in the plant to 11:30pm December 31, 1999 and fired 'em all up again. A few seconds after the clocks hit midnight, everything shut down. The problem was eventually traced to an exhaust fan deep in the bowels of the plant, which decided that it hadn't had any scheduled maintenance in a hundred years, so it shut down. All the systems that depended on that fan to be running also shut down, and the failure cascaded upwards until nothing was running.

If they hadn't done the testing, the plant would have shut down a few seconds after midnight on New Year's Day, and it might have taken them a couple of days to find the problem and a couple more to get a new fan installed. This is assuming that the fan was the only problem. When every hour not producing steel costs your company hundreds of thousands (if not millions) of dollars, a five-day outage would be devastating. Now think: what if that same brand of exhaust fan was used in your local power or water treatment plant? Could half your city live without power or running water for a week in January? What if a similar failure occurred in an air traffic control system? Or some safety-related subsystem in a nuclear power plant? Or the computer controlling the respirators in your local ICU?

The fan was fixed or replaced and the test was repeated. I don't know how many times they ran the test, but when the real December 31, 1999 arrived, the plant kept producing steel like it does through every other midnight. Many hours and dollars were spent in advance to make sure that the problem was solved before it happened. This was done in countless other factories, businesses, hospitals, airlines, and such (not to mention every software development company) so that when January 1, 2000 arrived, all the hardware and software would handle it.

The people who were expecting nationwide blackouts or planes to start dropping out of the sky at midnight were surprised to find that the number of actual problems was very small. Many people assumed that this meant the whole "Y2K problem" was overblown or some kind of industry hype. It wasn't. It was a real problem with an absolute deadline that could not slip. It was solved in time thanks to the combined effort of thousands of software developers (who, admittedly, created the problem in the first place) and IT professionals who put in a lot of effort so that people would never know there was a problem.

This, of course, is part of the thankless world that IT professionals live in – if they do their job properly, you don't notice them. You might even mistakenly think that they do nothing. Every morning, you arrive at work and check your email or internet connection and find that everything is working properly. How many of those mornings have come after nights where the IT staff were up until 4am fixing some network or hardware problem? I'm sure you don't know, but I'll bet that it's more than zero. Tell ya what – next time you see your sys admin walking through the halls at work, say thanks.

Tuesday, December 15, 2009

The big trade and the other big trade

This week was quite a landmark week in Toronto sports. Roy Halladay, quite possibly the best pitcher in Toronto Blue Jays history, and Colin Doyle, quite possibly the best player in Toronto Rock history, were both traded – Halladay left Toronto while Doyle returned. Halladay's trade was expected and, I suppose, logical, but saddening, while Doyle's return is a cause for celebration.

I am really going to miss Roy Halladay. He is the best home-grown pitcher the Jays have ever had, and rivals Roger Clemens for the best overall pitcher in Jays history. He won a Cy Young, and finished in the top five in Cy Young voting five times. His stats over the past few years have been staggering; according to Wikipedia, "From 2002-2008, Halladay has a .698 winning percentage, 113 wins, 9 shutouts, 37 complete games, and 7.14 innings per start, all of which are the best in the American League in that time frame." Think about it – no AL pitcher (and only one NL pitcher) won more games during that time span, and Halladay played for some pretty mediocre Blue Jay teams. And 37 complete games in seven years – nobody else even has 20. Last year Halladay had nine – the only other pitcher to have more than four was Zack Greinke, the Cy Young award winner, who had six.

But the stats aren't the whole story. Halladay is simply a joy to watch. I loved watching an opposing hitter look at strike three from Doc. Rarely did you see the batter argue that it wasn't a strike; more often, you would see the "Holy crap, that was a nice pitch" look on his face. Doc was widely known for his work ethic and his stamina (the complete games I mentioned above). He first came up looking like a star and then totally forgot how to pitch. He was sent all the way down to A ball, a move which would destroy the confidence (and likely career) of lesser mortals, but Halladay worked his ass off and used that opportunity to rebuild his delivery. When he made it back to the majors, he became untouchable. And in this era of an athlete's fall from grace becoming commonplace (Kobe, the Steroid Kings of baseball, even Tiger), you will never find a classier athlete than Doc anywhere. The deal isn't finalized yet, so it's not clear who the Jays are getting in return, but it looks to be at least three good prospects that the Phillies don't want to give up. I figure if Pat Gillick wants to hold on to them, they're likely players we want to have.

Colin Doyle was the Toronto Rock's best player for many years. He won five Championships with the Rock, was named Championship Game MVP three times, and League MVP once. He was first or second in team scoring every year that the Rock existed, including their year as the Ontario Raiders when Doyle won NLL Rookie of the Year. Almost three years ago, Doyle was inexplicably traded to the San Jose Stealth and the Rock's fortunes departed with him. Of the three seasons he was in San Jose, the Rock missed the playoffs twice, while the Stealth made the playoffs all three years. Doyle is a scorer – a powerful forward who can plow through defenders on his way to the net – but he can also be a playmaker. Indeed, Doyle hasn't finished with less than 53 assists since 2002, putting him in the top five every year. He, like Halladay, has a strong work ethic and is a fan favourite. He has the ability to make those around him better, and thrives under pressure. Doyle was the captain of the Stealth and is the logical choice to succeed Chris Driscoll as captain of the Rock. As good a player as Lewis Ratcliff is, Doyle is better and I think the Rock just made a big step forwards towards making the playoffs for the first time in three years.

Friday, December 11, 2009

A day like no other

Here are some things that happened to me today, all of which are out of the ordinary:

  • For various reasons, I left home almost an hour late. Actually, leaving late isn't all that unusual, but rarely that late.
  • Because the car had a flat yesterday and was in getting fixed, I drove the van to work.
  • The van doesn't have an iPod adapter, so I did not bring my iPod. Instead I listened to CDs (actual disks!) and the radio.
  • Because my TimCard is in the car, I used cash at Tim Horton's for breakfast.
  • A friend at work borrowed my kids' Lightning McQueen RC car last week - she made an awesome Lightning McQueen cake and used the car as a model. She returned it today so it was sitting on my desk all day.
  • I played in a band at work – me and two other guys played guitar, another played keyboard, and four or five more sang Christmas songs. I can count the number of times I've played the guitar in a band – counting today, three.
  • I had a full turkey lunch, complete with veggies, mashed potatoes, stuffing, gravy, and dessert.
  • It took me two hours and fifteen minutes to get home from work (in the van, without my iPod). This was obviously annoying but strangely, I wasn't as pissed off when I got home as I usually am after such a long commute.
  • I had a peanut butter sandwich for dinner.
  • I came home to an empty house. It was movie night, so Gail and the boys were over at the school. I went and joined them after "dinner".

All these weird things happened in one day. It seems very surreal when I look back on it.

Sorry, must cut this article short – I need to take the rhinoceros out for a walk.

Thursday, December 10, 2009

Driving in winter

If you're not from Ontario (I used to think it was just the Toronto area, but apparently Ottawa suffers from this as well), it might interest you to know that there are three types of winter drivers:

  1. "Oh, it's snowing. I guess I will slow down a little, put my headlights on, and pay a little more attention to the road and other vehicles. No need to panic."
  2. "Snow, schmow. I have a 4x4 and winter tires, so I can go as fast as I want, regardless of the weather or traffic conditions, and I will always be able to stop or turn whenever and wherever I want."
  3. "OMFG there's like little white thingies falling from the sky! I better slow down to like half the speed limit just in case my car slips on one and I spin out. I knew this guy once? In school? Who was driving? In the snow? And he spun out? And he like died and stuff! Oooh, I know! I'll drive slow in the fast lane to force other people to slow down too – just to make sure that nobody else gets hurt by these White Flakes of Death. Stop honking at me people! I'm trying to save your life! And you're making me nervous! I better slow down some more."

Thankfully, the majority of drivers are in group 1. But considering this is freakin' Canada, there are a surprising number of people who seem to forget everything about driving in snow the moment the last flake melts in the spring.

Wednesday, December 02, 2009

A Kind of Magic

My sister Trudy is a little over two years my junior. As kids, we got along pretty well. We had our share of physical fights – I remember giving her a bloody nose once while waiting in the car for our parents to come out of a store – but they were usually pretty minor. There was a while during our teen years where we didn't get along all that well, usually because I stuck to the rules and didn't get in trouble while Trudy rebelled and did, but she also had a lot more fun on Saturday nights than I generally did. But by the time we hit our twenties, we were buds again and we remain friends now.

When we were kids, we liked to perform "shows" for my parents, as many kids do. Mostly they'd be puppet shows, where we'd move my dresser out a couple of feet from the wall and stand behind it - it was too hard to kneel down and perform with the puppets over our heads, so we just stood and said "pretend you don't see us". Occasionally there were "gymnastics" shows, where we'd do tumbling and tricks, which usually involved running across my room and diving onto the bed. But at least once there was a magic show, where Trudy and I performed some amazing feats of magic to the delight of my parents. Well, "delight" may be a bit strong, but they did laugh.

I'm sure most of the tricks we did were card tricks that were set up beforehand – rather than "pick a card, any card", it was "pick the top card, look at it, and put it back here". I don't remember any of the tricks in any detail, except a sleight-of-hand trick that ended up being the last trick of the show – it wasn't the finale, but it was the end of the show nonetheless. I had been teaching Trudy for weeks (well, at least a day or two) (or maybe half an hour) how to take a small item, roll it around in her hand, tell the audience she is about to make it vanish, and casually slide it up her sleeve. She could then show them her empty hands and bask in the crowd's wonder and admiration. She wanted this to be her trick, not one that we performed together, so she really worked at it, concentrating on putting the item – a plastic letter with a magnet in the back for sticking to an easel – up her sleeve as smoothly as possible.

The show was moving along nicely, and it was soon time for Trudy's disappearing letter trick. I stood to the side while Trudy stood in front of the rapt crowd (mom and dad), and took out her magnetic letter. She carefully showed them the letter, and then put her hands together, magically rolling the letter between her hands. She then said in the standard mysterious voice used exclusively by magicians:

I will now make this letter go up my sleeve.

I don't know which one of us shouted first – Trudy because she realized what she had done, or me because she'd messed up the trick I'd spent so long teaching her. Our parents, admirably keeping their laughter under control, tried to tell her that it was OK, she could just keep going, but Trudy was inconsolable. I remember being angry with her at first, but I have a vague feeling that I quickly came around and agreed with my parents that she should just keep going and forget about it. Of course she didn't. The show pretty much ended there, as Trudy left the "stage" crying.

To this day, Trudy hates magic shows.

Sunday, November 29, 2009

Star Wars In Concert

I've been a Star Wars fan ever since I first saw the first movie during the summer of 1977. When Gail and I started dating in early 1992, I found that she too was a big Star Wars fan, and immediately decided to marry her. Well, maybe not that second, and that may not have been the primary reason, but it was a significant contributing factor. Consequently, our kids are now big Star Wars fans as well, so when my friend Lisa sent me a link to a stage show called Star Wars In Concert [warning: web site plays music with no warning], I was immediately interested. When I showed Gail and the boys the trailer on the web site, they were excited as well. The show was this past Thursday night at the Air Canada Centre in Toronto, and we were definitely not disappointed.

Star Wars In Concert The show is a montage of clips from all six Star Wars films on a three-storey crystal clear hi-def screen, behind a full live orchestra performing the music from the films. For some of the music from The Phantom Menace, there was also a full choir behind the orchestra. What's more, Anthony Daniels, the actor who played C-3P0 in all six films, introduced each segment, and James Earl Jones, the voice of Darth Vader, provided some voice-overs. When I read that Anthony Daniels would be narrating, I expected that he had recorded some stuff that would be part of the show, but was surprised that he was actually there. He only broke into the C-3P0 voice once, though his natural voice is similar enough anyway.

The music of Star Wars is not just pleasant sounds in the background of the movie; it is an integral part of the whole experience. The "Imperial march", Luke staring out at the twin suns of Tatooine, the Jawa theme, the slow acoustic guitar when Vader/Anakin dies, Darth Maul's haunting choir, even the cantina band songs are all so powerful, so meaningful, as part of the film experience that Star Wars without the music would be just another pretty decent sci-fi movie. My whole review of this show can be summed up in one sentence: Watching the movies on that screen with the music being performed live, right in front of you, was just unbelievable. The orchestra was amazing, and there were a couple of cameras on them as well, so we got to see close-ups of some of the performers in between movie clips. As a music fan and a sort-of musician myself, I love watching world-class musicians play, and these are some of the best. Daniels was very good with his introductions as well, even coming out at the end in a Leafs jersey with his name on the back. I'm sure he wore a Habs jersey in Montreal and a Flyers jersey in Philadelphia, but the crowd still loved it.

Gail is still kicking herself for not bringing our camera, but luckily Lisa brought hers so she and Gail took a bunch of pictures, one of which you can see above. Before the show, there were some memorabilia booths set up around the ACC, containing props from the films. We saw a Naboo backdrop next to a Queen Amidala costume, though the crowds around them were so thick that we couldn't get close enough to take a picture – and since we hadn't seen Lisa yet, all we had was my silly little camera phone. As expected, there were also little booths selling trinkets and shirts and stuff. I don't usually go for the souvenirs at these shows since they're way overpriced ($10 for a tiny little lightsaber thing that glows – you can probably also buy them at the dollar store), but we got the boys a $40 t-shirt each because we figured the show was so unique that they are unlikely to get the chance to see anything like it again. Plus the designs were cool – one is Darth Vader's head made out of musical instruments, the other is Boba Fett's head made out of musical notes and symbols.

Tickets were kind of expensive but it was a very unique show, and the boys loved it as much as we did. If you're a Star Wars fan, and you get the chance to see this, do it.

Sunday, November 22, 2009

Chrome vs. Firefox revisited

Attention Facebook readers: You might want to click the "View Original Post" link at the bottom of this note. Facebook sometimes messes up the formatting.

Back in May 2009, I wrote an article comparing the Chrome and Firefox browsers. Since then, it has been by far the most viewed page on my blog. From the day it was posted until today (almost six months), that particular article has accounted for about 80% of all pageviews on my blog. I've had days where 110 people visit my blog and 103 of them view that page and that page alone. I use mybloglog.com to track which pages are viewed the most and how people find my blog, and here's a piece of the results for one day. Note that this is a fairly typical day. I don't know why mybloglog can't collapse all of the "chrome vs firefox" entries into one.

bloglog

Anyway, after about six months of using Chrome pretty much exclusively, I decided to revisit this comparison and see how much of it is still valid. To that end, I reset my default browser back to Firefox for a week.

Note that I am comparing the "generally available" versions of Chrome (3.0.195.27) and Firefox (3.5.5), not development or beta builds.

Advantages of Chrome

  1. Chrome starts up almost instantly, while Firefox takes several seconds before it's ready to go. Both are still faster than IE for me.
  2. Chrome updates itself completely silently. Firefox tells you there's an update available and asks if you want to install it. Actually doing the install is pretty painless, but it asks you if you want to install the update when you start the browser, which is usually when you are trying to do something with it. Frequently I don't want to wait while it installs an upgrade and then restarts itself, so I end up trying to remember to do it when I'm done. I have no idea when Chrome updates itself, because it does it silently in the background and then the changes take effect the next time you shut it down and start it again.
  3. Chrome searches your bookmarks and previously visited sites extremely quickly, so when I start to type a URL, it comes up with probable matches really fast. For example, I don't have twitter.com bookmarked, but I can get there using <CTRL-L>tw<ENTER> because by the time I hit enter, Chrome has searched my previously visited sites and autocompleted "tw" to "twitter.com". Until I started using Firefox again, I did not realize how cool this feature was and how quickly I came to depend on it. I would visit a site and not bookmark it, and then the next day if I wanted to find it again, I could type whatever part of the URL I could remember into the address bar and it would just find it for me.

Advantages of Firefox

  1. Chrome still doesn't have plug-in support. If this isn't number one on the "must get this done" list for Chrome, someone needs to be fired. Yes, I know this is at least mostly working in the dev builds.
  2. When Chrome isn't going really fast, it seems to be going really really slow. I had a situation on my computer recently where everything seemed to be taking forever – compiling was taking 20-30 seconds per file (rather than the <1 it should take), and a test that was running at the same time was taking minutes rather than seconds. I looked at the task manager, and the two processes taking up the most CPU were Chrome and our stupid virus scanner that grinds my machine to a halt and IT won't let me configure it despite the fact that it prevents me from doing my job efficiently (but that's a rant for another day). I shut down Chrome, and within a few seconds everything sped up noticeably (though not as much as it should have because of the stupid virus scanner). I am going to keep an eye on this, but it may be a showstopper.
  3. Perhaps related to the previous problem - every now and again, usually when my machine is very busy, I enter a URL in the address bar, hit enter, and nothing happens. I have seen pauses of 30+ seconds before it even changes the status to "resolving whateverhost.com". Firefox doesn't have these complete blackouts, but just goes really slow in those situations. I rarely see this or the problem above (#2) at work, but it happens a lot at home – I think it may actually be related to the VPN I use.

Dead Heat

  1. When I first started using Chrome, it was quite a bit faster than Firefox, especially on javascript-heavy web sites. But when I switched back to Firefox for this comparison, I didn't notice much of a difference in speed, certainly not enough of a difference to consider it a Chrome advantage.
  2. Bookmark support has been improved in Chrome to the point where this is no longer an advantage of Firefox. Firefox supports keymarks which Chrome does not, but Chrome's searching of bookmarks is so fast this is hardly necessary, other than the magic %s searching thing that Firefox supports. XMarks support is still missing though (it's in beta).
  3. On a site with lots of Flash (i.e. games), sometimes everything seems to slow down to a crawl after 10-15 minutes or so. Sometimes it speeds up again after a while, but other times I have to just give up on the game. This happens in both Chrome and Firefox. Don't know about IE.

The Result

For now, I'm going to stick with Chrome, but as I said above, I'm going to keep an eye out for machine slowdowns and see if closing Chrome fixes them. If that continues to happen, I will have to go back to Firefox.

I kind of miss the plug-in support from Firefox, but Chrome is still pretty peppy and quite honestly, I feel like Firefox is starting to pick up the bloat that IE has had for years. Chrome still feels small and sleek.

I'm surprised that adding plug-in support is taking as long as it is, but I also understand that this basically amounts to allowing the general public to add executable code to your application on the fly. Getting this right and making it usable and flexible while remaining robust is difficult.

Wednesday, November 18, 2009

Best. Workout music. Ever.

I went for a run this morning, and my iPod played an amazing selection of music for my listening and distracting-me-from-thinking-about-the-pain-in-my-legs pleasure. It started with Alanis Morissette's Thank U, which is not a bad song, but I skipped it because at least half of my runs start with that song. It seems like the randomization of either the Nano or the Nike+ software really sucks for the first song – the first song is always one of about five, and it's mostly Thank U. The rest, however, was great:

  • Neon Crossing, Our Lady Peace
  • Load Me Up, Matthew Good Band
  • Down to the Waterline, Dire Straits
  • Coming Home, The Tea Party
  • Beautiful People, Marilyn Manson
  • Gravity, Max Webster
  • The Trooper, Iron Maiden

Beautiful People is a pretty good song, but I don't know much Marilyn Manson, so you can take them out of the equation. Other than that, each and every song is among my top 3 favourite songs by that artist.

Monday, November 16, 2009

C/C++: Five Things I Hate About You

Jeff Attwood said recently in a StackOverflow podcast that if you can't think of five things you hate about your favourite programming language, then you don't know it well enough. I started writing C code in about 1988 and C++ in about 1992, so I think I can say I'm familiar with them. I know that C and C++ are different languages, but there's enough overlap that I'm going to group them together. Here are five things I hate about C and C++.

  1. Lack of portability. Pure C or C++ code is generally portable, but we continually run into thing like "standard" libraries that aren't standard. Libraries for things like file I/O and threading can be vastly different on different platforms so if your application has to run on multiple platforms, you have to write the same code several times in slightly different ways. There are functions that are defined in a different header file on one platform than another. Preprocessor macros that have a leading underscore on one platform and not on another. There are functions that exist on one platform that don't exist – or work differently - on another. The C language has been around almost forty years, and we still have to have #defines in our code to cover stricmp on one platform and strcasecmp on another. We don't use exceptions in our code because different compilers deal with them differently, and we just started using templates because all the compilers we use finally support them in a similar enough way that they're usable. I suppose technically these are problems with the implementations rather than the language itself.
  2. Undetectable number errors. How many times have you done x-- on an unsigned type only to find that you "decremented" it from 0 to 4294967295, and everything went haywire? Doing this is completely legal and the only way to prevent it is to manually check for 0 before you decrement, and make sure you do it in a thread-safe way. PITA.
  3. Lack of memory checking. If you allocate fifty bytes and then access fifty-one of them, that's totally fine. Accessing that fifty-first byte may work, giving you random data, or it may crash. Writing that byte may work, overwriting some other variable and creating a terribly hard-to-find bug, or it may crash. Or even worse: it may overwrite some unused piece of memory, thus having no effect, most of the time (i.e. during development and testing) but then crash or overwrite memory occasionally (i.e. in customer deployments).
  4. Braces aren't required for if statements. (and while statements, and for statements) This is just asking for trouble. I've trained myself to see and fix things like this:
    if( condition )
    statement 1;
    statement 2;
    statement 3;

    and some editors and IDEs will automatically re-indent, making the problem obvious, but you can still miss them sometimes. In my code, I almost always put braces anyway, except for the occasional thing like this:
    if( condition1 ) continue;
    if( condition2 ) break;

  5. Named structures and typedefs are different. This has confused me for years. You can have a structure with a name, and also typedef it to another name, or you can typedef a structure without a name. For example, all of these are legal:

    // defines a structure called myStruct. You have to type "struct myStruct"
    // to use it
    struct myStruct {
    int a;
    int b;
    };

    // also defines a structure called myStruct, but you can use "myStruct"
    // as a type now. Or you can continue using "struct myStruct". The two
    // names do not have to be the same.
    typedef struct myStruct {
    int a;
    int b;
    } myStruct;

    // No different from the second example
    typedef struct {
    int a;
    int b;
    } myStruct;

    The second and third examples are exactly the same, though I remember having to go through a bunch of code and change typedefs of the third type to have a name after struct because the debugger (CodeWarrior, if I remember correctly) didn't understand them unless the struct had a name.

Monday, November 02, 2009

Halloween at Fern

Fern Resort is one of our favourite vacation spots. Is it as luxurious as a Carribbean all-inclusive or a Las Vegas casino resort? Well no, but the food is always great, the people are nice, there's lots to do, and most of all it's comfortable. We all know the place well enough and we feel safe enough there that we can give the kids more freedom than they're used to, which makes them happy. It also means that Gail and I have some more freedom as well. We've been there every summer but one in the last ten years, and our week at Fern is something we all look forward to all year. We also went once during the winter, which was also a lot of fun.

This past weekend we tried something new – Fern in the fall. They had a special deal on for Halloween weekend where both kids were free, and they were also discounting the prices by 10% or so, and because we've been there so often in the past, we get an "alumni" discount as well, so it ended up being quite reasonable. They also had some special Halloween things happening, including a costume contest, so Gail got quite excited about that and spent part of a couple of weeks making costumes for the four of us.

The middle of summer is obviously their busiest time, and that's when we generally go. When we were there in February a couple of years ago, we were amazed at how different it was when there were only about 70 guests instead of the usual 370 or so. This time, we arrived on Friday just in time for dinner and when we walked into the dining room, we were stunned by the number of tables set – maybe ten. We found out later that the actual count of guests for the weekend was 35. We asked how that compares to a normal Halloween weekend, and Mike the sports director said that they usually get around 100-120 people. He figures that the economic downturn is responsible for some of it, plus the fact that Halloween was on the Saturday night caused some people to stay home so they didn't miss trick-or-treating. The lack of people made things much quieter than we're used to at Fern. I think we might have been the only guests staying in the Main Inn - although that had its advantages too. We asked on arrival if one of the big suites was available and one was (I suspect that they both were), so they upgraded us. The fact that it was a suite was very nice, and while the balcony overlooking the pool would be great in the summer, we didn't spend much time (read: zero) there this time. There were a few programs that ended up being cancelled because nobody showed up, so the sports director and youth director had more idle time than they are used to. It seemed that our family and one other family were involved in the programs, but I don't know what the rest of the guests did all weekend. Other than bingo, the dance on Saturday night, and meals, we didn't see them at all.

One of the neat ideas they had was a pumpkin carving contest – there was a pumpkin on our table when we arrived, and we had all day Saturday to carve it in whatever way we wanted. They awarded three prizes: most humorous, most creative, and scariest. We brought a bunch of templates and idea books and such, but we ended up just drawing a face freehand. We alsoOur pumpkin checking out the kids menu forgot to bring all of our pumpkin carving equipment, so we had to borrow a steak knife and a couple of spoons from the kitchen. Gail had the idea of painting the pumpkin black so that the face would really glow when lit, so we brought some spray paint and after cutting out the face, we went outside and painted it on the grass (we'll have to check next August to see if there's still a black spot there). The small crowd worked to our advantage, as we won the scariest pumpkin award, which was announced at dinner on Saturday night. We were happy enough with bragging rights (though bragging rights among people you don't know aren't worth much), but the dining room manager came around and told us that our prize was a bottle of wine plus a chocolate monkey (an ice cream drink with chocolate and banana) for each of the kids. When we told them we didn't drink wine, they brought us a cocktail each – a Caesar for me (thanks for introducing me to those Jeff!) and a Smirnoff Ice for Gail.

The most popular non-food-related event was bingo, which happened a couple of times on Saturday and once on Sunday. Gail won a $5 gift shop voucher at one game, and Nicky won twice – his prizes were vouchers for Fern t-shirts.

We began brainstorming costume ideas a month or two ago, and the boys kept returning to Harry Potter. I half-jokingly said that one kid could go as Harry and one as Ron, I could be Dumbledore and Gail could be McGonagall. Gail thought about it for a minute and decided that it wouldn't be all that hard to make robes for us, so over the three weeks before Halloween, that's what she did (though she lost a week of that with a nasty cold). Saturday night after dinner we all got dressed and went over to Fireside (the building next to the Main Inn), where they had set up a haunted house / trick-or-treating area. About half of the rooms on the second floor had ghouls, goblins, or witches in them, scaring kids (and me in one case) and handing out goodies. Some of the goodies were your standard mini chocolate bars and such, but there was also some stuff from the bakery – some really good iced shortbread cookies and a big cupcake. Obviously the kids ended up with far less candy than on a typical Halloween, but they didn't seem disappointed. We were also fine with it, since we normally end up throwing out at least half of what they bring home because they forget about it by mid-November. Our wizarding family

After the trick-or-treating, they had a costume party and dance over at Mary Lou's, where Gail and I danced (I was very warm in the Dumbledore beard and hair, so I didn't dance much – and had to pull the beard down off my face to drink my beer), Nicky danced a little, and Ryan stood off to the side - he kind of wanted to dance but was just not able to pluck up enough courage to actually do it. He never actually said any of this, but I know that's how he felt because that's exactly how I would have felt when I was ten. The time came to hand out the costume award and once again, they had prizes for different categories. This time it was most creative, scariest, and overall best costume. Most creative went to "Mother Nature", a young girl who had stuck little paper butterflies and birds and (real) branches and leaves all over herself; a very clever costume. "Scariest" wasn't that scary but was also creative – a boy of about twelve who made himself into RoboCop with lots of cardboard, duct tape, and flashing lights. The award for best overall costume went to a strikingly handsome man dressed as Professor Dumbledore. (sigh) No, there wasn't another Dumbledore there, I am talking about myself. My prize was another Fern t-shirt voucher. I got the t-shirt (actually upgraded to a long-sleeved shirt) but Gail really deserves all the credit – she made my robes and hat (as well as the robes she wore), bought the hair, beard, and glasses, and even coloured my eyebrows – all I did was wear it. And as cool as my costume was, I think Gail as McGonagall was even better because she looked the part (though much younger) more than I did, and didn't hide behind a fake beard.

So we were at Fern from Friday dinner until Sunday lunch and won three t-shirts, $5, and a round of drinks. And we had great food all weekend, and stayed in the nicest suite in the place, and played some games (throwing eggs at the archery targets was particularly fun), and for all that we paid about 25% less than the normal price and the kids were free. A great weekend all around.

Thursday, October 29, 2009

Tool review: Microsoft Network Monitor 3.3

I have used Wireshark for packet sniffing and analysis for a number of years, starting back when it was called Ethereal. A little while ago I was using it to look at broadcast packets that our clients send out, and decided that it would be great if Wireshark could interpret our wire-level protocol and display meaningful information about the packets. After a bit of searching, I found that you can add plug-ins to Wireshark, allowing you to do whatever you want with the packet data. I found some detailed instructions on how to do this, beginning with:

  • Install a version of the Microsoft C/C++ compiler
  • Install a particular platform SDK
  • Install Cygwin
  • Install Python
  • Install Subversion
  • Get the Wireshark source
  • Configure the source
  • Build Wireshark

Once you're done all that, you can start looking at building your plug-in in C. I set up a Windows XP VM and spent a day or two doing all of this, but never got to the point of actually creating the plug-in. A few days later we had a team status meeting, during which I mentioned this project. A colleague, Peter, asked if I had looked at Microsoft NetMon, saying that he believed it allowed you to add your own parsers as well. I downloaded it and took a look. Thank you Peter, for saving me days, if not weeks of development time. In less time than it took me to set up the VM in preparation for writing a Wireshark protocol analyzer, I had analyzers written for the majority of both our UDP and our TCP protocols.

Writing parsers

As a packet sniffer, NetMon is not really much different from Wireshark, though I find the interface a little more intuitive. This might be because I'm running on Windows, and Wireshark has always looked to me like a Unix program that has been ported to Windows rather than an application written for Windows. They both support both capture and display filters. NetMon has colour filters as well – particular packets or conversations can be coloured based on the filter results. You can view packets as they are captured, save them to a file, and load them back in again later.

But writing a parser is orders of magnitude easier than writing a Wireshark plug-in. You simply tell it what ports your protocol uses and what the protocol looks like in a proprietary language (called NPL – Network Monitor Parser Language) that's vaguely C-like but very simple. Some properties of this language:

  • it handles bitfields, ASCII and Unicode text, and binary data, as well as various types of numeric values (8, 16, 32, or 64 bits, integer or floating-point, signed or unsigned, big- or little-endian)
  • you can define your own data types
  • there are a number of special data types built-in; if your packet contains a 32-bit IP address, for example, you can just specify it as IPv4Address and it will get interpreted and displayed as expected
  • you can make structs which group pieces of the data together, and arrays which hold collections of the same type of data
  • you use while loops and switch statements to modify behaviour. For example, your protocol might have a byte that indicates the type of packet, and then the structure of the packet depends on the value of that byte. No problem.
  • you can indicate both storage format and display format, so if you have a byte that's 0 for a request and 1 for a response, you can display the words "request" and "response" rather than just 0 or 1. The rest of the code can reference this value by name and get 0 or 1. The display string can be as complicated as you want, even referencing other pieces of the packet by name.
  • it supports conversations, and there are variables that have global, conversation, packet, or local scope

The help file installed with the app describes each of the language features, and I found a document that describes an example protocol in great detail.

Drawbacks

The biggest drawback of this tool is the parser editor. It's not very powerful – it makes notepad look feature-rich. I use Ctrl-Backspace (delete previous word) and Ctrl-Del (delete next word) a lot, since it's supported in Windows Live Writer, Word, and emacs, but support is spotty – sometimes it works, sometimes it deletes the wrong word.

The main feature it's missing is undo. It doesn't even have a single-level undo. If you hit backspace one too many times, you'd better remember what that last character was because it's gone. An editor that doesn't support undo is pretty much unacceptable in this day and age, and I lost data more than once because of it. Once you realize that you can't undo mistakes, you end up clicking Save a lot more often, and do things like copy the file to a backup file before you make big changes. I checked my files into source control and started checking them in periodically, which is a good idea anyway, but if the parser stuff wasn't so damn cool, the lack of an undo feature might be a showstopper. Emacs supports Ctrl-A and Ctrl-E to get to the beginning and end of the current line respectively, and sometimes I instinctively use those keystrokes in editors where they're not supported, like this one. Unfortunately, Ctrl-A here means "select all", so doing that and then typing something is disastrous because there's no undo, so you just lost your entire file. You need to quit the file (do not save!) and then reload it, losing whatever changes you had made. Even a single-level undo would save you from that.

The compiler has some problems as well – there were a number of times where I got compilation errors that were badly written or vague enough that I didn't know what the problem was. It would point to what looked like a valid statement and say that it was unrecognized or invalid, and it turned out to be because of a missing (or extra) semi-colon on a different line, or a language rule that wasn't obvious.

Once you've made the changes to your parser, you have to save it and then click "Reload Parsers", which reloads all 370+ parser files it knows about. Surely there could be a way to just reload the one that I changed? Now, there are dependencies between files, so changing one file might require that a different file be reloaded, so reloading them all is the safest but it's slow. Ideally, the tool should be able to figure out the dependency tree and only reload files that depend on the ones changed. And the tool should prompt me to save if I have an unsaved file and I click "Reload Parsers".

If anyone from the NetMon dev team reads this, here's a bug report: If I load a parser file, then paste some code into the file, it's not marked as "dirty" until I actually type something. Also, if I load a display or capture filter from a file, this generally means "replace what's in the textbox with the contents of the file", not "insert the contents of the file into the textbox at the current cursor position". I can see how that feature might be useful in combining filters, but it should not be the default.

As powerful as the NPL language is, there are things it simply can't do. In my case, some of our packets can be encrypted or compressed, but the NPL language can't decrypt or decompress them. It would be nice to be able to write a small plug-in that could do these types of things, but it's not supported. The Wireshark approach would work for that.

Experts

For those analysis needs that are not satisfied by parsers, NetMon supports things called "experts", which are external programs that can read the data from a capture file and analyze it in whatever way it wants. It sounds similar to a parser except that it's written in C or C++ (or C#, I think) and has the limitation that it only works on saved files, so you can't look at the results in real-time as you can with a parser. I've stared to write one of these to solve the decompression/decryption problem I mentioned above. There doesn't seem to be a way to decrypt the data and write it out into a new capture file, but I can at least decrypt, parse, and display the data. I can reuse the parser code I've already written, since the program is dealing with pre-parsed information, but I have to grab each field individually and display it, so I essentially have to rewrite all the display code in C.

Summary

Overall, this is a very cool utility and has replaced Wireshark as my packet sniffer of choice. The documentation is pretty thorough and it includes some good examples. If all else fails, the parser code for all the other supported protocols is right there. There is a help forum to which I've posted a couple of questions and gotten quick and helpful responses. I wrote a while ago about how cool Windows Live Writer is, so kudos to Microsoft for yet another cool utility.

Amazing stats of the day

Before their win over Anaheim on Monday, i.e. over the first eight games of the season, covering almost 485 minutes, the Toronto Maple Leafs had played with a lead for a grand total of six minutes.


The last time Mariano Rivera gave up runs in different innings in the same game was June 1999, and he has never done it in the post-season (ref: Ed Price). His career postseason stats are unbelievable:

Division Series: 34 games, 51.1 IP, 0.35 ERA, 0.58 WHIP
League Championship Series: 30 games, 45.2 IP, 0.99 ERA, 0.83 WHIP
World Series: 20 games, 31 IP, 1.16 ERA, 0.97 WHIP.

Sure, he gets worse as the post-season goes on, but his "bad" is everyone else's "amazing". It's people like him, Andy Pettitte, and Derek Jeter that make it harder and harder to hate the Yankees. But I'm doing my best.

Tuesday, October 20, 2009

PMH 5K Run 2009

Last year, I participated in my first 5k run, and almost killed myself doing it. This year, I decided not to let that happen again, so I've been training since July. As a result, not only did I feel fine the day of and the day after the race, but I beat my time from last year by almost five minutes. I finished 5km in 27 minutes 18.5 seconds, a pace of 5'50"/km. I was the 458th person (out of 2552) to cross the finish line, though that's misleading because some people that finished ahead of me may have had a slower overall time. Unfortunately, that's the way they order the finishers, so in terms of absolute time, I don't know where I placed. I was 284th out of 930 men. They originally listed me as "Male under 24", so my ranking there is meaningless as well, but doing the math myself, 25 out of 87 men in the 40-45 group finished with faster times than mine (one beat me by over ten minutes). These numbers assume that most people are listed in the right groups, though Nicky and both of my parents were also in the wrong groups, so who knows.Me and the boys with our medals (staring into the sun) I've emailed the people who do the stats, and they have already replied saying they can fix them, so I'll check again before I post this and see if it's been updated. Update from next morning: They've moved me over to the right group, but some other things must have changed too, because now I'm ranked 30th out of 88 men 40-45. Whatever.

It turns out that I wasn't training quite as thoroughly for this race as I thought I was. I used my Nike+ iPod and it decided that the route was 5.49 km. Since I finished in 27'18", that gave me a pace of 4'58". I'm assuming the route was actually 5 km even, so I guess my iPod measures a bit long. It looks like those runs I did that were reported as 5.2 km weren't even five and the 4.4's were probably about four. The iPod reported after the race (with a message from Lance Armstrong!) that this was my longest workout to date, which means that none of the runs I did in practice was as long as the real race. Apparently the iPod gives you the ability to recalibrate it, so right after the race I should have selected "Calibrate" and then told it that I had just run 5.0 km, but it's too late now. Sometime in the near future, I'll have to drive around the block and measure exactly how long it is, and then run it and do the recalibration. Regardless, it was close enough that it didn't really matter. I wasn't in pain at the end of the race – I even had enough left in the tank to increase my pace (not quite sprint, but I definitely ran faster) over the last 50 metres or so.

This year Ryan and Nicky joined in the fun as well (Gail was away at a scrapbooking weekend). They walked the course with my parents and finished in about an hour. They seemed pretty excited about being part of the team, and having special t-shirts, and the sensor on their shoe, and especially getting a medal at the end (Nicky said that the 5K on the medal means that it was 5 karat gold).

To all of those who sponsored me, a huge Thank You! I raised over $300 myself, and our team raised over $3000 for gynecological cancer research at PMH.

Monday, October 19, 2009

I Believe in Our Saviour, The Brian

So the Leafs haven't started the season so hot. In fact, they can't really be any colder than they have been. Every part of the team is having troubles, and word on the street is that this is the worst team in the league, which means that the Leafs might have sent Boston a first overall draft pick in exchange for Phil Kessel. There's been a lot of talk about some of Burkie's deals, and the fact that he is so obviously building a team full of fighters and tough guys. But surely there's a method to his madness: his teams in the past have always had tough guys protecting his skilled players and allowing them to do their job. Nobody was going to run Teemu Selanne because they knew Chris Pronger or Brad May or someone would be on top of him in a second. This gave Selanne a little extra space, which he used to his advantage. That's the strategy that Burke is using in Toronto as well – get a bunch of tough guys to protect the skilled players. Of course the problem is that there are no skilled players to protect. That's why Colton Orr is only averaging 7 minutes a game – he's got nothing to do, so he's always hanging around Phil Kessel's house.

But if you are planning on purchasing a fifty-karat diamond, wouldn't you get the state-of-the-art security system installed first? You're not going to buy the diamond and then leave it on the kitchen table until the security system gets installed a week from Tuesday. You make sure that the security system is in place and working flawlessly before you go pick up the diamond. So when Phil Kessel returns and Burkie trades Lee Stempniak, Jason Blake, and a third round pick to Washington for Alex Ovechkin, he's already got the protection in place.

Of course, that trade isn't going to be quite that easy. Might have to bump the draft pick to a second-rounder.

Please note that this article might be one of the only ones written this season about the Leafs and Brian Burke that didn't use the word truculence once. Go me.

Saturday, October 17, 2009

Top Ten Rock Cover Songs

I had fun putting together the list of Top Ten Rock Instrumental Songs a little while ago, so I decided to do it again. This time, I'm listing artists that took a good song and did an great cover. Again, these are in no particular order.

  1. Manfred Mann's Earth Band: Blinded by the Light. The Springsteen song is all right, but Mann's cover blows it away. I wrote about this song a few years ago.
  2. Dream Theater: Funeral For A Friend / Love Lies Bleeding. I love the original Elton John version as well but Dream Theater's live version on "A Change Of Seasons" is excellent. They also do a great version of Deep Purple's Perfect Strangers.
  3. Aerosmith: Come Together. They didn't make vast changes to it, but they managed to make it sound like an Aerosmith song. If only we could forget the terrible movie it came from.
  4. The Ataris: The Boys of Summer. Make no mistake, the Don Henley original is one of my all-time favourite songs, but I really like this cover. Weird – a one-hit-wonder band, and the one hit wasn't even their song.
  5. Creedence Clearwater Revival: I Heard It Through The Grapevine. The original is a Motown classic, but the CCR version is a rock and roll classic – eleven minutes long with a number of guitar solos.
  6. Van Halen: You Really Got Me. I was a huge Van Halen fan back in the 80's, and now whenever I hear the Kinks original, I just think "how lame". Van Halen actually did a number of pretty good covers in the David Lee Roth days (i.e. back when they were good) – Where Have All The Good Times Gone (more Kinks), Dancing In The Streets, Happy Trails, Ice Cream Man, You're No Good, Big Bad Bill, Oh Pretty Woman.
  7. Metallica: Turn The Page. I'm a fan of Bob Seger, and this is one of his best songs, but Metallica's version kicks serious ass.
  8. The Tea Party: Paint It, Black. Of all the bands to take a song with a sitar in it and do a cover without one. They just made it a straight-ahead rock and roll song and did a great job.
  9. Queensrÿche: Scarborough Fair. Can a hard rock band take an acoustic Simon & Garfunkel song, add distorted electric guitars, and make it their own? Yup, turns out.
  10. Faith No More: War Pigs. I really prefer Faith No More's version of this song to the original, though admittedly I'm not a huge fan of Ozzy or Black Sabbath. Faith No More also did a cover of Easy by the Commodores, but rather than doing a Faith No More version, their version sounds like the original.

Runners-up: U2: All Along The Watchtower, John Mellencamp and Meshell Ndegeocello: Wild Night.

Honourable mention: Seether: Careless Whisper. Started off as a joke during a concert, but they did a good enough job of it that the fans loved it, so they actually recorded and released it. Cool song.

Monday, October 12, 2009

iPod Meme Redux

I originally did this a few months after getting my iPod. Revisiting two years later. Old values that have changed are stroked out. Shortest and longest songs, and first and last artist and album have not changed. I've added over 850 new songs.

Attention facebook readers: You might want to click the "View original post" link at the bottom of this note to see it as I originally wrote it. Facebook sometimes messes up the formatting.

 

How many total songs?
6919 songs, 20.9 days, 41.79 GB
7773 songs, 23.4 days, 46.55 GB

Sort by song title - first and last
First: A by Barenaked Ladies
Last: 99% Of Us Is Failure by Matthew Good
Last: 999,999 by Nine Inch Nails

Sort by time - shortest and longest
Shortest: You to Me (0:04) by Bystander
Longest: Octavarium (24:00) by Dream Theater

Sort by Album - first and last
First: "Abacab" by Genesis
Last: "90125" by Yes

Sort by Artist - first and last
First: AC/DC
Last: 54-40

Top five played songs:
1. Fake It by Seether - 18
2. Be Yourself by Audioslave - 17
3. Found Out About You by Gin Blossoms - 13
T4. Like A Stone by Audioslave - 12
T4. White Shadows by Coldplay - 12
T4. High Class in Borrowed Shoes by Max Webster - 12
T4. Elderly Woman Behind The Counter in a Small Town by Pearl Jam - 12
T4. Emotional Rescue by The Rolling Stones - 12

Find the following words. How many songs show up?
Sex: 6 21
Death: 4 59
Love: 239 327
You: 535 822
Home: 42 48
Boy: 34 56
Girl: 60 80

First five songs that come up on Party Shuffle
1. Cesaro Summability by Tool
2. White, Clean and Neat by Robert Plant
3. Local Hero by Bruce Springsteen
4. Resist [Live] by Rush
5. Gimme The Love by Junkhouse

It looks like I've added a lot of "death" songs, but most of them are actually album names - "Death Magnetic", "Live After Death", "Life, Death, Love, and Freedom" (and the corresponding live album "Life, Death, LIVE, and Freedom") , and "Viva La Vida or Death And All Of His Friends". There are only 6 actual songs with "death" in the title.

Similarly, 15 of the 21 "sex" songs are on "Blood Sugar Sex Magik" by the Red Hot Chili Peppers and don't have "sex" in the song title. There are only 6 songs with "sex" in the title, and two of them are "Sexy Sadie" by the Beatles (on different albums). I guess I'm just not that into sex. No wait, what I mean is... it's not that... um.... <blush>

Wednesday, October 07, 2009

European coaches in the NHL

Back in the 70's and 80's, there were only a handful of European-born or Russian-born players in the NHL, a few Americans, and a ton of Canadians. You had your Borje Salmings and your Peter Stastnys and your Jari Kurris but it wasn't until the late 80's and early 90's (after the breakup of the USSR) that you really started seeing a lot of Russians and Czechs and Slovakians and such in the NHL. So over the last twenty years, there have been hundreds of European-born players in the NHL, and many of them have had long playing careers. Some have even made the Hockey Hall of Fame.

So where are all the European coaches?

Former players moving on to coaching is commonplace: of the thirty current NHL head coaches, twenty of them played in the NHL at one point. (In case you're curious, the ten that have not are Paul Maurice, Ken Hitchcock, Peter DeBoer, Todd Richards, Jacques Martin, Barry Trotz, John Tortorella, Cory Clouston, Todd McLellan, and Andy Murray.) But not one of the thirty current NHL head coaches was born outside of Canada or the US.

Are Europeans simply not interested in coaching at the NHL level? Are they being discriminated against somehow? I don't have any insight or opinions as to why this is happening, but I think it's an interesting question.

Tuesday, October 06, 2009

Goodbye J.P.

J.P. Ricciardi was fired the other day as Blue Jays GM, which I am happy about. Ricciardi's reign as GM resulted in no World Series victories, no playoff games, heck, not even anything close to playoff contention. His time had come, and the Jays now need to rebuild and go in a different direction. But that's not to say that Ricciardi was a terrible GM. Here's a list of his best and worst moves, and I'll list my personal favourites (in both respects) below. Note for the record that I wrote well over 2/3 of this article before finding that link, so I'm not just summarizing it.

Ricciardi certainly made some bad moves. He negotiated an expensive contract for Alex Rios, then allowed Chicago to claim him on waivers, getting nothing back. He signed Reed Johnson to a contract and then released him a month later, only to replace him with Shannon Stewart, who got injured and released within a couple of months. He paid both B.J. Ryan and A.J. Burnett a ton of money – each had one great season and a couple of not-bad ones. He also released Ryan and Frank Thomas with a lot of money left on their contracts.

But he also made some good moves. Bringing in Overbay was a good move. He got Jeremy Accardo for Vinnie Chulk and the grumpy Shea Hillenbrand. He grabbed Matt Stairs, Joe Inglett, Scott Downs, and Rod Barajas off waivers. He traded two players I've never heard of for Marco Scutaro. Trading for Glaus was good, but then he wanted out. So Ricciardi turned him into Scott Rolen. Then Rolen wanted out, and he got a couple of young pitchers for him. He drafted Hill, Marcum, Litch, Lind, and Snider.

Some players didn't work out (Royce Clayton, Tomo Okha, Victor Zambrano), but they were cheap anyway. Just about every pitcher spent time on the DL, but that's not Ricciardi's fault. In fact, I'm surprised there wasn't an investigation of some sort into the Jays' pitching coaches at that time.

You might notice that I did not include the Vernon Wells deal in the list of bad moves. You can't deny that Wells hasn't earned his eleventy gazillion dollar contract since it was signed three years ago. OK, so he hasn't even come close to earning it. So from that point of view, this is a terrible deal. But nobody complained about the deal when it was made because Wells was coming off a couple of great seasons and looked poised for lots more. Three mediocre and injury-filled seasons later, it seems obvious that Wells is not the superstar we all thought he was at the time. He's simply a very good player that had a couple of great seasons. Should Ricciardi have seen that coming? Maybe, but nobody else did. If instead of signing Wells he had traded him or let him go, he would have been ridiculed endlessly (which he likely doesn't care about) and not taken seriously by other GMs (which he likely does). He had little choice but to sign Wells to the contract and hope that he wasn't a flash in the pan. Oh well.

Ricciardi was touted as the next Billy Beane, an expert in the whole Moneyball concept, and should therefore be able to bring a winning team to Toronto without increasing the payroll astronomically. This was key because the Jays play in the same division as the rich Yankees and Red Sox, who have no trouble outspending the rest of the league, and seem ready to sign any and all free agents regardless of the cost. But eight years later, what did Ricciardi whine about the most? "We can't win because we don't have the payroll of the Yankees and Red Sox. I don't have enough money to do what we need to do. We can't win in this division without increasing payroll." Um... isn't that why we hired you and not someone else?

I think Ricciardi's biggest problem was that he didn't know when to shut up. Every time there were trade rumours, Ricciardi was right there telling everyone who'd listen who he was offering, who other teams were offering, what deals didn't happen and why, and so on. He would talk to the media and tell them whether certain players were interested in re-signing after their contracts were up, even if the players hadn't come to a final decision yet. That's the kind of stuff that does not need to be published. He publicly questioned Adam Dunn's work ethic and passion for baseball. Even if he was right (and I have no reason to believe he was), you don't say stuff like that. When rumours started flying that he was shopping Roy Halladay at the trade deadline this year, Ricciardi didn't deflect attention and didn't refuse to comment – in fact, he talked on and on about it, and even gave a meaningless "deadline" before the real trade deadline. In so doing, turned the thing into a media circus. On the day of the deadline, the FAN was doing minute-by-minute reports on whether or not Halladay was still a Blue Jay. Then there was the thing with B.J. Ryan, where Ricciardi knew that Ryan required Tommy John surgery but told the media that the injury wasn't that bad. When the truth came out and he was called on it, he famously said "They're not lies if we know the truth", which simply told everyone that they couldn't trust anything he said.

Having said all that, Ricciardi wasn't the worst thing ever to happen to the Jays. No, they never made the playoffs during his time, but at least he didn't turn the team into a laughing stock (lookin' at you, John Ferguson Jr.). They only finished last in the East once, even made second place once, and finished above .500 for four of the eight seasons Ricciardi was here. He took a mediocre team and turned them into... a mediocre team. There were times over the past few years that the Jays had the best hitting team in baseball, and other times where they had the best pitching staff. Unfortunately those times never coincided. He didn't leave the team in total shambles – there are certainly some players that can figure prominently in the Jays future plans. They have some good young hitters, a really good bullpen, and if all the injured pitchers return next season (OK, that's a big "if"), they could have an excellent rotation (how does Halladay, McGowan, Marcum, Litch, and Romero sound?). As I said before, Ricciardi has proven that he's a pretty good baseball guy and I'm sure he'll land on his feet somewhere. In any division other than the AL East, he might even be successful.

Monday, October 05, 2009

Sarah's Story

SarahIn the four and a half years that I've had this blog, I've written over six hundred articles (and trust me, nobody is more stunned by that number than I am). Most are about sports, technology, music, movies, and my family, as well as the occasional article on things like religion and politics. None of them are as important as this one. If you are only a casual reader of this blog, regularly skipping articles about subjects that don't interest you, I implore you to read this one to the end.

I first met Cindy Marshall in 1994, when her sister Kerri married my friend (and best man at my wedding) Jeff. I don't know a lot of my friends' siblings, but Cindy and Kerri (and their parents) are very close, so you can't know one without knowing the other. Cindy had her first child, Sarah, in February 1997, and Kerri had hers, Rachel, in June. But the fact that both children were girls and both were born in the same year is just about the extent of the similarities. Rachel's most significant physical problem is that she needs glasses. Sarah, on the other hand, had surgery before she was born, has had a number of surgeries since then, and has been close to death more times than I care to remember. The fact that she is still alive has been called a miracle.

Part-way through Cindy's pregnancy, a routine ultrasound showed that the baby's bladder was enlarged. Upon further examination, doctors discovered that it wasn't draining properly, so she underwent two surgeries (called "bladder taps") in-utero. At this point the doctors thought there was an obstruction of some kind and believed that it was a relatively mild problem. Sarah was born five weeks early on Valentine's Day 1997, and weighed less than five pounds. She wasn't yet two days old when she had her first major surgery, an attempt to repair her twisted bowel. Immediately following the surgery, her appendix ruptured and had to be removed – the first of a number of organs to be removed from Sarah's tiny body.

After three more surgeries in two months looking for bowel obstructions, Sarah was diagnosed with "megacystis microcolon intestinal hypoperistalsis syndrome". In a nutshell, her bladder was enlarged, and her intestines were pretty much non-functional. Sarah spent the next five months at Sick Kids hospital in Toronto. She was started on TPN (Total Parenteral Nutrition), which means that she was fed completely intravenously. This is not a big deal for adults – many adults can live on TPN for years – but it's very hard on an infant's body. It kept Sarah alive, but at a price – within a couple of months, it destroyed both her liver and pancreas. She already needed a bowel transplant, but now she needed a new pancreas and liver as well. In May, Cindy was told that Sarah's only hope was a multiple-organ transplant and she was placed on the transplant list. At that time, no child as young as Sarah had ever survived such a transplant. I don't know if Cindy knew that then.

Rock climbingSarah's life expectancy during this time varied, but was usually measured in months or even weeks, and at times much less. I remember being at a gathering at Jeff and Kerri's house in Newmarket (for Jeff's birthday, I believe) when the phone rang. The call was from Cindy at the hospital, basically saying "You better get down here now", and Jeff and Kerri immediately grabbed their coats and left. I was standing right by the front door as they left, and as long as I live I will never forget the look on Kerri's face. The party broke up shortly after they left as we all contemplated what was likely to happen that night. Thankfully, Sarah made it through that night and a number of others like that before something both terrible and wonderful happened – another infant died.

I feel like a monster for even using the word "wonderful" in a sentence describing the most painful thing that could happen to a parent. But on what must have been the worst day of their lives, the parents of the child who lost his life (all Cindy knows about him is that he was a ten-pound baby boy) made a decision that saved Sarah's – they agreed to allow their child's organs to be harvested for transplant. Sarah was flown from Toronto to Children's Hospital at the University of Western Ontario in London and at the age of 5 months 24 days, she received a new stomach, pancreas, liver, and bowel. In addition, both her gall bladder and spleen were removed. The date of the operation was August 7, 1997, a day that Sarah and her family and friends still celebrate as "Life Day".

The transplant saved Sarah's life, but it hasn't all been roses since then. She spent the next five months in the hospital in London before finally coming home for the first time at the age of ten months, and to this day returns to the hospital regularly for treatment and checkups. Transplants are funny – the body can live with a transplanted organ for years, even decades, and then suddenly decide that it's a foreign body and needs to get rid of it. As a result, Sarah has to take several different kinds of medication every day to avoid rejection, and will for the rest of her life. The medication has serious side-effects as well. She never crawled as a baby because she simply didn't have the strength and needed help on stairs until the age of four or five. Sarah is a full foot shorter than her cousin Rachel (who is younger by four months), and despite being twelve years old, she weighs less than 60 pounds. She has very thin arms and legs with little muscle. She loves to dance and has been taking dance classes for years, partially because she enjoys it and partially to help her build up her strength.

Not only did the operation save Sarah's life, but it was special in a number of other ways as well – it was the first pediatric multi-organ transplant in Canada, and only the second ever with those four organs. Sarah became the youngest multi-organ transplant recipient in history, and has a certificate from the Guinness World Record people to prove it.

Sarah and her brother Austin Despite all the hardships she's had to deal with, the surgeries, the medication, the procedures she still has to have done every day, all the trips to the hospital in London (did I mention that she lives in Cobourg, about 300km away from London?), Sarah remains a happy, bubbly, delightful little girl. She doesn't have the physical strength to do things that other kids do, even some much younger than her, but I have never once heard her complain about it. Now don't get me wrong, she gets grumpy now and again like any other kid. And Cindy has probably heard her complain on numerous occasions, but note that I said "I've never heard her complain". Seriously though, Sarah is almost always smiling, she loves having her picture taken, she adores her baby brother Austin, and she's just always fun to be around. She's spoken at public events about her experiences, and has been interviewed for a number of magazines. You may remember a Wal-Mart TV commercial a couple of years ago, where a number of people said "I was one", "one" being a child whose life was saved at children's hospitals. The little girl at the end who whispered "I am one" was Sarah.

Like all of my friends who know Sarah, Gail and I have signed our organ donor cards and quite honestly, other than having religious beliefs prohibiting it, I cannot think of one compelling reason not to. If Sarah had not had her transplant, she would almost certainly have died within a year of her birth, and those of us who have gotten to know and love her over the last twelve years would have been deprived of that. I signed my donor card so that I might be able to help others have a similar experience. Please sign yours.

Sunday, September 27, 2009

Nike + iPod

As I mentioned recently, I'll be running in the 5K Your Way run in October (feel free to sponsor me!) like I did last year. Last year I expected to walk and ended up running the entire thing, but I was in pain for several days afterwards, so this year I decided to train for it. I started in May, as soon as the weather got nice. I chose a path that's about 3-3½ km long, and started out by alternating walking and running – I would walk for 90 seconds and then run for 60. The idea was that you do this for a week or two, then gradually increase the amount of time you were running until you were finally running the whole thing. I found that this plan didn't work very well – I found that I hated the running part and while running, looked forward to when I could walk again. Then when my walking time was up, I though "Oh crap, I have to run again". One time when I was out, I decided "Ah screw it, I'll just run the whole thing" and I did. My legs hurt a little for a while afterwards, but I preferred just running to alternating, since I didn't have to keep checking my watch and I didn't have the dread of having to start running again. I took a break in July when we went to Scotland and then tried to get back into it when we came back, but was having trouble getting motivated. I was well into baseball season at that point, and I didn't want to run hard enough that I couldn't play my best. Not that I'm an all-star ball player or anything, but I wanted to contribute whatever I could to the team, and taking myself out of a game in the fifth inning because I couldn't run anymore wouldn't be much of a contribution. But then my birthday came, and everything changed.

I went up to my parents' place the weekend after my birthday, and when it came time to open my gifts, they gave me two little boxes and told me to open the top one first. I opened it and it was a thing called Nike + iPod, which is a little sensor that you put in your shoe that communicates with a thing you attach to your iPod, and it tracks how fast and far you run and uploads that data to the nikerunning.com website so you can keep track of your runs. Very cool, but right on the box, it said "Requires iPod Nano". My iPod is a 80 GB 5G, but I thought that maybe Trudy (who has an iPod Classic similar to mine) had done some research and found that it works with my iPod as well. Nicky, sitting beside me, grabbed the second gift box and said "Maybe this is an iPod Nano!"  I gave a little chuckle and said "maybe", not for an instant thinking he was right. Of course, he was – it was a beautiful silver Nano.

I don't wear Nike shoes. I've had Nikes before and they never seem to fit my feet properly. But the Nike+ sensor is supposed to go into a little cut-out inside some pairs of Nike shoes, so I had to improvise by stuffing it under the insole in my Reebok's. It was a little uncomfortable at first, but I got used to it pretty quickly. It's amazing how much this little thing has changed my workout patterns. I started running once or twice a week, and found that my legs quickly adapted, and while they would be sore for an hour or two after the runs, I was still able to play baseball and didn't suck any worse than I usually do. By the end of August, I was running at least twice a week, and my distances were growing as well. I don't think the sensor was completely accurate for me (perhaps it slides around under my foot and that affects its distance calculations) – Google Maps thinks my original route is about 3.9 km, but Nike+ has recorded it as anywhere between 4.3 and 5.48 km. I did run a little further than normal on the second one, but not a full kilometre and a half. I recently bought a Shoe Pouch for the sensor that fits on top of the shoe, which works very nicely. The distances are more consistent now so I end up trusting them more.

The device itself is very cool – you can tell it you want to work out over a predetermined distance or just keep running until you say stop. Then you pick a playlist and say "go", and it starts recording and playing the playlist. When you're done, it tells you how far you ran (or walked – it can tell the difference), how long it took, your average pace, and how many calories you burned. You can also choose a "power song", which it plays if you press and hold the center button down. The idea here is that if you need some inspiration, you can play your favourite pick-me-up song whenever you want. The next time you sync your iPod, it will update your Nike+ account.

The Nike+ site is pretty Flash-heavy but slick, showing each run you recorded, when it happened, and how long you went. It will also show you a graph of your pace throughout the run, with a little mark at each kilometre point, as well as whenever you pressed the centre button during the run (which updates you on how far you've gone and how long it's been) or played your power song. It keeps track of your fastest mile (7'30"), 5k (21'31" – though I think that was based on the 4+ km run I did that it recorded as 5.48, so it's unreasonably low), and 10k (none... yet), as well as your total number of workouts (15), kilometres (61.50), length of time (5:20:49), calories burned (4989), and average pace (5:13/km). You can set up goals (i.e. run 10 times within 4 weeks (which I just completed the other day! Yay me!), or run some number of total kilometres in so many weeks), or join challenges, which are competitions in which you join a team of people with something in common (could be men vs. woman, or something like fans of different baseball teams) and add to the total for your team.

I hooked up the Nike site with my facebook account so whenever I sync my iPod, it updates my facebook status with the results of my latest run (eg. "Graeme ran 4.41 km on 9/25/2009 at 11:37 AM with a pace of 5'20"/km"). I did this with the idea that if I broadcast to everyone whenever I run, I have some accountability. If I skip a week or run shorter than usual, everyone will notice. Of course nobody will really notice – nobody's paying that close attention to my running patterns. But it still sticks in my mind when I'm thinking of cutting a corner or taking the shorter path, "people are going to see 3.8 km instead of 4.4 and think I wimped out, so I'll take the longer route". And I do, and I end up glad that I did. Amazing, the power of peer pressure, even imagined peer pressure.

If you are a runner, or want to be, I highly recommend the Nike + iPod. Not only is the Nano a slick little piece of hardware, but the Nike+ part is very motivational. Well, not really motivational, but it certainly makes it more fun. I ran 5k once last year, and that afternoon I couldn't walk down a flight of stairs. The next day I had to work at home. I was in pain for three or four days. I've been training with this thing seriously for only about a month, and last week I came within 1 km (4.53, 5.2, and 4.4 km, a total of 14.13km) of doing the 5k run three times in five days.

Thursday, September 24, 2009

Help make cancer history

In October of last year, I participated in the 5K Your Way run, part of the Toronto Marathon, to raise money for cancer research at Princess Margaret hospital. Princess Margaret was where my sister Trudy went for her cancer surgery last year, and thanks to their early diagnosis and subsequent surgery, she is now cancer-free. Obviously this is a very important cause for me, so once again I'm looking for donations for this year's event. Last year, our team raised over $6000, of which I personally raised $480. My goal for this year is to surpass both the amount we raised and to beat my running time from last year. I have been training most of the summer, so I should be able to run the 5k race and climb up and down a set of stairs on the same day.

Any donation you can make is very much appreciated. Click here to visit my personal page where you can sponsor me. Don't forget to click "Go To Team Page" above the lovely picture of me and Trudy and check out the list of team members and a picture of all of us from last year's run – you can even sponsor my kids or Trudy directly if you'd prefer.

To those who do sponsor me and those have done so already, thank you very much for helping Princess Margaret hospital in their quest to eliminate cancer in our lifetime.

Tuesday, September 22, 2009

Alan Turing

Sorry, I'm a little late to the party on this one. After reading an article written by my colleague Glenn Paulley, I decided to write about it as well, mainly because Glenn's blog and mine have different audiences. The story he writes about (and I'm about to cover) is both tragic and infuriating; I wouldn't call the ending "happy", but it's certainly the best that could be expected under the circumstances. Note that this is not a technical article at all. It is about a computer scientist, but it's mainly the story of a man.

If you've never studied computer science or cryptography, you have likely never heard of Alan Turing. Computer Science students don't learn much about Turing the man, but you can't study computer science for long before coming across his name. He was a brilliant mathematician and cryptanalyst who not only developed some of the most basic fundamentals of computer science and artificial intelligence, but helped to end World War II. Turing was one of the scientists who worked at Bletchley Park, and was instrumental in breaking the German "Enigma" code, among others. Turing was awarded the OBE (Officer of the Order of the British Empire) for his work during the war.

Turing also happened to be gay, which was illegal in Britain at the time (and remained so until the late 60's). Only seven years after World War II ended, Turing was arrested, charged, and convicted of gross indecency. As a sentence, he was given a choice: chemical castration or prison. He chose the former, and was given estrogen treatments to attempt to kill his libido. This was successful, but also caused Turing to grow breasts. His security clearance was also revoked, thus ending his employment with the government. In 1954, two years after his conviction, Turing committed suicide by eating an apple laced with cyanide. There are some that say that his death was not a suicide at all, but accidental. Regardless, the death of this brilliant man at only 41 years of age was a tragedy.

In late July of this year, a British computer scientist named John Graham-Cumming started an online petition asking the British government to apologize for the treatment of Alan Turing. Within weeks he had several thousand signatures and on September 10th, British Prime Minister Gordon Brown issued an official apology to Turing.

Congratulations to John Graham-Cumming on getting this done, and kudos to Gordon Brown and the British government for doing the right thing and apologizing for the appalling treatment of Alan Turing.

Saturday, September 19, 2009

Balsillie vs. Bettman, Round Two

So it's down to the NHL vs. Jim Balsillie now. Should the NHL be allowed to own of one of its own teams? I would have imagined that the league owning a team would not be allowed, though I suppose MLB owned the Expos for a short while. The really weird thing about this – scratch that. One of the really weird things about this is that the NHL has publicly stated that if they win the auction, they will consider moving the Coyotes out of Phoenix.  I beg your pardon? Isn't that one of the main reasons that they refuse to let Balsillie into the club? They keep saying that an NHL team can be successful in Phoenix (despite the fact that it hasn't been in fourteen years), so why would they need to move them? And if they're not against moving them, what's the problem with letting Balsillie do it?

The NHL has stated that the other main reason that they're so dead set against Balsillie is because of his supposed "lack of integrity". Right. Because NHL owners are just packed to the gills with integrity. Here is an article listing five former NHL owners who have spent time in prison, and that doesn't include the recently-convicted Boots Del Biaggio.

But even if the NHL wins the auction, then what? The number of season tickets sold in Phoenix for this year is in the hundreds (compared to the twelve thousand plus for the Leafs), they'll have the same trouble finding sponsors and selling advertising that the previous owners had, and they've stated that they may move or sell the team. Jim Balsillie is the only one currently interested in buying the team. So the league will spend well over a hundred million to buy the team, lose millions of dollars operating the team, and then either move it anyway, or sell it at a loss. That's a lot of money to spend just to spite Jim Balsillie. And if they end up selling it to Balsillie anyway, it will all have been for nothing.

Stephen Brunt said on Prime Time Sports the other day that if the NHL loses this auction, Gary Bettman's days as commissioner are numbered, and he's probably right. Which means that Bettman is gambling not only hundreds of millions of dollars of the NHL's money, but his job as well. Is keeping Balsillie out of the ownership club really that important?

As much as I would love to see an NHL team in Hamilton, I can't say I support the way Jim Balsillie has done this. His tactics have been heavy-handed and he's certainly not making friends of the other owners nor the league executive. Would an NHL team work in Hamilton? I think so. There are enough hockey fans in this area, plus there would be lots of people from the Guelph-Cambridge-Kitchener-Waterloo area that would come, not to mention all the GTA people who can't get Leafs tickets. I found it amusing a couple of years ago when a group of people who wanted to bring an NHL team to Hamilton proposed boycotting pre-season NHL games in Hamilton to "send a message" to the NHL. Good thinking guys – show the NHL how wrong they were by allowing them to hold a pre-season game here to an empty arena. The next time they're considering expansion or moving a team, they're not going to remember a boycott, all they're going to remember is playing to an embarrassingly small crowd in Hamilton and quickly scratch the name off the list.

Opponents of an NHL team in Hamilton point to the lack of interest in the Hamilton Bulldogs as proof that the NHL won't work here. But that's a faulty argument, and here's why.

I am a Hamilton resident who would be interested in watching and supporting a Hamilton NHL team but isn't interested in the Bulldogs. I'm sure the Bulldogs are full of talented young players, but honestly, they're a farm team. The whole idea of the team (and the AHL in general) is to give the players experience and get them ready for the NHL. It's really hard to get pumped up for a team whose players would leave in a heartbeat if they get a call from the big club. You can't blame them for that – getting to the NHL has likely been a dream for every one of the Bulldogs players since they first laced up the skates as a child. The AHL is mainly made up of three types of players: those too young or inexperienced to be in the NHL, those who simply aren't good enough to be in the NHL, and those who have had a taste of the NHL but were the lowest on the totem pole when it came to sending someone down. But the NHL is the pinnacle of professional hockey, containing the best players in the world. Any way you slice it, the quality of players in the AHL is lower than in the NHL. Doesn't mean that AHL games can't be exciting – as long as two teams are roughly equivalent in skill level, you can have an exciting game at any level. But if you combine the lower skill level with what I said before about players bolting the second they get the chance at an NHL team, I cannot see how the argument can be made that a city that doesn't support the AHL won't support the NHL.