February 2007 Blog Posts

Google Talk Task Bar Focus Problem

I use Google Talk and like it as a reasonable chat client, but the primary use I have for it is the mail notification for Gmail.

To get to your Gmail inbox from Google Talk, you right-click the icon in the Windows task bar and a little menu pops up and lets you choose "Inbox." The problem I'm having is that it doesn't always quite work. You not only get the Google Talk menu, but also the standard task bar menu:

Google Talk focus issue

If you left-click the task bar first, then right-click the Google Talk icon, everything works. If you dive in and right-click the Google Talk icon directly, this weird focus thing happens. What gives?

Sick of FizzBuzz

Technically Reginald Braithwaite started it, but freaking Atwood blogged it and now almost every blog in my RSS reader is talking about it, so I'm going to throw in my two cents in and then I'll shut up.

The controversy: Lots of people who claim to be programmers actually can't program.

What kills me is that this surprises anyone. It's sort of like blogging that "lots of people who see the sky claim it is blue." There are a lot of incompetent people, folks, but no one will admit they're the incompentent one. Did you ever notice that everyone else on the road is a bad driver except you?

The point Atwood was making is that it's kind of sad that people who come out of school with these great qualifications or have these amazing resumes or whatever can't actually do what they claim. If you give them a simple problem to solve, they can't do it. (That's the "FizzBuzz" thing: Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz.")

Hanselman has a pretty good response - that some features are inherent in the person ("When you're putting together a basketball team, you have to remember that you can't teach height."). I sort of buy that and sort of don't. There have been successful shorter basketball players. From personal experience, I know that I got shafted out of having a career in 3D animation and modeling because art houses believe you can teach an artist computer science but you can't teach a computer scientist art (even though I had a portfolio, I also had a CS degree and not an art degree, so no one would touch me; times may have changed since then).

Phil Haack brings up an interesting corollary - that it's fascinating how many people solved Atwood's puzzle in the comments (utterly missing the point) and got it wrong because they didn't read the requirements thoroughly. That's just as bad as not being able to program.

But the best response I've seen, and the one I agree with most, is a tiny blurb from Mike Gunderloy on today's Daily Grind:
...about 90% of the "essential .NET knowledge" and "write this code at an interview" questions I've seen (not specifically on Scott's weblog, but around in general) are beyond me, despite a successful programming career that spans a couple of decades now. There are other skills besides tucking stuff away in your head. Dogged determination, a few basic techniques, brute force, and good skills at looking things up can go a long way in this industry - not that those are the most common skills in this industry (or any other) either.

So there are really two issues here: What can you do and what do you know?

From a "what can you do" standpoint, I think programming at the interview is a must. If I'm interviewing someone for an ASP.NET job, I like to see that the person can create a page that takes some information in and echoes it back. It doesn't have to be anything special, just something to indicate you know your way around. (Bonus points if you can do it without the visual designer.) I try not to have people "code on a whiteboard" because, frankly, I'm an Intellisense addict myself and rely on that and the compiler to tell me when I've accidentally used the "Count" property instead of the "Length" property or what-have-you. If you can pseudocode it, I'm good.

The "what do you know" question is more tricky. I find that the facts in your head are generally the things that are relevant to projects you're working on at the time and some remnants from past projects. For example, I'm not a COM guy. I got my CS degree on Solaris and my first couple of jobs were in LAMP land, so, no, I really can't tell you about the ins and outs of why COM needs this or the limitations of COM's foo. I've never needed to know, and frankly, if it came down to it, I'd go look it up, so there's really no point in having it memorized.

I can't tell you how many times I've been neck deep in some complex situation in ASP.NET and thought, "Hey, this would be a great interview question!" No, it wouldn't. It wouldn't be good because it's only really pertinent to the odd edge case situation I'm in, and it doubly wouldn't be good because I've been working with that exact thing for the last 80 working hours. If I were to ask myself that same question in a year, would I remember the answer? Probably not.

This reminds me of the best teacher I had in college, the guy who taught the computer algorithms class. Lots of kids didn't like him because of his teaching style. At the beginning of the class, he'd give a brief intro of what you'd be seeing. Then he'd put up a slide that described an algorithm - sorting, searching, whatever - and you'd copy the slide down. He'd ask for questions when everyone was done, and swap slides. Rinse and repeat. Tests were entirely over the slides and the book, and the test was open-book, open-notes.

Right now you're asking what the point was, aren't you?

The point is this: There is no time in your programming career where you'll be working without access to reference material. You need to be familiar with the concepts and aware of what's going on, but there's no point in memorizing things you'll be able to easily look up when you need them.

Pragmatic.

That's probably the most brilliant thing any professor ever presented to me in my entire college career. (That, along with my vector calculus professor admitting that we'd only really need to know vector calculus "out of curiosity" - that most of us would never use it again.)

So in my mind, the answer to questions like "What is the maximum amount of memory any single process on Windows can address?" is "Google." It's trivia. When something like that becomes relevant to what I'm working on, I'll go look it up and that's the point at which it will be fresh in my head. Somehow I don't feel like not having that information at-the-ready makes me less of a good developer.

What I'm more interested in, as far as "what you know," are conceptual things. Do you understand the various concepts of object orientation? Can you compare and contrast strong typing vs. weak typing? Can you talk to me about garbage collection and why it's important (or not important)? Which languages have you worked with and what were some benefits and drawbacks of each? When you get to applying for a specific position (e.g., an ASP.NET developer), can you answer some simple things like what the events are in the page lifecycle? Difference between a handler and a module? Things that you'll be using every day. I might not ask you to code a handler or a module, but you should at least know what they are.

Of course, if you can't at least pseudocode an answer to the FizzBuzz problem or, given a decent IDE, actually write an application that does it, don't bother applying.

Photographic Coolness

Found a couple of cool artists over at Boing Boing.

Aristocracy 2032: Portrait of Mistress AnaistaJeffrey Scott of "Factory 1019" does real photography and digitally enhances it to give it somewhere between a Blade Runner and MC Escher feel. I like a lot of these (though some are NSFW) and could easily fill my house with them, Jenn notwithstanding.

Symon Chow looks like he works in a little less digitally-modified photography, but is still very cool. It reminds me a little of Carnivale.

Site Down Issues

Man, the last week or so my site's been acting up because the server I'm hosted on has had disk trouble, service trouble, and any other trouble you can conceive. First the disk went bad, then they fixed that but not all the services (PHP) were running... then they got PHP running but MySQL wasn't running...

The last two days the MySQL service has been down but PHP has been up, which is why the blog was accessible through RSS (it's static XML right now) and the main page was sort of wonky and empty looking.

The interesting thing is that the hosting company had said they were going to move everyone off that server to a new server... but rather than just doing that, they futzed around for a while trying to revive this old server. I ended up having to specifically say, "Hey, what happened to the migration? Maybe an expedited move to the new server for MySQL users is in order?"

I hate to be the squeaky wheel, but dammit anyway.

I did learn something, though. I realized that uptime metrics described in percentages are sort of meaningless. Maybe other people realized this long ago, but if you think about it, you could be down for a whole day and still have a 99.7% uptime. You'd have to be down for four days to break the 99% barrier. That's four whole days - 96 hours.

I'm no longer interested in percentage uptime. I'm interested in hours of downtime. You want to impress me? Skip that "99.9% uptime" baloney and shoot for less than one hour of downtime per year. (And, yeah, I know the people giving out "five nines of uptime" garbage really mean an hour of downtime or whatever, but part of useful metrics is describing the metric in easily intelligible units. Don't make me have to calculate that crap. "Oh, we're only down for 0.042 days per year." Give me a freaking break.")

On the plus side, I get a good, personable response from the support people at the hosting company and they're totally understanding and nice and easy to work with. From that standpoint, I can't complain, and honestly, the service does make all the difference. Let's just hope we don't have another burp like this.

Old Spice Rewards Weekend

This weekend I proved conclusively that I am a true Gamerpoint Whore by completing the Old Spice Experience Challenge, increasing my Gamerscore by 1500 in about a week. Oh, hell yes. I plowed through King Kong most of last week and finished Gun this weekend. Good times.

Jenn was at my cousin's wedding shower all day Saturday and ended up staying over at my aunt's house (the shower was three hours away and my mom didn't feel like making the trip up and back the same day, so they stayed over), returning Sunday afternoon. That left me home alone. Hmmmm.

Saturday my dad and I had planned on getting our Xbox on over the network but his router wasn't configured to forward the right ports or something so while we were able to connect to other people, we weren't able to connect to each other. I guess that's the behavior you see when the router's giving you grief. Instead, we ended up watching some movies and hanging out, which was fun. It's always good to hang with Dad.

Sunday I cleaned up around the house a bit and when Jenn got home we went out for some Indian food. Can't get enough of that butter chicken.

Monday Jenn and I trekked around town, getting the usual chores done and gathering supplies to make a cat scratching post because the new cat could legitimately be considered a Weapon of Mass Destruction. We figure by making the thing we'll get exactly what we're looking for and save between $10 and $20 at least. Cat furniture is expensive.

We also took a look at some of the projects we'll be doing this spring that we'll be putting off. I'm generally in charge of indoor repairs and projects while Jenn is on external projects.

I know we've got some crown molding to put up and the caulking around some of the windows needs to be replaced, so I'll be in charge of those efforts. We might also need to paint the master bathroom since the walls in there are looking a little drab from moisture and so on. I'll probably look at doing some of the caulking over the course of the next few weeks and the rest closer to spring.

Jenn's agreed to deal with getting a new layer of barkdust put in (including organizing any prep work that needs to be done) and dealing with, once and for all, this crappy spot in our backyard that gets really soggy (plans and execution). It's nice to have someone you can count on to get everything done without procrastinating and without forgetting the details. Jenn rocks that way. That stuff will commence in the April/May timeframe.

Jack Is A Terrorist

Our new cat, Jack, is less "cat" and more "spider monkey with claws." The longer we have him, the wilder he gets. He has no issue flying out of nowhere to attach to your back, leg, head, chest, or anything else he can sink his little needle claws into.

I'm also wondering if maybe we should have named him Osama, because he's a damn terrorist. You never really know when he's going to strike. You find yourself very tense even just sitting and watching TV because at any time you might get fairly significantly injured. I was trying to play some Xbox 360 just this morning and just as I was getting into the game - attack! I have a fairly decent cut on my hand where he got me good.

I'm hoping he'll chill out, if just a little. I don't think my nerves can take it much longer. He's gonna break me.

Corillian Acquired By CheckFree

Looks like my company is getting acquired. People have always bandied about the notion of "what if" and so on, but I don't really think I believed it would happen. Yet here we are - CheckFree bought us out (which is ironic, because Corillian was originally a spin-off of CheckFree.... are we coming home to roost?).

There's a conference call later that will hopefully answer questions, but I find that most of these types of calls raise more questions than they answer, or at least muddy the waters so you don't really know what the answer is. You could ask if grass is green and you'd get a ten minute response about varying types of grass, season, water levels, atmospheric pressure, and the possibility of disease in the grass, all of which could affect the level and hue of color in the aforementioned grass but no one would really commit to saying the grass is green.

I've only got three questions:
  1. Do I still have a job?
  2. If I do, will I need to relocate to keep it?
  3. What's the story with existing Corillian options and ESPP shares?

I guess we'll see. I suppose short-term I can't complain - the stock's jumped like $1.50 just today.

The BASIC Classic Rock Test

Eric Gunnerson scored 74%. Rich Claussen scored 88%.

I scored 92%.

Rock Star
You scored 92%!
You damn rock star. You know all the basics, and if you got any wrong, I bet it was that stupid Traveling Wilburys question. Your friends are probably intimidated by your knowledge of classic rock and envy your impressive collection. When a classic rock song comes on the radio, you can probably identify it before the vocals kick in most of the time. You probably get good scores on the "maiden name of Clapton's mom" tests, too.
Hey, now, I'm a rock star!
My test tracked 1 variable How you compared to other people your age and gender:
  
You scored higher than 99% on notes


Wanna see how you fare? Check out The BASIC Classic Rock Test.

All Hopped Up

This is probably going to read almost stream-of-consciousness style because I'm all hopped up on Mountain Dew.

Saturday my parents came over to visit the new kitty. I have awesome parents. They brought over some very cool Da Vinci Code jigsaw puzzles, a nice picture for us to hang in the house, and a Twinkies bake set for Valentine's Day. (Twinkies were a staple in high school and I still love me a good Twinkie. Zingers are my all time favorite snack cake. In fact, I found them in the vending machine this morning at work and didn't hesitate a second in cramming them into my mouth. They're that good.) Jenn and I took them to their first Indian restaurant experience at The Curry Leaf and they liked that. Good times.

Sunday Jenn worked and I had to take little Jack to the vet because he's been sneezing a lot in the last few days and we thought he had a cold. Turns out some kitties have a virus in them that makes them sneeze and have a runny nose when they are stressed out. There's not much you can do for them since they have to fight it off themselves, but the vet gave me this nasty amino acid paste that is supposed to slow down the virus enough for the cat's immune system to fight it off. We have to give it to him and our other cat twice a day.

Of course, giving them this paste is easier said than done. Some cats like it, some don't. You can fool Xev into eating it by putting it on a couple of cat treats. Jack will do everything he can not to eat it, so we have to put it in a syringe and jam it down his little throat.

Jack has also started a new trick of taking a flying leap at you and climbing you like a tree. He's a wild little cat and we're going to have to break him of that because his little claws hurt. I spent a good portion of Sunday walking around with him clinging to my leg like a velcro monkey. It sounds funny, but it wasn't as cool as you think.

I refrained from doing too much Xbox playing this weekend because I'm all set up for the Xbox Rewards challenge starting today and I didn't want to get a bunch of Gamerpoints that could be credited toward my run in the challenge. Of course, at the time I'm writing this, the contest hasn't started yet so I'm wondering when they're going to get on the stick over there and roll out the signup form. Let's go already.

This coming weekend is going to rock. Jenn and my mom are headed to my cousin's wedding shower and will be there overnight, so my dad and I are going to play Xbox and watch movies and hang out all day. (Don't you wish your dad was as cool as my dad?) I'm not sure what all we're going to play, but I'm sure there will be some Halo in there because dad is a Halo addict. (Of course, it'd be nice if he'd play the single-player game more often to perfect his skills... hint-hint, Dad...)

I'm wearing my Mooby's Funployee shirt today, complete with Mooby's nametag. I found a label maker around work that laser prints on clear labels so I was able to put my name on the nametag and have it look perfect. Hey, it's the small things.

Disaster Recovery and Trouble-Free Continuous Integration

We've all got our source code in source code control systems (right?) that get backed up on a regular basis (right?) so we can reasonably easily recover from any issues and get right back to coding. You might even have a backup program running on your development workstation so you can restore corrupted files or settings.

Are you backing up your continuous integration server?

"Why," you might ask, "would I back that up? If I have all of my source in the backed-up source code control system, what else is there?"

It's something I know I take for granted - the continuous integration build server just being there and working. But ask yourself some questions:
  • If you had to re-create your build server, how long would it take you?
  • If someone modifies your build configuration and messes it up, can you roll back the changes?
  • How easy is it to add or remove a project from your build configuration?
  • How easy is it to set up a brand new build server?
Sure, some of those don't sound like disaster recovery issues, but by solving some of the issues, you can make your life easier on others.

Here are some tips that might help you make your continuous integration server experience a little more trouble-free. (We use CruiseControl.NET at Corillian, so I'll use that in my examples.)
  • Check in your build server configuration. Store your build server configuration files (e.g., ccnet.config) in source code control, just like your product source. If you ever have to restore the configuration or roll back a bad change, this will make it vastly easier.
  • Isolate build artifacts from the rest of the server. Put everything that has to do with your build - your source, the build server configuration files, state information - in an isolated folder. If you can, put it on its own logical drive. This will help you in backing up, restoring, and moving to a new server (should you ever need to). You'll know that all you need for the build server to run is in this one folder; everything else is peripheral.
  • Standardize everything. Your source code repository layout. The build output structure. The format of logs that get generated. Everything. This doesn't sound like it'd be helpful in easing your continuous integration experience, but it is very helpful. By standardizing your source code repository layout across all the projects you build, it's far easier to script any large changes to the build configuration. It also makes your configuration files look a lot like copy/paste work with minor substitutions. This ties into the next tip...
  • Generate your server configuration. If you have a standard repository layout, a standard build output structure, and so on, you're only a step away from using a code generation tool to generate any server configuration you need. We have a small XML configuration file that has the differentiating bits for each project - the location of the source code repository, the name of the project, the version label prefix - and use CodeSmith to generate our ccnet.config file. We use that same XML configuration file and CodeSmith to generate a NAnt script that automatically adds any folders for the projects on the build server and do the initial source code checkout. Using Subversion as our source code provider and tagging after each successful build, we can even script re-creation of the CruiseControl.NET state file for each project. A keen side benefit of all this is that adding or removing a project on the server is as simple as updating the small XML configuration file and regenerating all the config.
  • Build on a virtual machine. If your build server is a virtual machine, you can easily take periodic snapshots of the system and restore the whole system to a previous state. It also allows you to start new build servers easier by cloning a good build server image and creating/generating the configuration for your new projects.
Check out your continuous integration setup. If the server died a horrible death in the middle of the night, how long would it take you to get running again?

Rewards for Gamerpoints

Now this is what I'm talking about. Being a Gamerpoint Whore, I'm all about getting achievements on Xbox 360. Wouldn't it be cool if you actually got something for the points?

You can.

On February 12, visit http://www.xbox.com/rewards and register. You'll be placed in an "experience category" based on your Gamerscore at the time of entry. Then if you can raise your Gamerscore by 1500 points between February 12 and April 12, you get a reward (MS points, a shirt, a game... lots of different prizes).

Check out Gamerscore Blog and the Xbox site for more details. I'm totally in.

New Gamerpoint Rules

As a Gamerpoint Whore, it's nice to know the rules for how Gamerpoints get allocated by game. The new rules, posted at Gamerscore Blog, explain how games can offer a certain number of base points and add-on content can offer a small amount more.

Introducing Jack

Everyone, I'd like to introduce Jack:

This is Jack!

Jack is our new kitten, an eight-week-old Siamese/Tabby mix. You can see his body is light tan with white stripes, while his tail is dark brown with white stripes. It's fairly subtle coloring on his body, but it's really cool. He also has bright blue eyes like a Siamese.

Jack is a Siamese/Tabby mix - you can see the stripes.

He's wild - really wild - which is fun and will be good for our other cat once she warms up to him. She's needed a playmate for some time. (Right now she's being very territorial, but I don't think she'll be able to hold out for long - she just wants to be loved and you can tell she's just jealous of the new baby.)

This little guy has more energy than I know what to do with, but once he's played for a couple of hours straight, he crashes pretty hard.

Say goodnight, Jack.

We name our cats after TV show characters we like, and this one is Jack for Jack Bauer (from 24) and Jack Bristow (from Alias). (Our other cat is Xev, from Lexx.)

Some folks post baby pictures, I post cat pictures. So there you have it - the new addition to the Illig clan!

Five Things You Probably Didn't Know About Me

I was tagged by Scoble, so here's my five things:

I was the valedictorian in high school. I've always been achievement-oriented, even before gamerpoints were invented, and school was no exception. While I let some of that perfectionism go in college, I was very academically competitive in high school. I can't say it wasn't rewarding - it got me a free ride through college.

I never wanted to be a programmer. This was on my "about" page for a while, so you might or might not know this. I originally wanted to be a 3D graphics modeler, not a programmer. Through some unfortunate misunderstandings on the part of guidance counsellors, I ended up getting a Computer Science degree. I've grown to like it since then, finding the art in problem solving. Plus, it pays the bills.

I've driven the DeLorean from Back to the Future. When I was young I went to Universal Studios with my family and one of the special effects demonstrations had the DeLorean from Back to the Future in it, showing how they made the effect of the car flying through the air. It was actually the one they used in filming, too. I got picked from the crowd to sit in the driver's seat and "drive" the car while they green-screened in the flying effects. The flux capacitor was going behind me and all the gauges were running in the car, just like in the movie. It sounds dumb but I remember it like it was yesterday and still think it's one of the coolest things I've ever done. I even have a small scale model of the DeLorean on my desk at work.

I won several spelling bees in grade school. I was huge into the spelling bee thing back in grade school, and did pretty well at it. Not good enough to make it to nationals or anything, but pretty darn good. I have a box of trophies in my attic to prove it. I even gave the spelling test to the class in fourth grade rather than having to take it myself.

I can't stand newspaper or dryer sheets. Like, near phobia-level. I don't like how newspaper leaves newsprint on your hands or the film that dryer sheets leave on your fingers when you touch them. When I lived alone, I never used dryer sheets; now that I'm with Jenn, if I find a dryer sheet stuck inside one of my shirts I make her pick it out. Thank goodness the stupid junk-mail paper that gets delivered to my house monthly comes in a plastic bag so I don't have to touch it when dumping it in the recycle bin. I know this is going to prompt people to leave newspapers and dryer sheets all over wherever I go because people will think it's funny and not actually take me seriously, but I really, truly, can't deal with it.


There are probably actually like 100 things I could put on this list but most are either dumb or things you probably don't want to know, so we'll skip that. Instead, I'll tag some folks I'd like to hear from: Aaron, John, Steve, Jason, and Wayne.