Rewarding your customers

On Wednesday I wrote about an email I got from the developer of ViEmu. Today, the author responded to some of my comments, which was nice, but even better was this bit:

As an appreciation token for your feedback, I’m enclosing a free complimentary license for my other product, Codekana ( If you download and install it, and copy the enclosed license key file in the installation folder (typically “C:\Program Files\Codekana”), you should be all set.

I know it’s only fair to reward people for doing things for you, but I’m still very much impressed by the way this little company treats its customers.

If you’re a vimmer who works with Visual Studio, do yourself a favor and buy the plugin.

I found my lab project grade yesterday…

… it was another 5/5, so I got my aesthetically pleasing sequence. ๐Ÿ™‚

The funny part is the grade was already there on the 22th, but I only found it yesterday, and even then by chance. The web site has a “my pages” section that contains information on the courses you’ve attended, but apparently only web course grades are stored there. This grade was on the exam results page, even when there was no exam in the course. Yesterday it just hit me that the grade might be there, and whaddaya know, there it was.

One would imagine that the Department of Computer Science would be the one department actually equipped to create a web site that didn’t suck. ๐Ÿ˜›

How many Salieris are there for every Mozart?

Every now and then I bump into particularly interesting occurrences of synchronicity. Today, reading a blog post felt like looking into a mirror:

I have worked for the same small company since my senior year in University. I have worked on projects developed in Ada, PHP, ColdFusion, Java, C#, VB 6, VB.Net, ASP, ASP.Net, and javascript/ecmascript. I’ve worked on projects that store data in MySQL, SQL Server, and Oracle including writing stored procedures, functions, and endless queries. i’ve messed around with ruby and ruby on rails. i’ve screwed with perl a little. i’ve made some bad flash applications and participated in a couple small open source initiatives. yet, through all of this i basically feel like i don’t know much at all.

Apart from the fact that the author obviously has a broader spectrum of technology experience, I could have written that.

On to the synchronicity: later today, my RSS reader brought me a post titled What to do if you’re Salieri? from Kyle Baley, “The Coding Hillbilly”:

[… snip …] I can’t help thinking there are a lot of Mozarts out there. And I don’t mean in their day-to-day work. That’s the easy part. I can pound out good code and talk best practices, often coherently.

Rather, there are people out there who are able to create beautiful music in our industry by asking the right questions and having a clear vision of what the state of the world should be. Or at least, they recognize problems I didn’t know existed [… snip …]

I know I keep getting better because today I can come up with elegant solutions to problems that a year ago I’d probably have solved by brute-forcing some spaghetti code solution — not that I wanted to, but because I couldn’t see a better way out — but that’s hardly comforting when there are people out there really pushing the envelope.

There are days when I think I’ll always be a follower rather than a leader. It’s not necessarily bad, but it’s not exactly what I hoped for either.

Personal touch

This morning I was sitting in front of the computer, blow-drying my hair when I noticed I had an email from the developer of ViEmu. I love the product, and I was entirely prepared to respond to a survey on how awesome it is, but then something caught my eye: the email wasn’t a bulk survey mail. It was a hand-written mail asking a couple of questions about how I liked the product, the web site and whatnot.

How cool is that?

A cynic might suspect it was just generated to look like it was hand-written, but the questions were phrased so that someone must have read my customer details and actually taken the time to only ask questions relevant to me (in this case, the questions regarding the ViEmu version for SQL Server Management Studio which I don’t have a license for were *not* relevant). And it felt like it was really addressed to me, not a Generic Customer™. I like that.

PSU blowup

Yesterday morning I woke up to the missus asking me about a strange smell she had noticed. I mumbled, still half asleep, “the computer’s power supply has blown.” She asked if I’m sure. I asked if the Mac Mini was still on. It was. “Try hitting the power button of the PC. Betcha it won’t turn on.” And it didn’t.

The PSU came as a part of my ’06 computer upgrade where I bought, among other things, an Antec Sonata Piano case. Two weeks later, the PSU blew up. I had to wait quite a long time to get a replacement. Two months later, the replacement blew up. Another longish wait ensued. About two years later, again, boom.

I searched for the receipt for the case where it said the warranty was one year. Already irritated, I removed the unit from the case, stuffed it in a bag and throughout the rest of the day at work, mentally prepared to unleash a verbal assault on the staff for not providing a replacement.

Much to my amazement, not only was the unit still under warranty (warranty time three years, the one year warranty was for the case. Who breaks computer cases anyway?), but they also had records of my earlier visits there so I didn’t need a receipt. I got a replacement in just under five minutes, and it was even a newer model.

The Finnish version of The Meaning of Liff has a word, “kรคlviรค,” for the feeling I experienced: when the person you had carefully planned insults for this time turns out to be nice and provide excellent service.

Positive surprises are always welcome. ๐Ÿ™‚

More on the Software Engineering course

In January, I posted about the misconception some students had, where they called every method an accessor. I might let that slide when mutators are discussed, them being the other half of the get/set pair, but as it turns out, the course teacher has actually redefined an accessor to mean an instance method. Sigh.

This comes in the wake of a course that happily promotes process-oriented software development, pretends that Java is the only relevant (OO or otherwise) language out there and asserts that the role of a skilled programmer in a project is merely to choose the appropriate algorithms and then fill in the blanks after a software engineer has first modeled the system in UML and generated the stub classes from there.

The non-mandatory course book (which I, probably unlike anyone else, actually bought) is also heavy on assertions to the tune of “such and such must be done” and rather light on actual arguments on why it is so.

To me this seems like the school administrators have drank the UML kool-aid without much critical thought or real-world experience. And before anyone argues that universities shouldn’t focus on real-world so much as the theoretical side of things, I’ll add that the target and other topics discussed on the course are very much geared towards real-life software engineering.

We discussed the topic at work today, and concluded that this is a cumulative problem with a number of contributing sub-problems. First, it seems (note: this is a highly subjective view) since education is free, few students take pride in excelling at it. Second, the elementary courses leave the impression that a large part of programming (and by proxy, CS in general) is voodoo magic. Third, since students are lacking in the fundamentals, they get entirely lost in the more advanced subjects.

I admit a lot of this is conjecture based on my experience at the Open University. Whether or not the same standard applies in the real thing remains to be seen. I hope I’m wrong.

Finally, it’s finished

Whoa, over two months since my last posting. Nothing new there, those who know me know the pattern. This time, however, I had a valid reason: I was busy with schoolwork. But now it’s finally over.

I finished my course package at the Open University. My programming lab is still in the process of being graded, but I’ve got a 5/5 for all the other courses, which is no mean feat.

As for the lab project, well, I may have gone a bit overboard on that one. I’ve got 3238 SLOC of code in the project itself, and 2122 SLOC in the JUnit test project[1]. find . -name "*.java" | xargs cat | wc -l tells me I’ve got 6716 physical lines (including comments and blank lines) in the main project and 3348 lines in the test project. I kinda feel sorry for whoever gets to grade it, because they’re probably expecting something an order of magnitude smaller.

Oh, and I probably should have scaled the project down a bit, but then where would the fun have been?

I really hope I get a 5 for that too, because, well, six fives in a row is just aesthetically more pleasing than five fives and, say, a two.

Hardware-pr0n-wise, last month I ordered a Samsung SyncMaster 245b, a 24″ widescreen LCD monitor. Very good purchase, although a bit pricey. Am having trouble coping with the 1440×960 native resolution of my work LCD., the root URL of this blog now redirects to It’s still hosted by Blogger, I’m just gathering personal stuff under the domain. I’m also trialing Google Apps for Domains to use for, haven’t yet decided whether or not I’ll keep it. Probably will though.

Next month I’m planning on tackling a math course. My math skills are frankly nonexistent, and that may actually prove to be a really big issue if I get accepted in at the university, so a little brush-up would be good. Sadly, even the stuff on the elementary course seems to be a notch or two above my understanding, but I might be able to make that leap if I try hard enough.

Interesting times!

[1] Data generated using David A. Wheeler’s ‘SLOCCount