Category Archives: Memories

The Interview


I graduated from the University of Waterloo in 1992 with a BMath in computer science. During my last term at Waterloo, those who were graduating went through interviews for full-time jobs. I interviewed for several companies, but I was only really interested in two: Microsoft in Redmond, Washington and Corel in Ottawa. I did my sixth work term at Microsoft, and they flew me out there again for the grad interviews. Unfortunately, due to some administrative mix-up, they had set up interviews for me on the assumption that I was a co-op student looking for a four-month position, not a graduate looking for full-time work, so those interviews didn’t amount to anything. I have no memory of flying or driving to Ottawa for the Corel interview, but I remember it taking place there, so I must have made my way there somehow.

I went through three interviews that day. The first was with the HR person (whose name, I believe, was Sandra Gibson – I have no idea why I remember that), telling me about compensation and benefits and such. The second was with the man who would be my boss if I got the job, Roger Bryanton, in which he told me about what their group did and the positions available. He asked me some technical questions as well as some more general ones like what I’d be interested in working on. Then came the third one, which is the only one I really remember. The interviewer was a man named Pat Beirne, who was Corel’s chief engineer and the man who originally wrote much of their signature application, CorelDRAW. I didn’t know it at the time, but the man was basically a living legend among Corel people. Roger brought me into Pat’s office, introduced us and left. I knew this was going to be a technical interview, so I put on my virtual propeller hat and got ready for the questions. Pat stood up and walked over to the large whiteboard on the wall to my left. It’s been over seventeen years since that interview, but I still clearly remember what he said next:

I’m here to find out if you know what you say you know.

I didn’t lie on my resume. I didn’t say I was an expert in anything. I didn’t say I had extensive C experience when I really only had some C experience. I didn’t say I was proficient in something I’d never used. But when the chief freakin’ engineer of the company says something like that and you’re twenty-two years old, even if you didn’t lie, and regardless of your self-confidence level, you’re gonna get nervous. And I was.

“Let’s start with an algorithm,” he said. I don’t remember what it was for, but he asked me to write some C code that would solve some fairly simple problem. There was a loop and an array and some numbers, but that’s all I remember. I wrote it up on the whiteboard in about 15-20 lines of code. “Great,” he told me, and I finally breathed out. I’d done it – I’d proven that I knew what I said I knew! I’d gotten the job, right? Not quite yet – we weren’t done. Not even close.

“Now make it faster.”

“Ummmm… OK…. I guess there are a few things being done here that don’t always need to be done, so you could add an if statement around them, and that would be a little faster.”

“Good. Now instead of handling just ten values, make it handle any number of values.”

“Oh… ummm… rather than using a static array here, you could dynamically allocate it.”

“Excellent. Now make it use half as much memory.”

“Uhhhhhh… you could…. ummmm…..”

“Here’s a hint: none of the numbers you’re storing is bigger than 50,000.”

“Oh, OK, you could use a short int rather than int and that would use half as much space.”

“Very good. Now make it faster.”

We went on like that for hours. Well, it felt like hours. “Make it faster.” “Make the code smaller.” “Make it handle negative numbers.” “Make it faster again.” By the time I was done, I’m sure I had three machine instructions that would handle an infinite number of values in a nanosecond using zero memory.

Of course even then I knew that he wasn’t testing to see how small and fast I could make this particular algorithm. He was testing three things:

  1. How well I knew the C language, and programming concepts in general
  2. What kind of problem solving skills I had
  3. How I perform under pressure

These are in no particular order; in fact #1 was by far the least important of the three. If I had #1 but was short on #2 or #3, well thanks for coming in and we’ll be in touch. Someone with #2 and #3 but was short on #1 – well, you can learn C. Which would you rather have on your team: A great C programmer who can only solve easy problems or falls apart under pressure, or a great problem solver who works well under pressure but doesn’t know C very well? The first one is useless – in fact he’s worse than useless, he’s a hindrance to the team. You take the second guy, send him on a five-day C course, and you’re all set. It doesn’t mean that he’s definitely going to turn into an awesome programmer, but he’s certainly got a better shot than the first guy.

“But how does the story end?”

I got the job, and worked for Roger on CorelSCSI Pro from June 1992 until August 1993, when I left Ottawa to start grad school at Western. One of the pieces of software I worked on at Corel was a CD-ROM driver for Novell NetWare, which did not support CD-ROMs at the time. When I started at Sybase in 1997, I was hired to replace someone who happened to be the NetWare guy. My boss saw NetWare on my resume, and I became the new NetWare guy. Twelve years later, I’m still the NetWare guy.

(Geek alert: technophobes stop reading now) I learned something about the C language that day as well – if you have a pointer to type X, then incrementing the pointer by one does not advance the pointer by one byte, it advances it by sizeof(X) bytes. During the interview, that bit of knowledge allowed me to make the code just a little smaller, but it’s such a fundamental part of how pointers work in C that I can’t begin to count the number of times I’ve made use of it since then. And I can honestly say that I learned it from Pat Beirne.

Blast from the Past


Gail was looking for some crafty stuff for Ryan to use in a school project, and came across some pencil crayons she must have bought during high school. On the front of the packaging read “You could WIN one of 6 Commodore 64 home computer systems”.

The grand prize is a Commodore 64 Computer (model C64), a Colour Monitor (model 1701) and a Single Disc Drive (model 154), approximate retail value $1,200. The second prize is a Commodore 64 Computer (model C64), approximate retail value $419.95.

The contest closes August 1, 1985. Damn.

$420 for a computer with a 1 MHz 8-bit processor, 38KB of usable RAM, 16 colours, and no persistent storage. You can now get a 4 GB USB drive the size of your finger for $20, which holds the equivalent of over 65,000 Commodore 64’s. The processor is vastly inferior to the one in your average kid’s $4 digital watch.

This shouldn’t be surprising, since we are talking about 23-year-old technology. But once I realize that I shouldn’t be surprised, it just makes me feel old — especially since my first computer was the the Commodore VIC-20, the predecessor to the Commodore 64, which had all of 3.5 KB of usable RAM. But I had a 16KB expansion cartridge, giving me an astounding twenty kilobytes of memory. They even had a 32KB expansion cartridge, but come on. Who could use up 32 KB of memory?

A trip back in time


Last Friday was my annual “ski day” at Devil’s Glen, organized by my second-line manager, Dave. I only ski once a year, though I’d like to increase that to at least a couple of times — maybe I’ll bring the boys out with me, since (a) Gail doesn’t care for downhill skiing, and (b) Nicholas is still free until he’s six. Devil’s Glen has an annual “Men’s Day”, which is when we went last year, but Men’s Day can be pretty busy, so this year Dave decided to have it on the Friday after Men’s Day. There was no free beer or gifts and no prize draws, but it was a little cheaper, the lift lines were almost non-existent and we had less trouble getting tables near each other for the 28 of us, so that was good. It snowed like crazy all day, which made for some treacherous driving on the way home, but the skiing conditions were great.

I used to ski all the time in high school, and now it’s once a year, at most. As a result, whenever I ski nowadays, memories of skiing back in high school come flooding back…

(Everything goes all wavy as we go back in time…)

It’s a Wednesday night in early 1986. I’m sixteen and in grade twelve at Dunbarton High School in Pickering, Ontario. After school ended at 3:30, I put my school stuff in my Adidas bag and head down to the tech wing where my skis and stuff have been stored all day. I find my stuff among the piles of other people’s stuff and head towards the ski club bus. 45 minutes later, we’re at Dagmar Ski Resort in Whitby [This is where I would normally put a link to the Dagmar website, http://www.skidagmar.com, but it’s incredibly lame (no pictures, no map, nothing) so I refuse to even link it]. We get changed, grab our lift ticket, and hit the slopes.

They’re playing CHUM-FM through speakers at the top and bottom of each lift. [This was back when CHUM-FM was a pop-rock station, not the “easy listening” “adult contemporary” “really boring” stuff they play now]. All evening, we hear songs like “These Dreams” by Heart, “Rock Me Amadeus” by Falco, and “Kyrie” by Mr. Mister. I’m skiing with my friends Glen Fujino and Kevin Day (and others, sorry guys but I don’t remember other names). Glen is a better skier than the rest of us, and likes to do goofy things like spin around and ski backwards in a tuck position. The guys I usually hang around with at school (Faisal, Doug, Paul, Glen) aren’t here because they don’t ski. My fourteen-year-old sister is out here somewhere with her friends as well, and every now and again I see her, but she usually ignores me. The big hill right in front of the chalet is called the Big Daddy, and we spend most of our time on that hill. There’s a little mini-mogul run down the right-hand side, underneath the chair lift. From the top of the lift, you can go left to hit the couple of black diamond runs, but they’re not really all that hard. One’s called the Dive Bomber because about halfway down there’s a drop-off; if you hit that with some speed, you can get some airtime. The other direction from the diamond runs, on the other side of the Big Daddy, are some other narrow intermediate runs, and beyond that are some easy ones, including one called Lover’s Lane. Inexplicably, very few jokes are ever made about this name, which is surprising considering the number of teenage boys here. A guy can yell “Hey, let’s go over to Lover’s Lane!” to a bunch of other guys, and nobody will make any “no way, man, I ain’t gay!” jokes you might expect from guys of our age group and maturity level.

At some point during the evening, we hit the chalet for dinner. This is almost invariably a burger and fries, scarfed down as fast as possible so we can get back out skiing again. At the end of the night, we return to the chalet before boarding the bus for a hot chocolate. After that, we pack up our stuff, put it in the holding area under the bus and get ready for the ride home. Glen, who is teaching himself some really weird computer language called “C”, tells silly jokes the entire way home.

(Everything goes all wavy again as we return to the present…)

Things I worry about now when skiing, but didn’t back then: Can I do the more difficult runs without killing myself or someone else? Will the pain in my legs stop at some point today, or just keep getting worse? How badly are they going to hurt tomorrow? Why haven’t I been doing squats for the last month, like I promised myself last year that I’d do this year?

Things I worried about then but not now: how cool do I look? Where are the cute girls skiing?

Comnetix redux


Stuff I remembered about Comnetix after publishing the last article:

  • We decided to get a 1-800 number for Boston police officers to call if
    they were having technical problems with our system. We tried during one meeting
    to come up with an easy-to-remember number — 1-800-CALL-BOB was our first
    choice (Bob was a retired RCMP officer and our head salescritter). A couple of
    suggestions, 1-800-DUMB-COP and 1-800-NO-DONUT, were nixed by management.
    We eventually got a number that didn’t correspond to any words.
  • On reflection, I think calling Joan (the VP) useless was a little
    unfair. She had zero technical knowledge, and occasionally asked some dumb
    questions, but it wasn’t her job — she did HR and accounting stuff. I didn’t
    much like her personally, but I did get paid every month, so maybe she was
    really good at what she did. Joan, if you’re reading this, my apologies.
  • One of the guys I worked with at Comnetix (Henri) is the brother
    of one of the guys I work with at Sybase (Jack).
  • One of the guys I worked with at Comnetix (Greg) left Comnetix about a year
    before I did and came to work for Sybase, though in the Mississauga office.
    His brother (Tim) used to work at Watcom (which eventually became Sybase).
  • Security in the Boston Police Department headquarters was a joke. I routinely
    just walked in the front door and either upstairs to where the IT people were,
    or downstairs to the server room, and the officer by the front door didn’t
    even look up. The code to by the door lock to the server room was ‘154’,
    which was the address of the building (154 Berkeley Street). I’m safe in
    posting this since the BPD headquarters has since moved to a brand new building,
    presumably with better security.
  • We also had a system in at the Massachusetts Bay Transit Authority (i.e.
    the Boston subway / bus cops) — they were far more concerned
    with security than BPD.
  • We went to a restaurant in Boston for dinner one night, and one of the
    guys asked for vinegar for his french fries. The waiter looked at him weird,
    then went away and came back with balsamic vinegar. Americans just
    don’t get it.

Of fingerprint scanners and Elroy Jetson


Before I started at my current job, I worked at a small company in Mississauga called
Comnetix. (Well, it was a small company when I worked there. When I left in 1997, there were less than 15 employees, but they’ve since grown a fair bit.) We made custom software for law enforcement agencies and the like — when I was there, customers included the Insurance Crime Prevention Bureau (of Canada), the RCMP, the Boston Police Department, the Metro Toronto Police, the Spanish National Police, and the Rochester Police Department.

By the time I left, I was the team leader of the Boston police system; the system was quite cool. Whenever a person was arrested and booked in Boston, their personal, physical, and crime information was entered into the system, their mugshots were taken with a digital camera, and their fingerprints were scanned using a digital fingerprint scanner (I wrote the driver for that puppy), and everything was stored in a database. They could also take pictures of any scars, tattoos, or other distinguishing marks. The system would then make the information available to the Central Identification unit, who would classify the fingerprints (storing the classification data in the database too), and then perform searches on the classification to see if this person had ever been arrested before. If so, they could update the record to let the people at the booking station know who this person was. This could all happen within minutes.

Once the classification was done, the fingerprint images could be sent electronically to the FBI, and they would be stored in their database as well. (I wrote the code to do that, and BPD was the first police department in the world to be able to do this.) In fact, when this part of the system went live in August of 1995, they made a big deal of sending the first set of real prints to the FBI. Within a couple of hours, the FBI had received the prints, done a search, and determined that the suspect had been arrested several times before, including once for assault with intent to kill, in another state — something the BPD wouldn’t have found out for weeks, if not months, with the old system.

We had other cool features in this app, like the ability to create a “lineup” — you chose a particular person in the database, then chose which physical attributes (height, weight, hair/eye colour, race, etc.) you wanted included in the search, and we would find other people in the database that matched (or matched closely) on the criteria you selected. You could then drag and drop the pictures into a photo array and print it off, and you’d have a bunch of pictures of people who look similar, which the officers could then show to witnesses, without having to get your suspect and witness into the police station at the same time.

I once installed a viewing station at the Secret Service office in Boston, so the Secret Service could do searches on the BPD database. While setting stuff up, I was sharing a room with an agent who was looking over a big stack of bills ($20’s or $50’s I think), checking which were counterfeit and which were real. One particular bill was giving him trouble, and he flagged down another agent who happened to be walking by. He showed her the bill and asked “This is real, isn’t it?”. The other agent looked at the bill for maybe three seconds before telling him that it was indeed real. I expressed my amazement, and he confirmed to me that she really can tell real money from fake that quickly. I was impressed.

The funniest story from that part of my career was when we were doing some on-site training. We had a test database set up, and during the training as well as testing, we could book ourselves and insert the records into the test database whenever we wanted. One day, I accidentally set the app to talk to the live database, and forgot to reset it back. Then we booked ourselves a few more times. It wasn’t long before we realized that these bookings weren’t showing up on the other test machines — that’s when I figured out what I had done. We had to confess our sin to the Deputy Superintendent of the BPD, and he allowed us to delete the records from the BPD database. There was no mechanism for doing this (once a booking is entered it’s supposed to be permanent), so I had to connect to the database directly and enter the SQL manually. However, the FBI link was up at the time, so one of my colleagues had her fingerprints sent to the FBI under the name “Elroy Jetson”. (Luckily, only one booking submitted during this time had fingerprints attached to it.) Once we figured that out, we had to get the Deputy Superintendent to issue a court order to get the records expunged from the FBI database. I guess there were some problems with this process, because I got a call from this colleague a number of years later (long after I had left Comnetix), saying that she was now living in the US, and had applied for something (don’t remember what) that required an FBI check, and one of these test records popped up in a search. She had to jump through a few hoops, but I think it all got straightened out in the end.

I have to say, I really enjoyed that job, mostly. Not only was the application itself really cool, and working with the police, FBI, Secret Service, and RCMP was cool as well, but we were using NeXTstep, which was just the coolest operating system I’ve ever used, with an amazingly powerful development environment. I’ve seen and used Mac OS X a couple of times, and it’s quite cool too, which is not surprising, considering it’s basically the next generation of NeXTstep.

But the job wasn’t perfect. Not only was I a project leader and developer, I was part of the testing team, the documentation team, the technical support team (carried a pager every other week for the better part of three years), the end-user training team, I set up demos for our head salescritter at a couple of sales conferences (on-site — New York City, Florida, Ottawa), and I was also the company sysadmin. Bonuses we were promised never showed up. The company was privately owned, so stock options were nonexistent. The VP was the president’s wife; he was technically savvy as well as a pretty good business man, while she was useless. She once gave me crap for leaving at noon on a Friday without permission — given the amount of unpaid overtime I had put in over the previous couple of years (including staying until 9 or 10 the night before this happened), I figured she could have given me some slack (and I’m still bitter about that 9 years later). And I had one raise in three years. All things considered, I’m perfectly happy in my current job, where I get to the do the stuff I love to do (development), and not the stuff I don’t want to do (support). Oh yeah, and my salary is more than double now what it was then.

Funny – I just realized that today I’m wearing the Hard Rock Cafe shirt that I bought on one of my many trips to Boston during my Comnetix years.

My Obi-Wan has no head


Wil Wheaton, already one of my favourite bloggers / writers, posted this article yesterday. Man, did it bring back memories for me. It’s all about how Wil went through a phase during his childhood when he played with Star Wars figures, as I did. He remembers to this day which ones he had, which ones he had that were broken (and what was broken about them), and which ones he wanted, as I do.

My first SW figure was Obi-Wan Kenobi. Eventually, his head broke off, and despite several efforts to glue it back on, it ended up just rolling around in the box where I kept the figures. I also had:

I always thought Hammerhead was the coolest, even though he was only in the first movie for a couple of scenes. That was it for figures, and the only vehicle I had was a landspeeder (and Wil has a great story about one of those), but I was jealous of my friend Jody who had the an X-Wing Fighter (the wings open up when you press down on R2-D2!) and Darth Vader’s TIE Fighter. Spoiled rotten, that kid was.