Tuesday, December 18, 2007


Once in a while a song will get stuck in my head and the music will play inside my head throughout the day. This one has been stuck in there for about a week. The words fit how I feel right now:

Holy darkness, blessed night,
heaven's answer hidden from our sight.
As we await you, O God of silence,
we embrace your holy night.

Sunday, December 02, 2007

good coaches don't yell

My daughter is involved in both soccer and basketball. A few weeks back we were up in SFU playing a Vancouver Whitecaps Club Super Series soccer game. Her team was coached by Steve Kindel. It helped with a quiet environment and a small field. Steve was calm and was always talking to the girls in a speaking tone. Instructions were clear and concise and the points were well taken by the team.

Today my daughter was in a basketball game. I got there just about half time and I realized her opponents were very different from other opponents her team has faced before. Defense was strong, people help each other in double teaming, inbounds play is precise. As I look towards the opponents' bench I saw a familiar face. Again Kevin is calm and collected, not talking much but when he makes a point his team listens.

In contrast, I yell too much. Sometimes the same keywords over and over again to no avail. I will definitely try different strategies to get my point across.

Monday, November 26, 2007

problem of the day

A colleague was trying to write a calculation tool on IIS logs. I recommended him to try the text file driver from Microsoft Jet. He couldn't get it going. The error is:

Cannot Update. Database or object is read-only
Error code is -2147217911 or 0x80040E09

Turns out the file has an extension of ".log". Once I changed it to ".txt" everything works. Can't find an explanation though.

Wednesday, November 21, 2007


We got caught in the production system yesterday.

Turns out the problem is that we use System.IO.Path.GetTempFileName() to, well, get a temporary file name to use in a directory. This method, if you read the documentation (which I did not), states that

Creates (emphasis mine) a uniquely named, zero-byte temporary file on disk and returns the full path of that file.

So there is a side-effect by calling this method. But that's not all. In the remarks it said:

The GetTempFileName method will raise an IOException if it is used to create more than 65535 files.

So the production system failed because this method has been called more than 65535 times.

Lessons learned:
(1) RTFM!
(2) the method should be renamed CreateTempFile.

Tuesday, November 13, 2007

indoor trainer

I have always resisted the idea of riding a trainer in the house. It never appeared to be interesting nor effective, until this year.

It started out having a cold winter this January when I have to stop commuting for a few weeks.
In the fall when soccer season starts it is obvious that I will have less time riding in daylight.
Then there was some discount trainer emails flying around.

So being the cheap bastard that I am, instead of buying a new one, I sourced an old noisy trainer for $20 from a friend.

I've started riding on the trainer and it feels different. The 12s or zone 2s seem to be harder on the trainer than on the road. I've tried a small amount of 14s just to see how it feels and it seems harder as well.

On the entertainment front I found some old Japanese animation series that I normally would not watch sitting down. It works and time flys by a bit better than a regular Hollywood movie.

I probably need to set up a fan as I am sweating like a pig.

The lesson learned is that it is not boring when you don't want it to be boring.

Tuesday, October 23, 2007

Another weird problem

This time it is in our development environment. We are integrating with an external report engine and one of my tasks is to look at some performance statistics to see if we need extra hardware to support the report services. The reporting engine is still a 32-bit process so I wrote a bit of code to thunk down from our 64-bit .Net code to 32-bit before calling the reporting service.

After that I hook up our test/performance harness to make the system run 100 reports. That CPU was under siege for well over 10 minutes. After same tuning and monitoring I realized the CPU was not spent in the reporting process (nor our application services for that matter), it was the 64-bit version of rundll32.exe. Out comes the Sysinternals Process viewer. It turns out rundll32 was running:

rundll32.exe ntprint.dll "printer name"

The process is trying to install a printer. I tried it manually and we don't have the printer driver locally. So I guess this process failed repeatedly but kept trying. I looked up some documentation and found the option to turn off the printing portion of the report and everything works like charm. Just another day in the office...

Wednesday, October 03, 2007

tracing in asp.net

I am trying to use the trace.axd viewer to view page traces. I changed the <trace enabled='true' > tag in web.config and all I get was
Server Error in '/xyz' Application.

Trace Error
Description: Trace.axd is not enabled in the configuration file for this application. Note: Trace is never enabled when

Details: To enable trace.axd, please create a tag within the configuration file located in the root directory of the current web application. This tag should then have its "enabled" attribute set to "true".

Version Information: Microsoft .NET Framework Version:2.0.50727.832; ASP.NET Version:2.0.50727.832

Turns out I have to restart the worker process in order to get it to work. Turning it off has no such problems though.

Interesting piece of news

I just came across this piece of news from the office pantry. What is interesting to me is that the deal is made on the cycling roads rather than on the golf course. Cycling being the new golf in the corporate world someday?

Thursday, September 27, 2007

I blew it!

I put my lunch on a plate, throw it in the microwave and about a minute later, there was a loud crack. The plate was split into two down the middle. First time in my life I have broken a plate like that... how bizarre.

Tuesday, September 18, 2007

Network problem

Ever since late July I have been involved to diagnose a performance problem. After a few weeks of back and forth, dicing through the numbers and adding instrumentation to our code, it boils down to network delays in our .Net remoting calls. At that point I should have throw my hands up and pass the problem to the Network engineers. Unfortunately that person was on vacation and I need to carry on. After a bunch of trials and errors and flipping around options on the network driver level, the problem seems to be related to SNP/TOE. So next time you see a network slowdown, check if SNP/TOE is turned on.

Thursday, September 06, 2007

it might be obvious for others

This is definitely not obvious for me.

I did some performance tuning for our web app and cached some pages a while back. I did this:

<%@ OutputCache Location="Any" Duration="3600" VaryByParam="none"%>

I was going through the IIS logs as see that the page in question is still being requested a lot. Changing it to

<%@ OutputCache Location="Any" Duration="3600" VaryByParam="None"%>

does the trick. It seems implicit and I have definitely seen other people using the lower case version. But the attribute is CASE-SENSITIVE!!!

Monday, August 27, 2007

Things I did on Sunday

Or things I did not do on Sunday.

The first event of the day was the Team Time Trial. Before I go on vacation I was pretty gung-ho on doing this as it sounds like fun. I was asking around to gather interest and form a team. Unfortunately there was not a lot of interest and after my vacation, I lost a lot of fitness and gave the idea up. I then signed up to help out in the race. A few days before the race a couple of cat 4s were looking for a 4th member. I replied, wanting to ride on condition the race director agrees. Then the race director came back saying he needs me to marshal the race, thus making it impossible to race. I have no qualms about the decision and helped the team find a 4th member. This team won the race. I was happy for them and was happy that I didn't drag the team down as I was not in good form.

After the race, a coach hosted a cycling garage sale at his house not far from the race venue. I was carpooling, the driver wanted to drop by so I went to take a look as well. It was like going to a candy store. Wheels, helmets, sun glasses, jerseys, jackets, bags, you name it. Everything useful for a cyclist is available. I picked up some old team jerseys for cheap and bought two nice shimano wheels off him. I had no intention of buying anything but ended up being one of his biggest customers that day.

I was excited and Sunday night started to assemble up the Pinarello. With the extra wheels the work is easier as I can take my time to tune up the bike while riding on the current bike. No single point of failure makes things easier to transition.

The most important lesson for the day: that front and back skewers have different lengths. Pull a rear skewer to fit a rear wheel - it is longer.

All in all a good day.

Thursday, August 23, 2007

a little bit of history

As the Canucks are getting ready to launch their new logo and jersey, let me share a little story about their previous jersey launch.

I joined a small software company in 1997, replacing a guy who went to a big game development studio. It was all in good terms and this developer was in touch with the few of us. A few days before the jersey launch one of my colleagues received a email from this guy with the Canucks whale logo in an attachment. This ex-colleague was not on the hockey team but somehow got hold of the logo. We were admiring the logo and another colleague came by, saw the picture, called his girlfriend and forwarded the email over to her. This person worked for CKVU and it was a matter of minutes when Don grabbed hold of the picture and ran a story at their six o'clock news.

So this little company played a pivotal role in leaking on the logo last time.

Thursday, August 16, 2007

A race

I was finishing my morning ride and spinning to the office when I met Gord on Macdonald and Cornwall. Gord is a strong rider and the president of the cycling club. We exchanged pleasantries and he took off. I continue spinning away but there was always an urge to go after Gord's wheel. I lost sight of him after the uphill section and was surprised to see him in front, slowed by the lights. I almost caught him at Burrard but the light turn green before I could reach him. Gord took off again. This time it is a struggle because of 2 weeks' vacation I lost a lot of fitness. The climb up the Burrard bridge is a challenge when you want to push but your HRM disagrees with you. At the end I decide to go with my HR zone and let him go.

Little did I know that he was caught up in traffic lights again and I caught him around Smithe. This time I have the legs to ride away from him and did not see him again. He looked at me from his Subaru in disgust as I smiled and waved bye bye.

Sunday, August 05, 2007


I know it is inevitable, but the moment of truth is still surprising. My son has been growing up and he has reached the first milestone: we now officially have the same shoe size. I now can test fit shoes for my son!

Tuesday, July 24, 2007

there are racers and there are racers

Last Saturday on the club ride we had time to chat because of a good number of flats along the way. One topic of discussion was wheel weight and how one guy bought a used wheel with a Powertap. The rear wheel weighs 1700 grams alone and he rebuilt the Powertap with a lighter rim and it saved him 200 grams.

Then yesterday during the weekly criterium race I can't help but notice one guy on a bike that squeals. After the race I was asking him whether he notices the noise from his bike. He said he ignores the noise. Another guy rolled by and pointed out that he spokes are loose and rubbing.

It just surprises me how extreme people are: either they care about every gram they carry or they are totally insensitive about savings to make their bike go faster. Go figure.

Thursday, July 05, 2007

How odd

We were playing a card game at home - a variation of slap jack where we call the cards from Ace to King and slap when the card matches the call. I have played this game lots of times and for the first time in my life, the whole deck was dealt and non of the cards matched! So what is the probability of a set of cards that does not match their ordinal position at all? I have to think about calculating that...

Tuesday, June 12, 2007

surprise at home

As I was riding home last night, I heard some unfamiliar sound as I was rolling into the driveway: it was the sound of drums and cymbals. From the direction of the sound, my neighbours over on that side have no young kids, and the drum sound was from a beginner.

So as I opened the door, the drum side was coming from within! My 12 year old son and his two buddies was having a jam session! Their school has a talent show in about 2 weeks and they were getting together to practice. Being first timers the singer brought the lyrics, about 2 bars of music for one hand and the drummer brought his (rental) drum set. My son was struggling to play the few notes the singer brought along. So my music and superhero instincts kick in, sort them out. Reverse engineer the song for the basic chords, give my son a basic pattern to play, settle them in a practice tempo, and about 2 hours later they got the basic pattern going. They will be going into an audition today so let's see what happens.

Several interesting observations:
- figuring out what chords to use is way easier than it was when I was in highschool. An mp3 and the slider in the computer makes life soooo easy.
- the band is a bunch of piano players venturing out to different instruments. Just like when I was in my band.
- 12 year old kids these days know what they want to do. I would say they are way smarter than when I was 12.

I had fun and saw them had fun too.

Monday, June 04, 2007

Road Race

I have taken a full Cycling BC race license this year. So I thought it might be a good idea to do some races that require a full license. This being the closest to home and the timing is favourable so I signed up and went for it yesterday.

Here are the positives:
I had fun.
I finished the race.
I contributed - I was telling people how to ride paceline to go faster.

I need to work on these...
Climb faster.
Positioning myself in the pack.

I was extremely tired after the race but felt much better towards the end of the day. I was going through flickr trying to find photos of myself but couldn't find anything...

Anyways more training. Onwards and Upwards.

Thursday, May 17, 2007

Race 2

I did the 2nd criterium on Tuesday. This time I am more relaxed and focussed on keeping myself in the front 3rd of the pack. The race has more people this time (probably 25 to 30) and it was a bit crowded when we start. As expected the crowd thins out as some 1st timers cannot keep up with the pace and the climbs. The pace was a little quicker than the previous races I've seen as there are more people and more people trying to lead the pack.

There was some confusion in the middle of the race. The women's races were running at the same time and their cat1-3 pack caught us. People were yelling to move away so that the women can pass. There was a bit of confusion and there were people trying to sit in the women's pack as well as trying to break away using the women's pack as a decoy. A couple of us decide to chase the breakaway down creating more
confusion in the race. After a lap or two the race official called a "neutral lap" to let the women's group ride away. That suits me fine because I was pretty close to blowing up trying to chase the breakaway. Somewhere in the middle of the confusion was the prime lap and I don't even know exactly which lap it was.

At the last lap I was in the front group of 10 or so riders. I saw there were 2-3 riders from the same team so I rode next to one of them and said I was going to try to lead him off. Then I dive down the hill going all out thinking he would follow me. But I think I was going too fast and he knows that I wouldn't succeed. I
went all out for about 30 seconds or so and saw the pack or right behind me, probably less than 20 feet away. There was a right hand turn and I wasn't prepared to make the turn at that speed. So I braked, let the people pass, as finished the race last. When I went home my kids asked me how I did. I said I had fun and my wife said "you didn't do well, did you?" I smiled and walked away.

Tuesday, May 15, 2007

weird side effect

With this piece of news finalizing the deal, I have now worked in the same physical office for 3 companies.

Here is the original deal:

Thursday, May 03, 2007


Our test server got this Exception a zillion times when we did our performance test:

System.Data.SqlClient.SqlException: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: TCP Provider, error: 0 - Only one usage of each socket address (protocol/network address/port) is normally permitted.)

Unfortunately Google as of today reveals very little information about this. To make a long story short this is created by one of the guys mistakenly adding the connection string with "Pooling=false;". This caused a humongous amount of connections, probably flooding the network and popping up the exception.

Tuesday, May 01, 2007

Race 1

Finally this is the day. First race of my career - so to speak.

It was raining this morning. It was cold. I was not feeling the best. On the ride to UBC my heart rate was too high. You get the drift. I was nervous. I was talking to other club members and the advice is always: don't worry, try your best, dropping a lap is ok as long as you get the hang of the peloton.

Once the race starts all the other thoughts went out the door. I was concentrating on the wheel in front of me and a little bit more. The course is tough: it starts on a climb, a little bit of flat, downhill and up again for the loop. I tried not to use too much energy and try to recover enough to survive the climb. Most of the climbs were at a pace of 30+ km per hour. With a bit of tail wind and people in front of me it didn't feel that hard. In fact roughly 10 minutes in I was watching my heart rate and it was in an acceptable range: high 160s and I could recover down to 140s. My goal was to follow the pack and not get dropped and I am happy to say that I did that - almost all the way. During the last lap I lost sight of the pack when the person in front of me slowed down a bit and a gap opened up. As soon as I realized I tried to bridge up. It was not my forte and they were accelerating away. I pushed hard and could not join the pack again for the last lap.

There were two accidents. I actually did not see it happen - luckily no one was seriously hurt and the pack did not go down with it.

All in all I achieved what I set out to do for my first race. Now for more training and hopefully I can really hang in the pack for the finish next week.

Tuesday, April 24, 2007

Beating oneself up

Mentally that is. I just realized that I have the tendency to beat myself one in my thoughts - over and over again.

Take for example a few weeks ago - just before Easter to be precise. I finally got the go ahead to be a member of a local cycling club. So the following step was to get my hands on my club clothing. Well, a couple of emails and a few weeks later it has still not happened. So thoughts started to form in my head: was I not assertive enough in stating my options? was I too assertive and people backed up? Am I not making my clear enough? It goes on and on in my head almost nonstop. Luckily I guess my pleading worked and I got the clothing on Sunday.

But same things happen on any event on any day. Was I training enough, was I training not enough? Am I trying hard enough? Did my boss understand my concerns? I don't know about other people, but I do have this capability to keep beating myself up constantly... sigh.

Tuesday, April 10, 2007

I once was blind and now I see

At the end of spring break, we were driving back from Sun Peaks. We stopped for lunch and I mentioned to my wife, "look, cherry blossoms". She said "it's been blooming for well over a week".

That same night a friend sent me a email saying how happy she was about the cherry blossoms. I replied back saying I only saw it today.

So the following workday I made the effort to count how many cherry trees I can find along the way. Turns out:
- there are less than 5 along South-west Marine between 41st and 16th.
- probably a couple more between 16th and North-west Marine.
- there are roughly 10 along North-west marine, close to where the houses are.
- probably around 5 along 4th from NW Marine to Alma.
- around 5 along Burrard between the Bridge and Hastings.

So far so good. Can't say I missed much.

But there are A LOT of cherry trees along Cornwall. So many that I don't know how I missed it. Lame excuses includes:

- there are a lot of cracks and potholes
- i am concentrating on my speed and heart rate.
- I like to look at cars than flowers.
- my neck hurts, can't look up.

Anyways I justed realized what I was missing. :-(

Tuesday, March 20, 2007

zone 2

I've been following this program for a few weeks. I was going to blog that it is too easy - until last Saturday.
It was the last day of week 4. Soccer has ended so I have extra time to ride longer. So instead of a 90 minute zone 2 I extended it to 2 hours.
Unfortunately I picked the wrong day of the weekend to ride long. It is raining rather heavily constantly with a good wind. I went around Iona Beach thinking it has no lights so it makes a good continuous ride. On the way there I saw planes landing in the direction opposite to me - meaning the wind is on my back. So trouble lies ahead. On my way back the wind picked up and it was hard to keep spinning and maintain a steady heartrate.

When I got home I was exhausted, soaked from top to bottom and my legs were sore. I have rain covers for my shoes and they were still completely soaked. 48 hours afterwards they still were.

So zone 2 is not easy. Not at all.

Tuesday, March 13, 2007

it is not easy

My drive train was wearing out and I was looking at different ways of fixing it. I can always throw the bike at a local bike shop and pay them. But being the skeptical self I don't always trust whatever the bike shop recommends. Last summer I met a guy what works for the local outdoor equipment co-op. He builds his own bikes, has a workshop in his garage and sounds very knowledgeable. So I asked him last week if he can change the drive train for me. He said it is simple and would not take more than an hour. So I picked up the parts at his shop, cleaned my bike (now that's a BIG job by itself) and took my bike over at his place.

Once I'm at his place I realized my riding philosophy is very different from his: I ride rain or shine and he would not ride in the rain because it damages his bike too much. Partially because of the amount of gunk and partially because of my worn out stuff it took a while just to change the chain. We got the chain ring wrong and we determined that we can try keeping the rear cassette.

In hindsight it is one of those jobs that a normal cyclist would not do and it is hard for anybody who does not do this for a living to do it consistently once every few years. Add to it nuances with new technology (e.g. you should not fit a 10 speed chain on a 9 speed drive train) makes this thing a non-trivial matter - never mind what anybody tell you how easy it should be.

The next morning I was cautiously riding to bike to work. I was crossing Burrard bridge when I heard a few clicks and a big snap. Turns out my rear dérailleur snapped out from the frame. I took the bike to the shop and the guy said I have to replace the dérailleur too. So a few hundred bucks later I have a new drivetrain.

Tuesday, February 27, 2007

almost frozen

I went out on a training ride last Saturday morning. The weather report was rather normal: 3 degrees Celsius, light rain. So the plan was to follow the program and ride for about 90 minutes. About 10 minutes in I realized it was not only raining: it was wet snow. My gloves and shoes starting and get soaked and soon I was feeling the coldness through my extremities. Soon after I finished my main drill I turned back home. Luckily I was about 20 minutes from home. By the time I got home, I cannot manipulate my fingers to take off my cycling gear! Took me a good few minutes to take off all the wet stuff using my stiff fingers without flexing.

Tuesday, January 30, 2007

one thing lead to another to a third

About 10 years I was assigned to go on my first business trip in Canada. It was to install, customize and train our new client in Aurora Ontario (yes - the what's-her-name MP was the CEO then).

So the first morning me and my partner were having breakfast and we were reading the paper. This was the first time I read the Globe and Mail and I spent the most time on the obituaries section. I never read these columns but somehow the Globe got my attention. From then on whenever I get to flip open the Globe I read that section first.

With all the talks about making JP2 a saint here is a guy that is probably more deserved to be one. Not only is he action oriented, talks against injustice, he is also very honest about himself and his mistakes - something not even the beloved JP2 was able to do...

Too bad the article is pay only - here is another one about this priest that is free.

Tuesday, January 02, 2007

Hong Kong - part 5.1 - Macau part 1

I have visited Macau a number of times when I was younger and have not visited that place for a while. So when we got there last December I was stunned when the immigration officer asked me whether I have been to Macau. I would guess their immigration system was implemented after my last visit and therefore have no record of me. Two interesting thoughts come to mind:

1. I must be a loser since Macau is such a bustling place right now there is no other reason for me not to visit.
2. Hong Kong is a Special Administrative Region of China. Macau is also a Special Administrative Region of China. Why do we still have "border" controls? The same is for ShenZheng. I don't get it...

Hong Kong - part 4 - cycling

One of the fun things I have done this trip is cycling with a few friends from school. These guys started out swimming competitively in school days and picked up triathlon as a sport a few years back. I was never good at swimming so triathlon was not my thing.

Here is a picture we took on a ride near the border of Hong Kong.

My friends' bikes are all very high quality. I didn't bring a bike and borrowed my friend's nice spare Bianchi with Ultegra components. (My "good" bike is 105) The other guy's pair of wheels are more expensive than my 2 bikes added together.

The routes in Hong Kong are a bit limited in choices and we have to start early. I have to wake up before 5am, hop on my friend's car at 5;15am to arrive at the starting location by 6am. The routes are a few laps of 10-20km so you have to do a few rounds to have a 2 hour ride.

One thing I learned from my friends is their dedication and the possibility of riding in the early morning. It is challenging for me to wake up but once you do the ride is very enjoyable. This is especially true during the Vancouver Winter when sunset is before I leave the office.

Hong Kong - part 3

Here is a small snippet of sights and sounds during the few days when the internet come to a halt due to the earthquake in Taiwan:

My family were having a bite at a small eatery and I overheard a conversation about the outage and ways to get around it like: oh I can go to yahoo.com.hk but can't do a search so I use this website and they were able to get me some results...

On the TV and in the paper people are talking about using proxy servers to route out of Asia. Of course the proxy servers pretty much shut down because this increased traffic.

My cousin was visiting Hong Kong from Japan and we were supposed to hook up to go to Ocean Park together. I was suppose to send him a email to confirm date and time. He was supposed to read his email from his blackberry and give me a confirmation. Well the email was sent out (thanks to the basic version of gmail) but he never got notified because of the routing problems.

During those few days I have to constantly no think internet, no google, limited email capability and survive without these tools. Kind of like brushing your teeth with your other hand.

Hong Kong part 2 - conveyor belts

I was standing and the luggage claim area in the Hong Kong International Airport, and being the optimized person that I am, I want to grab my bags as soon as they show up. So I was standing right where the bags are being dropped into the circular conveyor belt area.

After staring at the mechanism for a few minutes I noticed one thing, that the linear conveyor belt that drops the bags into the circular belt sometimes stops. There seems to be some sort of traffic monitoring going on. It seems to be looking for existence of baggage in the main belt and waits for a slot to drop it in if there are bags in the vicinity.

When I arrive in Vancouver, I noticed there is a similar system. Unfortunately there is also a guy working on the belt to smooth out the luggages. So obviously the system does not work as well.
Listed on BlogShares