New journey

I've embarked on a new journey. For now, this techie blog is considered retired until further notice. Oh, and I also keep a blog in Vietnamese at

Farewell @codinghorror

Really enjoyed reading @codinghorror’s last post.  I echo this reader’s comment:

I think it's pretty cool with all the "startup ra ra ra" bullshit that's popular right now, to see someone high profile say "fuck it, it's not that important"

Thank you, Jeff! You definitely changed this corner of the world for the better.

In death, Steve Jobs probably teaches a much better lesson than he could ever do while alive.

A simple vow

Starting tomorrow, I will continue to greet and speak to my Chinese friends as if nothing has changed. However, in order to show my love and solidarity towards a homeland on which I once felt like an outcast,  I will, from now on, go out of my way to avoid buying “made in china” products. This is but one in many examples of why:

This ain’t gonna be easy, as it excludes any future possibility of owning an iPad. But it’s the principle of the thing.

Workaholic culture (still)

From the Twitter Engineering blog:

While on vacation in Germany, Michael Busch, one of our search engineers, implemented a demo of image and video search. A few weeks later, during Twitter's first Hack Week, the search team, along with some members of other teams, completed the first demo of our new search experience. Feedback from the company was so positive that the demo became part of our product roadmap.

Impressive. But it reminds me of this CNN article I saw the other day, Why is America the 'no-vacation nation’?,  which starts with this line:

Let's be blunt: If you like to take lots of vacation, the United States is not the place to work.

I think this all started when I brought my sleeping bag into work one day back in 1999. Depressing.

Them’s fight’n woyds!

Expensify‘s CEO on “Why we don’t hire .NET programmers”:

Programming with .NET is like cooking in a McDonalds kitchen.  It is full of amazing tools that automate absolutely everything.  Just press the right button and follow the beeping lights, and you can churn out flawless 1.6 oz burgers faster than anybody else on the planet.

So what’s the moral of this whole story?  Two things:

  1. If you ever want to work in a startup, avoid .NET.  It does you no favors.
  2. If you are a startup looking to hire really excellent people, take notice of .NET on a resume, and ask why it’s there.

I recently knew of Expensify by reading this blog entry by Phil Windley. I can only guess from Mr. Barrett‘s conclusion that Expensify gets alot of resumes from .NET developers. From the employer’s perspective, following the law of averaging, it makes perfect sense. If your software platform is Linux, PHP and Bash, why would you hire a .NET developer? Rather, underlying the above two points is an implicit advice to startup employers—don’t use .NET technologies—which, I daresay, is ill-conceived. But hey, I’m not a CEO of a company. Not yet anyway. ;-)

In the end, probably nothing more than simply a publicity stunt.

What to do when CryptAcquireContext() fails

I’m using CryptoAPI to do encryption and encountering an error on Win2008 Terminal Server which enforces Mandatory Profiles. CryptAcquireContext() fails with a message of either “keyset not found” or “The profile for the user is a temporary profile”.

I’ve tried the same test on WinXP using a guest account and got the same thing.

So, what gives?

Well, this blog post (RSACryptoServiceProvider fails when used with mandatory profiles) way back in 2007 by @alejacma explains:

CryptAcquireContext will fail with NTE_TEMPORARY_PROFILE error when called from a mandatory profile.

Mandatory profiles are read-only user profiles. Since changes to the mandatory profile cannot be saved, PKI design doesn't allow this operation, and CryptAcquireContext prevents this scenario by failing.

The moral of this story is: RSA sucks, and I am now Rijndael’s new biggest fan.

By the way, troubleshooting this problem had given me the chance to learn a few more WinDbg commands:

.sympath srv*
.sympath+ c:\localsymbols
.reload –f
bm /a advapi32!CryptAcquireContext*

6 months

The following event is happening to me now. There is a certain business Internet service provider in Toronto whose sales guy signed me up on an agreed network speed, whose installation technician, upon arrival at our site, made a judgment that they could never provide service at said speed and aborted the install, who sent us a bill 30 days later for service never rendered, which thus far has taken me 6 months to fight for a refund. I’m stuck with a jaded feeling as I sit here now preparing to fax back a copy of the receipt proving to them that I did indeed return their modem. This internet provider uses a third party to process equipment returns.

The following event happened to me a couple of years ago. There is a certain home building materials vendor in Toronto, who uses a third party for their credit provisioning, who miscalculated my returns on their monthly statement, which took 6 months for me to successfully dispute the discrepancies.

A couple of conspiracy theories is now bubbling in my head.