Filming of "The Sentinel" At Sherway Gardens

I walked over to Sherway Gardens for lunch today and was in for a pleasant surprise: they were filming The Sentinel there. One stranger sitting next to me, in the food court, said he saw Michael Douglas (I guess he couldn't contain the excitement and had to tell some body). I missed him by an hour or so. Damn! No more late lunch for me.

Source Code Repository: The Commit Paradox

I shot myself in the foot today, figuratively speaking of course, while struggling with this little subtle dilemma surrounding the rules of code commitment (aka check-in):

  1. To make effective use of a version control system, you should commit your changes often, even if it means committing partially completed features.
  2. As a responsible developer, you should not allow your commit to break the nightly build and regression tests.


I had a piece of enhancement work this morning that I had just finished coding for, but hadn't adequately been tested so I didn't want to commit them to the repository just yet (trying to follow rule #2: don't break the build).

Just then, I realized that there's code duplication in a couple of places. So I decided to do some refactoring. An hour later, a credit of my stunning optimization skills, the code had been nicely refactored. The problem was: the feature enhancement no longer worked! Oops! I must have cut out some vital piece of logic somewhere. The original spaghetti code (that used to work) is now gone--eaten by the refactoring monster.

So in failing to follow rule #1, that set me back by about half a day.

But how can you follow two seemingly paradoxical rules such as ones above? On the one hand, you'd want to commit your changes as often as possible, and not wait until you've fully implemented the feature before committing. On the other hand, you wouldn't want your partial commits to break the automated build and regression tests.

Well, you might say that I should have made a back up of my changes before I start refactoring. Ah hah, but what's the point of a revision control system if you have to keep backups of your changes on the side?

I think the correct solution to this "paradox" would have been to use branching: create a new developmental branch for your enhancement work, even if it was a relatively small enhancement. This would have given me my own sandbox to play with and make partial commits to my heart's content, without breaking the nightly build (because the build would have continued to work on the MAIN branch). And then when I'm satisfied with my implementation, I'd merge the latest changes back into the MAIN branch.

Who needs GoToMyPC ;-)

GoToMyPC lets you access your PC desktop remotely from a web browser, for a fee, of course.

I think here's the next best thing: SSH + Windows XP Remote Desktop Connection. You use your SSH client connection to create a secure tunnel to your Remote Desktop PC. Granted, it's not the same as accessing your desktop through a browser, but...

If you're using Windows XP at home and you have an SSH server running on your home network, chances are you already know how to do this. Go and read more Dilbert--the rest of this article may not apply to you.

If you don't have an SSH server, and want to, install RedHat Fedora.

By default Remote Desktop Sharing is disabled on XP. You'll need to turn it on via the My Computer properties dialog.



In order to set up your tunnel, first, you'll need to download PuTTY, a very well-known SSH client created by Simon Tatham. If you're not familiar with this tool, here's the User Guide.

To create an SSH tunnel through PuTTY is quite simple. From the Tunnels Panel for your connection, add the following mapping:

  • Source Port: 127.0.0.2:3389
  • Destination: <Your RDP computer's IP address>:3389
    e.g. 192.168.2.100:3389
  • Type: Remote


Now, after you've established the SSH session with your server, you should be able to start up your Remote Desktop Connection client and connect to your remote desktop by entering the 127.0.0.2[:3389] in the Destination field (the part in the square brackets are optional). The Remote Desktop Connection client is found on your Start>Program>Accessories>Communications menu, if installed. If you don't have it installed already, you can download it here

For convenience, I usually put a shortcut on my Desktop, pointing to <Path_To_PuTTY_Program_Folder>\plink.exe -load <My SSH Tunnel Session Name> -l <login name>. This allows me to establish the tunnel with one single click. All I need to do after that would be to type in my password, when prompted.
PuTTY configuration screen

PuTTY Tunnel configuration screen

So why 127.0.0.2 instead of localchost [127.0.0.1]? Well, if you're using Windows XP on your local PC and you try to connect your Remote Desktop Client to localhost, you'd get a message by the application saying "I can't connect to myself" (I'm paraphrasing). The 127.0.0.2 IP address tricks the app into thinking that it's actually connecting to a remote computer instead of localhost.

Some of you nerds out there might wonder: why hassle with the SSH tunnel? Why not just connect to RDP directly? Well, I'm of a suspicious mind, and for some strange reason, I feel a little more secure when connecting through a 1024-bit DSA encrypted channel.

You can probably see that SSH tunnelling approach is not only limited to RDP, but can be used to create a secure tunnel into virtually any TCP service on the remote network: NetMeeting, VNC, Exchange Server.

I now have my mind set on my next toy: a wifi PDA running Windows Mobile. This way I can access my office desktop PC everywhere I go.

Usability blooper?

I've installed this piece of software several times before and haven't actually noticed this, but now it strikes me as being quite hilarious.

After I installed this piece of software, it politely asked me whether I wanted to restart the system. I answered "No". It then told me something to the effect of "I'm just going to ignore your 'No' answer, because I know what's good for you. So I'm going to go ahead and reboot your system anyway."

It then proceeded to shutdown my session and rebooted.

Guess which piece of software I'm talking about. :-)

Hint: it's a development tool.

OK. So it's a pretty old piece of software. But still...that's a pretty good usability screw-up, if there is such a thing.

Transferring your Skype settings to another computer

I installed Skype on my new computer and found that my contact list is empty. So...this means Skype keeps my contact list locally instead of keeping it on the central server like MSN Messenger does.
I wanted to transfer all my Skype contacts from my old computer to the new one. It would be nice if Skype provided a Contact List Export/Import feature, but until then, I found this simple hack on their support forum that did just what was needed:

  1. On your old computer, go to the "%USERPROFILE%\Application Data\Skype folder. There you should see a folder with your Skype ID as the name.
  2. Copy that entire folder to your new computer, under the same location. Make sure you shut down Skype before copying, otherwise you'll get some sharing violations.
  3. Start up Skype on the new computer. You may be asked to enter your login information again.
  4. After logging in, you may see that your contact list is empty. Don't panic! Just restart Skype. This time you should see your full "imported" contact list.

The above procedure not only imported the contact list, but also the chat history, call history, the works.

Visual Studio 6 and AMD64?

So after five years, I finally took the chance to upgrade to a (much) more powerful computer. And to add insult to injuries, it's a 64-bit machine (an AMD64 eMachine to be exact), running Windows XP. An aside note of caution: if you're considering putting on Service Pack 2 (SP2) and have no real need for doing it other than wanting to get the latest and greatest, my advice: don't! I found that a couple of my applications just won't run after it. I had to take out SP2, put SP1 back on, and then things ran fine.

Right now, I'm trying to install Visual Studio 6 on the new machine and having a hell of a time. The installer refuses to run, giving weird error messages about missing kernel32.dll entry points. I checked and the entry point is there in the DLL. I have a hunch it might have something to do with the 64-bit thing. I googled everywhere and so far haven't found a solution yet. Perhaps this is a sign to migrate to .NET? ;-)

Firefox 1.0.1

It has begun: Firefox security vulnerabilities are cropping up.



Phishers haven't seem to have paid too much attention because they're too busy hacking away at IE. Or is it because they know it's a geek's browser of choice? And when you touch geek, there's hell to pay. :-) But all this geekosity can only protect us for so long. Being a target is inevitable as the browser gains more popularity.

Interesting to see what the patch rate (turnaround time from discovery to patch availability) will be like for future vulnerabilities, compare to the likes of IE.


Here's a list of vulnerabilities patched in 1.0.1.

Ugrade now!

Why the heck did Sympatico disable SMTP authentication?

OK. I'm really p.o'd about this. I've been a (relatively) happy Sympatico customer in the last four years, but recent development this past week makes me think again (hate it when I do that). I found out that I can no longer send my Sympatico emails from my office using my Thunderbird mail client. A little digging underneath the cover and it turned out they (Sympatico) disabled SMTP authentication on their mail server.

If you don't know what SMTP Authentication is, it just means that the mail server requires you to enter a user name and password when you're sending mails through it. In the case of Sympatico, they've turned it off, which isn't so bad except they've also disabled relaying.

OK. What's "relaying"? It means the server's ability to deliver (relay) your mail message to a server other than itself. So if you're using mail1.com's SMTP mail server to send a message to someone@mail2.com, the server at mail1.com has to "relay" the message to mail2.com for delivery. It's not called "relaying" if I'm using mail1.com's server to send a message to someone_else@mail1.com.

Back to Sympatico. What they've done is made it so that if I'm outside of my home office, I can't send mails! A few emails back and forward with their support staff today and I still couldn't get a straight answer on why they did it. Instead, I was suggested to use their web based GetEmail service. Unacceptable workaround! Reason 1: the user interface is fuuugly! Reason 2: I no longer have control over my Sent Items because they're in two places--the web client and my Thunderbird archive. As a side remark, I never delete any of my legitimate emails. Instead, I archive them, which is why the concept of GMail has some appeals to me.

Now, they must have done it out of some sort of security concerns--I, of all people, should understand that. For a small organization, may be, but for an ISP to use this kind of heavy handed tactics? OK, Someone's been spamming our server, we don't know how to stop the individual spammers, so let's treat them all as spammers! They're all guilty! Let's nuke 'em all.


So thanks, Sympatico. I think I'll switch off that email address from now on and seriously start using my YahooMail or Gmail account, which, by the way, supports POP3 and SMTP.

Hmm...Now that I think about it. Sympatico recently joined forces with MSN, and MSN never did like SMTP. I wonder if this isn't all part of some evil master plan to take over the world.

Look at what they did to me: they've made me senile!

Microsoft's AntiSpyware Tool Removes Internet Explorer?

Just came across this rather amusing article on BBspot.com:

Many Microsoft Windows users who downloaded the recently released AntiSpyware program from Microsoft, or had it installed through an automatic Windows update, woke up to a surprise. Unintentionally, the heuristics of the software detected Internet Explorer as spyware, and removed the program from their systems.


If only it were true....

Two-faced

I started a Vietnamese version of my blog this week, for those readers curious about that other side of me. Now I'm virtually bilingual.

Ease of Use

Lately, I've been making it a personal goal to study/research more on the latest GUI usability trends, in my continuing quest to build more and more intuitive UIs into the softwares that I work with.

I was down at business partner's office this week conducting training, getting their folks up-to-speed on AppConnector. At the end of the session, one of my "students" made a comment which I thought was a really nice compliment. She said "I really like [the fact] that [AppConnector Studio] is so easy to use".

Yes, AppConnector is simple to use, but this was not by accident. We really focused on the non-programmers as our typical user audience. Sure, there's been some mistakes made in the beginning, but when we started version 3.0, our mind set was that someone without any programming knowledge should be able able to pick up and use the product in a day or so, and they should be able to do it in a few simple steps. Creating an integration project should be a matter of configuring a bunch of component properties.

Although there's certainly room for the product to grow in terms of usability and functionality, the person's comment above showed us that we must be doing something right.

Oh the joy of business travel

Well, I'm stuck here at the airport again because of flight delays. If it weren't for the airport's wifi hotspot, I'd be bored to death. Apparently, America West is notorious for delays. I got hit with a three-hour delay on the way in, and this time, looks like it's going to be another red-eye. There is a high probability that it's just me, but I keep bumping into craps like these whenever I travel.

However, to be fair, I've got to say that their service reps are pretty good. What they lack in technical expertise (always some sort of problem with the airplanes--scary), they make up in customer service. On the way in, I got off my initial flight, missed my connection by 1 hour, half expecting to go through hell to try to arrange another connection flight, but there they were, standing at the exit door with my rebooked boarding pass waiting. Now, eventhough it looks like I'll be sleeping on a plane tonight, at least I'll be sleeping in first-class.

You may say that's nothing to write home about--it's to be expected. After all, the delay is their fault. That should be the least they can do. Some people expect alot. On the one hand, I've come to expect nothing from anyone. That way if I get nothing, then there's nothing to be disappointed about. On the other hand, you can argue that since you yourself uphold the best of standards, and, therefore, you should rightly expect--no, demand--the best in return. I'm not entirely sure which is a better character trait to have.

Karora Komics - part 1 Posted by Hello

Karora Komics

Just stumbled onto these on my old hard drive, thought it might be fun to post, just to show you how whacky Karora's R&D team can be. The next few comic strips are an actual debugging session that took place on 27-11-2002, with comic characters bbg as Gav in the Toronto lab, and IRCMonkey as yours truly, working remotely from home. We kind of took eXtreme Programming to the extreme.

Thinking of the tsunami victims

Well, no matter where you are in the world, unless you've been hibernating off some remote mountains or islands in the last 4 days, you must have heard about the latest tsunami disaster that hit South East Asia last Sunday, causing untold devastation.

It is at times like this that I feel so very fortunate to be living in such peaceful and (relatively) trouble-free country as Canada. I feel so undeservedly blessed in this life, as there are certainly thousands of people who are much more deserving than me. And I thank God for granting me these blessings. At times like this, for a brief moment, it makes me want to give up everything and devote my life to helping the less fortunate. Sadly, the selfish side of me is still winning the struggle against that thought.

But for now, a small contribution, I can do. The Canadian Red Cross has set up a page, South East Asia Tidal wave and Earthquake, that accepts online donation. In the spirit of the season, please help what you can. Be sure to select South East Asia Tidal wave and Earthquake as the Fund Designation if you really want your donation to go to the tsunami relief efforts.
God bless.

Not Designed for Dummies

With the holidays, and being away from home and the office (and still able to do work), I've been using my old Dell Inspiron laptop more extensively than I usually do, and I've come to notice how crappy the keyboard design is on this thing.

The Ctrl key is too hard. I'd do a Ctrl-S to save my code changes in the editor, and sometimes it would simply echo an 's' in the middle of my code (the Ctrl didn't take). I guess I didn't press hard enough.
Bad design point #1: the product encourages people to do the wrong things (pressing hard on the keyboard in the long run is a health hazard, or so I've heard).

The TouchPad mouse is another thing. It's positioned right below where your thumbs would be located if your hands were fully positioned on the keyboard. I'd be typing along and then all of a sudden, the cursor would jump half a page down, and I find myself hypertyping in the middle of another block of code. What happened? Oh, I guess one of my thumbs must have touched the TouchPad by accident, triggering a mouse click that puts the cursor somewhere else.
Bad design point #2: the product encourages people to do the wrong thing without even realizing they were doing it.

May be because it's just an ancient Dell, or may be it's my seating posture. But this experience reminds me of how critically important usability is to any product, computer related or otherwise. To be usable, the user interface needs to be intuitive. If I build a product that does something when my users expect it to do something else, then this is a very bad thing. It's most likely qualified as carnal rule #1 of usability design, because if this happens too often, eventually the annoyance factor kicks in and my users will be cursing me for using my product.

Upon reflection, this is more of a wake-up call for myself than anything, because I at times make this very mistake in designing software user interface. I guess I need to have that "Design for Dummies" logo engrained in my head. But then again, if you're building radically new things out-of-the-box that have never been done before, and especially if you don't have usability experts on staff at your disposal, then the only true test of usability would be to put out beta releases, and get as many users as possible to use it, then make the necessary adjustments based on their feedbacks.

PuTTY security holes in version < 0.56

A little bit of old news. I just saw this on the PuTTY site:

2004-10-26 ANOTHER SECURITY HOLE, fixed in PuTTY 0.56
PuTTY 0.56, released today, fixes a serious security hole which can allow a server to execute code of its choice on a PuTTY client connecting to it. In SSH2, the attack can be performed before host key verification, meaning that even if you trust the server you think you are connecting to, a different machine could be impersonating it and could launch the attack before you could tell the difference. We recommend everybody upgrade to 0.56 as soon as possible.

That's two really bad holes in three months. I'd like to apologise to all our users for the inconvenience.

This Day in History

On this date:

In 1783, George Washington resigned as commander-in-chief of the Army and retired to his home at Mount Vernon, Va.

In 1893, the Engelbert Humperdinck opera "Haensel und Gretel" was first performed, in Weimar, Germany.

In 1928, the National Broadcasting Company set up a permanent, coast-to-coast network.

In 1941, during World War II, American forces on Wake Island surrendered to the Japanese.

In 1948, former Japanese premier Hideki Tojo and six other Japanese war leaders were executed in Tokyo.

In 1968, 82 crew members of the U.S. intelligence ship "Pueblo" were released by North Korea (news - web sites), 11 months after they had been captured.

In 1972, Thanh Hai Tran was born.

In 1980, a state funeral was held in Moscow for former Premier Alexei N. Kosygin, who had died Dec. 18 at age 76.

In 1986, the experimental airplane "Voyager," piloted by Dick Rutan and Jeana Yeager, completed the first non-stop, non-refueled, round-the-world flight as it landed safely at Edwards Air Force Base in California.

In 1987, Lynette "Squeaky" Fromme, serving a life sentence for the attempted assassination of President Ford in 1975, escaped from the Alderson Federal Prison for Women in West Virginia. (She was recaptured two days later.)

In 1997, a jury in Denver convicted Terry Nichols of involuntary manslaughter and conspiracy for his role in the Oklahoma City bombing, declining to find him guilty of murder.

[Courtesy of Yahoo.com]

AppConnector search result by Google Posted by Hello

Karora's AppConnector finally ranked #1 by Google!

Up until recently, when you google for AppConnector, the first hit you'd get is one of our reseller's web site instead of Karora's web site. It's embarrassing, considering that we own the trademark for the name. Well, no longer. As of today, we're first in the hitlist. Woohoo!!!

Next mission: getting us to come up #1 for Desktop Application Integration. :-)