Showing posts with label Work. Show all posts
Showing posts with label Work. Show all posts

Thursday, June 20, 2013

My first business trip: Elizabethtown, PA

I have loved programming computers since I wrote my first program on my Commodore VIC-20 back in grade 9 (that would be 1982 – damn I'm old). I also got pretty good at it, which explains why I'm still doing it over 30 years later. Being a programmer has had many rewards for me over the years, and one of the perks (before Sybase/SAP, anyway) was travel. I worked for Microsoft in Redmond, Washington for four months on my last university co-op work term, and flew out there again a few months later for grad interviews. While working for Corel, I went to New York City for a day. I was only at Comnetix for three years, but while I was there I went to Boston countless times (roughly once a month for those three years, sometimes for weeks at a time), Washington DC, New York City (again, for a day), Ottawa, San Francisco twice, Naples Florida, and I would have gone to Spain for a project if I hadn't already had a vacation booked at the time. In my sixteen years at Sybase, I've only been on three business trips, all to Baltimore, but now that I have a family, I'm fine with that.

But my very first programming-related trip was to Elizabethtown, Pennsylvania. Now I know the programmers among you are wondering "Damn, Graeme, how did you score that?" This is a place that I would wager very few of you have ventured. And if you actually used the term score, you have definitely never been.*

When I was in grade 12 (this would be the spring of 1986), a few of us were asked by our computer science teacher Miss Gray if we wanted to participate in a programming contest run by the American Computer Science League. We would be given a few questions, and we'd have a limited amount of time to write programs to answer the questions. This sounded like fun, so we entered and did really well – well enough to garner a trip to the finals. And not just the Canadian finals, this was for high school students across Canada and the US. (Actually, another guy that went, Faisal, reminded me that we didn't actually make the finals, but some other team wasn't able to make the trip so we took their place.) The finals were held in, you guessed it, Elizabethtown, Pennsylvania. Five of us were chosen to go: me, Faisal, Glen M., Glen F., and Paul. Miss Gray and our school principal Mr. Peleschak came too.

Mr. Peleschak was an interesting guy. He was the principal of the school for our entire five years there. He was an older gentleman, very friendly, almost grandfatherly. He had a full grey beard and always wore a smile. Back in the politically incorrect past, every school day began with a recording of O Canada followed by the Lord's Prayer. (I remember being a defiant atheist and not bowing my head during the prayer. I was such a rebel.) There were numerous different recordings of the Lord's Prayer, all done by Mr. Peleschak himself, and all different in some way. For example, in some he said "forgive us our trespasses", others had "forgive us our sins", and still others had "forgive us our debts". His various forms of prayer earned him the nickname "The Pope". Note that this was not a Catholic school.

We all drove down in Mr. Peleschak's van, and I think I remember more about the trip down and back than the contest itself. iPods were still 15 years away, so a few of us brought tapes and Walkmans (Walkmen?) to listen to music. Mr. Peleschak said he would put our tapes in the van's tape player so we could all listen, but we'd have to alternate – one of our tapes, then one of his. This was OK with us, except that all of his were John Denver. I wasn't much of a John Denver fan at the time and after that trip, I'm still not. But I don't think Mr. Peleschak was much of a Triumph or Van Halen fan, so I guess we were all even. Mr. Peleschak also smoked a pipe, so now and again the van was filled with pipe smoke (though I believe he opened a window when he lit it). Certainly by the end of the drive I was sick of the smell, but I did have to admit it was better than cigar or cigarette smoke.

The contest was being held at Elizabethtown College, and all the competitors stayed in residences there. Faisal and I were in one room (foreshadowing our time at the University of Waterloo, when we were roommates or housemates for almost four years), the two Glens were in another, and Paul was the lucky one who got to bunk with Mr. Peleschak. Miss Gray got her own room. I have no memory of what we did for food, or even how many nights we were there. Everyone got a welcome package, though the only thing I remember it including was a baby blue frisbee with "American Computer Science League" on it. Outside the residence where we were staying was a large open area. I don't remember if it was a football field or just a big green space but much of the time we were there, there were blue frisbees flying all over the place. Twenty-seven years later, I still have mine (pictured above). The words have faded a little, but it's still functional. It takes a lot to break a frisbee, when you think about it.

The contest itself was a complete disaster for our team. Each team could request the types of computers they needed, and we asked for Commodore PETs, which were the computers we were using at school. When we arrived, we found that they had provided us with the right machines though an older model. But the problem was that they had a different language installed. The machines shipped with a version of the BASIC language, but our school computers were using Waterloo Structured BASIC**, which was BASIC with extra stuff added. We were forced to adapt to using regular BASIC, and while not a huge disadvantage, it was certainly frustrating and distracting. I don't remember where we finished exactly, but I have a feeling we might have had full solutions for one or maybe two of the five questions, and partial solutions for the rest. And I think "partial solution" is pretty generous. In short, we got smoked.

The way home should have been memorable, since we stopped at Hersheypark in nearby Hershey for a day of fun. But the only thing I remember about that part of the trip were the street lights in town (shaped like Hershey Kisses) and the fact that many of the street names were chocolate-related. I have no memories of the park itself, though apparently we played mini-golf, since Miss Gray wrote something in my grade 12 yearbook about that.

About a year and a half after this contest, I began my studies at the University of Waterloo, though I didn't choose computer science as a major until second year. I guess my next computer-related trip was to Seattle in 1991 to work at Microsoft. That trip was pretty memorable as well, but you always remember your first.


* – That was just a joke, really. I have no negative memories of Elizabethtown itself, though we made fun of the place while we were there because it was so small. We lived in a town of about 50,000 just outside of Toronto, a city of 4 million. Elizabethtown had a few thousand people and wasn't close to anything big. At one point we saw three people walking together and Faisal said "hey look, an Elizabethtown gang!"

** – This ended up being an interesting coincidence years later. Waterloo Structured Basic was developed by a company called Waterloo Computing Systems, which later renamed itself WATCOM. In 1994, WATCOM was acquired by Powersoft, and a year later Powersoft was acquired by Sybase. I started working for Sybase, in the same office where WATCOM was located and with many of the same people, in 1997. We've moved buildings but I'm still there, and some of the people who were on the languages team in the '80s are also still there though many have moved on and some have retired.

Sunday, February 24, 2013

Yahoo decides this mobile thing is a fad

According to All Things D, Yahoo has made a change to their company policy on working remotely. The new policy is, in a nutshell, don't. Employees who currently work remotely will have to either move so they can work in a Yahoo office or resign. This seems to apply to workers who work 100% remotely as well as those who work from home one or two days a week. Does Yahoo really not understand mobile yet? The entire point of the mobile industry is to allow people to do stuff wherever they happen to be – you don't have to go to your bank to do your banking. You can shop without going to a store. You can send email, surf the web, watch TV and movies, and listen to whatever music you want from anywhere. But Yahoo employees must be physically located in their offices in order to be productive? Really?

The reasoning Yahoo has given for making this decision makes little sense: they had lots of people who worked remotely and weren't productive. So instead of firing the unproductive workers or making them come into the office, they decide to punish all of the productive remote workers as well.

Many tech companies talk about hiring the brightest and the best. Google is notorious for their hiring conservatism; they'd much rather pass on someone good than hire someone who turns out to be a bad fit. Yahoo is obviously not concerned with this. It sounds like they'd rather hire someone who lives physically close to a Yahoo office (or is willing to move) than someone awesome who doesn't (and isn't). Maybe they have great people up the wazoo and have decided they can afford to lose some of them, which they will. Maybe this is a cheap way of getting rid of some employees without having to pay them severance. That strategy would only work if the remote employees are the ones you want to get rid of and you don't mind having some that you'd rather keep quit.

I work from home at least once a week (and more if there's nasty weather), and have for ten years. Even though I don't work for Yahoo, I take it personally when I read stuff like "Speed and quality are often sacrificed when we work from home". I obviously can't speak for everyone who works at home, but it's quite the contrary for me. I frequently get a fair bit done at home – at least partially to avoid this very stereotype. If my manager decides that I don't get as much done at home as in the office, he may decide to revoke this privilege, and that's a privilege I greatly appreciate and don't take for granted. I certainly have the occasional work at home day where I don't get much done, but I also have the occasional work in the office day where I don't get much done. I also have days both at home and in the office where I'm very productive. And this is all ignoring the fact that I work at least two hours longer when I work at home since I'm not driving to Waterloo and back.

I've done work in a number of different rooms in my house. I've brought my laptop and gotten work done in mechanic's waiting rooms, doctor's and dentist's offices, hotel rooms, friends' houses, my parents' and in-laws' places up north, and even a couple of Tim Horton's. Every SAP employee worldwide is given a laptop so that they can work remotely if necessary. If I worked for Yahoo, their company policy would ensure that none of that would ever happen again.

Dear SAP/Sybase: I'd advise against this strategy. The goodwill that you'd lose from your employees would vastly outweigh any potential (and purely theoretical) productivity gains. Not only does it limit the people you can hire in the future, but I know of a few people who'd likely quit. In fact, I know of one brilliant engineer who you'd lose because he lives far away from the office and works from home a lot. And trust me, you really don't want to lose this guy.

Yes, that's right – you'd lose Ivan. Oh, and I'd probably be outta there too.

Disclaimer: I am not speaking for Ivan, nor am I making any kind of ultimatum to SAP/Sybase. Just saying that I disagree with this policy.

Thursday, July 07, 2011

If the coffee machine breaks, just drink water

At work, we have a fancy coffee machine in the kitchen which is similar to the Tassimo thing that's all the rage these days. (A friend of mine who didn't drink coffee bought one for his wife, and now he drinks at least a cup a day. You can judge for yourself whether that's a good thing or not.) The one at work takes little pouches (called "pods") of coffee, tea, or hot chocolate, pushes hot water through them at high pressure, and gives you a steaming mug within about 30 seconds. I don't drink coffee but I like the tea and hot chocolate it makes, and the fact that it's ready so quickly is very convenient.

When it's done making your beverage, it automatically drops the used pod out the bottom into a big bin that gets emptied regularly. Now and again a used pod will get stuck, but the people who supply us with the coffee pouches have posted a helpful (hand-written) list of instructions on how to clear it:

The order is VERY specific!!

Turn off, unplug. Open big door, then put your hand under silver packet door, pull off, set aside. Look inside. If you see a pod give 1/4 turn, GENTLY slide out the back (DON'T FORCE).

Plug in, turn on, close big door IN THAT ORDER.

Next, put silver packet door on by putting top into place, smack bottom with your hand. PACKET DOOR  MUST BE PUT ON LAST OR ELSE IT WILL NOT RESET! Good luck.

Good luck indeed. Sorry, but if your product needs this level of detailed instructions (complete with UPPERCASE COMMANDS) to fix a basic problem, you need to revisit your design. Luckily this has never happened to me but if it did, Tim Horton's is only a 3 minute drive away.

Thursday, October 29, 2009

Tool review: Microsoft Network Monitor 3.3

I have used Wireshark for packet sniffing and analysis for a number of years, starting back when it was called Ethereal. A little while ago I was using it to look at broadcast packets that our clients send out, and decided that it would be great if Wireshark could interpret our wire-level protocol and display meaningful information about the packets. After a bit of searching, I found that you can add plug-ins to Wireshark, allowing you to do whatever you want with the packet data. I found some detailed instructions on how to do this, beginning with:

  • Install a version of the Microsoft C/C++ compiler
  • Install a particular platform SDK
  • Install Cygwin
  • Install Python
  • Install Subversion
  • Get the Wireshark source
  • Configure the source
  • Build Wireshark

Once you're done all that, you can start looking at building your plug-in in C. I set up a Windows XP VM and spent a day or two doing all of this, but never got to the point of actually creating the plug-in. A few days later we had a team status meeting, during which I mentioned this project. A colleague, Peter, asked if I had looked at Microsoft NetMon, saying that he believed it allowed you to add your own parsers as well. I downloaded it and took a look. Thank you Peter, for saving me days, if not weeks of development time. In less time than it took me to set up the VM in preparation for writing a Wireshark protocol analyzer, I had analyzers written for the majority of both our UDP and our TCP protocols.

Writing parsers

As a packet sniffer, NetMon is not really much different from Wireshark, though I find the interface a little more intuitive. This might be because I'm running on Windows, and Wireshark has always looked to me like a Unix program that has been ported to Windows rather than an application written for Windows. They both support both capture and display filters. NetMon has colour filters as well – particular packets or conversations can be coloured based on the filter results. You can view packets as they are captured, save them to a file, and load them back in again later.

But writing a parser is orders of magnitude easier than writing a Wireshark plug-in. You simply tell it what ports your protocol uses and what the protocol looks like in a proprietary language (called NPL – Network Monitor Parser Language) that's vaguely C-like but very simple. Some properties of this language:

  • it handles bitfields, ASCII and Unicode text, and binary data, as well as various types of numeric values (8, 16, 32, or 64 bits, integer or floating-point, signed or unsigned, big- or little-endian)
  • you can define your own data types
  • there are a number of special data types built-in; if your packet contains a 32-bit IP address, for example, you can just specify it as IPv4Address and it will get interpreted and displayed as expected
  • you can make structs which group pieces of the data together, and arrays which hold collections of the same type of data
  • you use while loops and switch statements to modify behaviour. For example, your protocol might have a byte that indicates the type of packet, and then the structure of the packet depends on the value of that byte. No problem.
  • you can indicate both storage format and display format, so if you have a byte that's 0 for a request and 1 for a response, you can display the words "request" and "response" rather than just 0 or 1. The rest of the code can reference this value by name and get 0 or 1. The display string can be as complicated as you want, even referencing other pieces of the packet by name.
  • it supports conversations, and there are variables that have global, conversation, packet, or local scope

The help file installed with the app describes each of the language features, and I found a document that describes an example protocol in great detail.

Drawbacks

The biggest drawback of this tool is the parser editor. It's not very powerful – it makes notepad look feature-rich. I use Ctrl-Backspace (delete previous word) and Ctrl-Del (delete next word) a lot, since it's supported in Windows Live Writer, Word, and emacs, but support is spotty – sometimes it works, sometimes it deletes the wrong word.

The main feature it's missing is undo. It doesn't even have a single-level undo. If you hit backspace one too many times, you'd better remember what that last character was because it's gone. An editor that doesn't support undo is pretty much unacceptable in this day and age, and I lost data more than once because of it. Once you realize that you can't undo mistakes, you end up clicking Save a lot more often, and do things like copy the file to a backup file before you make big changes. I checked my files into source control and started checking them in periodically, which is a good idea anyway, but if the parser stuff wasn't so damn cool, the lack of an undo feature might be a showstopper. Emacs supports Ctrl-A and Ctrl-E to get to the beginning and end of the current line respectively, and sometimes I instinctively use those keystrokes in editors where they're not supported, like this one. Unfortunately, Ctrl-A here means "select all", so doing that and then typing something is disastrous because there's no undo, so you just lost your entire file. You need to quit the file (do not save!) and then reload it, losing whatever changes you had made. Even a single-level undo would save you from that.

The compiler has some problems as well – there were a number of times where I got compilation errors that were badly written or vague enough that I didn't know what the problem was. It would point to what looked like a valid statement and say that it was unrecognized or invalid, and it turned out to be because of a missing (or extra) semi-colon on a different line, or a language rule that wasn't obvious.

Once you've made the changes to your parser, you have to save it and then click "Reload Parsers", which reloads all 370+ parser files it knows about. Surely there could be a way to just reload the one that I changed? Now, there are dependencies between files, so changing one file might require that a different file be reloaded, so reloading them all is the safest but it's slow. Ideally, the tool should be able to figure out the dependency tree and only reload files that depend on the ones changed. And the tool should prompt me to save if I have an unsaved file and I click "Reload Parsers".

If anyone from the NetMon dev team reads this, here's a bug report: If I load a parser file, then paste some code into the file, it's not marked as "dirty" until I actually type something. Also, if I load a display or capture filter from a file, this generally means "replace what's in the textbox with the contents of the file", not "insert the contents of the file into the textbox at the current cursor position". I can see how that feature might be useful in combining filters, but it should not be the default.

As powerful as the NPL language is, there are things it simply can't do. In my case, some of our packets can be encrypted or compressed, but the NPL language can't decrypt or decompress them. It would be nice to be able to write a small plug-in that could do these types of things, but it's not supported. The Wireshark approach would work for that.

Experts

For those analysis needs that are not satisfied by parsers, NetMon supports things called "experts", which are external programs that can read the data from a capture file and analyze it in whatever way it wants. It sounds similar to a parser except that it's written in C or C++ (or C#, I think) and has the limitation that it only works on saved files, so you can't look at the results in real-time as you can with a parser. I've stared to write one of these to solve the decompression/decryption problem I mentioned above. There doesn't seem to be a way to decrypt the data and write it out into a new capture file, but I can at least decrypt, parse, and display the data. I can reuse the parser code I've already written, since the program is dealing with pre-parsed information, but I have to grab each field individually and display it, so I essentially have to rewrite all the display code in C.

Summary

Overall, this is a very cool utility and has replaced Wireshark as my packet sniffer of choice. The documentation is pretty thorough and it includes some good examples. If all else fails, the parser code for all the other supported protocols is right there. There is a help forum to which I've posted a couple of questions and gotten quick and helpful responses. I wrote a while ago about how cool Windows Live Writer is, so kudos to Microsoft for yet another cool utility.

Monday, September 14, 2009

Not too distracting

We're having some work done on the building I work in. This was the view from my office for part of today.

WorkerOutsideWindow

Sunday, March 22, 2009

Telecommuting tools

I wrote earlier this week about my experiences telecommuting, and after reading a comment left on that posting, I wanted to write a little about the tools that I use to be more productive when working at home. But first, a bit of history.

Back when I started at Sybase in August of 1997, my friend and colleague Lisa suggested I ask the IT people for an extra monitor, keyboard, mouse, and power cable so that if I wanted to work from home, I'd just have to bring my desktop machine home and plug 'er in. I did this, and this made things pretty easy for the one day every few months that I worked at home. My desktop machine, running Windows NT 4.0, had a modem installed, and when I wanted to check my email, I had to unplug the phone on the desk and plug the cable into the modem, dial into Sybase, and then synchronize Lotus Notes. I only did this about once an hour because it was a pain. If I wanted to check some files out of source code control, I had to write down the name of the file in my notebook, manually reset the read-only bit on the file, and make a copy of the file in case I needed to revert it. Many times I forgot the copy and was unable to revert if I needed to. When I got to the office the next day, I'd have to go through the list of files that I wrote down and check each one out.

After a few years of this, management sent an email around asking if anyone would be interested in having a laptop rather than a desktop the next time that machines were refreshed. I responded with something like "Yesyesyesyesyesyes" several milliseconds after reading the email, and a few months later, I had an IBM laptop. This made things orders of magnitude better — I brought the extra monitor and stuff back to the office, and was then able to sit at the kitchen table when working. I had broadband internet at home by this point but no router, so I still had to use the modem to get email. Another couple of years later, I bought a wireless router for home, as well as a wireless PCMCIA card that I could plug into my laptop. I installed the Sybase VPN software and nirvana was achieved. I could then simply run Notes like I normally would to send and receive email, and I could also use our source code control software directly. I subsequently tired of Notes so I moved to Outlook and then a few years later, Thunderbird.

Back to the present. Here is a list of tools I use to make telecommuting easier:

  • Firefox for web, Thunderbird for email, MSN Messenger for IM (this is true in the office as well as at home)
  • A lot of people seem to use Skype for phone, but I don't really use the phone all that often. My regular phone works just fine. It does have a speakerphone, which makes things easier, especially for long conversations. Our old phone had a headset that worked pretty well too. That allowed me to walk around while talking on the phone which I always tend to do when not typing.
  • Broadband internet (absolutely required!) and wireless network, though wired would work fine if the router was handy or there were drops available.
  • VPN software is obviously a must. I won't say which VPN product Sybase uses for security reasons (security through obscurity, dontcha know!), but one of the "features" is that it automatically drops the VPN connection every 12 or 24 hours or something, even if the connection is in use, and with no way to cancel it. When the connection has been idle for a while, I can understand it but every now and again I'm in the middle of copying some large file to or from work and I get a popup saying something like "The VPN connection will be dropped in 2 minutes". Since there's no way to cancel it, the message may as well say "The VPN connection will be dropped in 2 minutes. I hope you're not actually using it, but if you are, well, it sucks to be you." I just have to hope the file copy finishes in that time, or that I can re-connect the VPN fast enough that the copy just continues. If not and the copy fails, I have to reconnect the VPN and start the copy all over again. My description makes it sound like a huge problem, but it's actually only bitten me once or twice in however-many years. It's just annoying that I have to reconnect, especially since the VPN software is buggy and sometimes crashes while connecting.
  • Remote Desktop when connecting to Windows machines if possible. Some of our older (Windows 2000) test machines don't support this, so we use VNC for those. But Remote Desktop is preferable because it's faster and replicates the user experience more closely. If you maximize the Remote Desktop screen and the machine you're connected to isn't heavily loaded, you can almost forget that you're connected to a remote machine. This is not the case with VNC.
  • When doing Unix stuff, I use VNC to connect to a Unix machine in the office and then use that to rlogin to other Unix machines. This works quite nicely, except that every now and again, I'll be in the middle of typing some stuff and a character will get repeated for no apparent reason. I'll be typing and something like cd /tmp/grrrrrrraeme will show up. Very irritating. I'm sure it's a problem with the VNC client software, because I occasionally see it in the process of repeating – like it thinks I'm holding the key down when I'm not – but when I hit that key again, it stops. I suspect this is because it got a KEYDOWN message but missed the corresponding KEYUP message. I have never seen this when VNC'ing into a Windows machine.
  • I have a couple of VMware VM's set up on our VMware server so I can do stuff on a machine that's in our engineering subnet when I'm at home. Another VM has all the NetWare development stuff installed on it, though I rarely need that anymore.
  • Apple iPod (5G, 80 GB) along with a Logitech Pure-Fi Express Plus dock for music. Another absolute must.

Sunday, March 15, 2009

Telecommuting

I've worked as Sybase since August 1997, and have been a part-time telecommuter since January 2004. I already worked at home infrequently when the need arose (as did many others in our group), but at that time, my (old) car was around 275,000 km, and I wanted to reduce the mileage I was putting on it so that it would hopefully last a little longer. I asked my boss if I could regularly work at home one day a week (every Friday). He asked his boss who asked the President of the company (who to this day I have never met), and they all OK'ed it on a trial basis. Five years later, I'm still at home every Friday, and sometimes on other days as well. If there is a lot of snow in the forecast, I will generally work from home; in the past, I have had days where it took me two hours to get to work and the same to get home, and wasting that much time (and gas) seems really dumb if I can work at home and avoid it all. I've done this for a couple of years now, and I'm sure there have been days where the traffic would have been fine despite the snow, but one day a few weeks ago it was snowy but I didn't think it was that bad, so I figured I'd brave the weather. Stupid move. It took me a little over two hours to get to work, and then about an hour and a half to get home.

I've read a number of articles on telecommuting, and one of the pieces of advice I've seen the most often is that you should treat working at home as the same as going to work, meaning that you should sit down and work during your regular office hours, you should have a separate "office" space and not just sit at the kitchen table, things like that. I've even read about people who close the door to their "office" and force their family to either call or email if they need him, just as if he were at an external office. This seems a little extreme to me, but it does avoid persistent interruptions. I would love to have a dedicated place in the house where I could work more comfortably than the dining room. We do have an office upstairs, but the desk is so cluttered with stuff that there's no room for my laptop. If I were to clear off the desk and use that as my telecommuting "office", I think I'd have to invest in a new chair. Hmmmm.... I've thought about that idea in vague terms before but never really thought about it until now, and I'm starting to think that it's a really good idea.

Treating working at home like working in the office is particularly important if you telecommute 5 days a week, since you don't want to feel like you live in your office — you want a place that you can "walk out of" at 5:00 and feel like you're back home. For me, I only work at home one day a week most of the time, so I set my laptop up at the dining room table and sit there. Sometimes I used to sit at the kitchen table, since it's closer to the entertainment centre so I can plug my iPod in and listen to music while I work. I recently bought a speaker device for my iPod so I can listen in the dining room, so now I don't need to move. But generally, it's a normal working day. I get up at the same time, have a shower and get dressed, get the boys breakfast and make their lunches, just like any other day. It's just that when I'd normally kiss everyone goodbye and leave, I simply walk into the dining room and sit down.

It does take discipline to work at home. It'd be very easy for me to sit with my laptop in front of the TV all day, but I know that I'd get much less (read: nothing) done, so the TV never goes on. Surfing the web is harder to avoid since the browser is right there, but I'm getting pretty good at not sitting on Facebook or writing blog entries all day. Most of the incentive to not do this comes from my work ethic — I know that if I'm goofing around when I'm supposed to be working I'm essentially ripping off the company, and so I feel guilty. I do have to admit that some comes from the fact that working from home is a privilege that Sybase has given me. If they decide I'm not getting as much done when I work from home, they might decide that they don't want me to do this anymore, and I don't want to lose the privilege. It's something like: I want to be able to work from home and goof off, so when I work from home, I don't goof off in case they don't let me work at home.

One of the huge advantages of my job, from the point of view of telecommuting, is that from a work perspective, there's not much I can do in the office that I can't do from home. (Obviously teachers, policemen, and anyone who works in retail or deals face-to-face with customers doesn't have this luxury.) Copying large files over the network is much slower (100 Gb line vs. VPN over wireless G). I do a lot of network-related projects, and sometimes that doesn't work very well. As I've mentioned before, the product I work on is a mobile database called SQL Anywhere (SA), and the clients use UDP broadcasts for locating the server. When I'm at home, my machine is essentially on its own private LAN separate from the work one (VPN does stand for Virtual Private Network after all), so any broadcasting stuff doesn't work properly since UDP packets don't span subnets. I have a couple of VMWare images running on our VMWare server in the office, so whenever I need to do network stuff, I can simply remote desktop into one of those. I used to do a lot of work on the NetWare version of our product, and I can't do NetWare stuff at home either. But we don't support NetWare in the latest version of SA, and we get very few bug reports from previous versions (that's obviously because my code is robust and efficient, not because we only have a handful of customers using NetWare). I have my NetWare development environment set up on a VM now so I can do that from home anyway.

The obvious advantage to telecommuting is the lack of travel time and effort — not only does it reduce the time spent travelling (on Fridays I generally spend the extra two hours working), but it also reduces the gasoline used and the extra mileage on the car. On days where the traffic or driving conditions are bad, it also eliminates the likelihood of accidents, and lowers my general stress level as well. It's also very nice to be able to schedule things like dentists appointments and visits from service people (the furnace guy, the guy who will hopefully fix our dishwasher next week so I don't have to wash a thousand dishes every night, etc.) on Fridays and not have to take vacation days.

Other than work stuff I can't do from home, the main downsides to telecommuting are things like participation in meetings, whether scheduled or impromptu (Aside: "impromptu" is a really weird word), and socializing. Some things are just more difficult over email or IM.

From the company's point of view, there are only one real advantage: keeping employees happy (and therefore keeping employees). I do love my job, but if Sybase didn't allow me to work from home, I might have grown tired of the commute by now and left to find a job closer to home. In terms of job perks, it costs the company nothing, and is a display of trust on their part, further enhancing my overall job satisfaction.

I've written before about IvanAnywhere, the telepresence robot in our office controlled by my colleague Ivan Bowman, who lives in Nova Scotia. Ivan used to live and work in Waterloo, and now travels here a few times a year. But I'm curious how Ivan's working relationship with colleagues that he has never worked with "in person" differs from those with whom he has.

Sunday, March 01, 2009

Technical Debt

Jeff Attwood wrote an article on his blog Coding Horror yesterday all about paying down your technical debt. This is when you do something "the quick and dirty way", which then costs you "interest" in the future in terms of bug fixes, workarounds when new functionality is needed, and just extra time for developers unfamiliar with the code to understand why something was done the way it was. There are certainly times in every developer's life when you have a choice between doing something "the right way", which might take weeks to design and implement properly, or you could do it the easy way, which gets the job done for now, but may have consequences later. If you're under a tight deadline, often the easy way wins out — that's your debt.

People often complain about Microsoft Windows being bloated, and that's largely because of technical debt that they can't easily pay off. When they released Windows NT in 1993, they made sure that all existing Windows and DOS programs would still run. That decision saved them — who's going to upgrade to a brand new OS when there are no programs and drivers for it, and none of your existing stuff will work? — but they incurred a huge debt because of it. Backwards compatibility has always been a huge issue for Microsoft — it's only recently (2007) that they released an OS (Vista) that won't run 16-bit DOS software from the 80's. I cannot imagine how much of the Windows source code is dedicated to running legacy software.

I love this "technical debt" metaphor, as we've gone through it a couple of times on our mobile database product, SQL Anywhere, most notably a few years ago on SQL Anywhere version 10.

One of the advantages of SQL Anywhere is the way we save data in the database file. We do it in such a way that a database created on any supported platform can be copied and used on any other supported platform. Also, if you create your database with one version of our product, you can continue to use it when we release updates for that version, or even completely new versions. Version 9.0.2 of our server, released in 2005, can still run databases created with Watcom SQL 3.2, released in 1992. I remember my time as an Oracle DBA - every time we upgraded Oracle, we had to "fix" the database, and by "fix" I mean we had to rebuild it or upgrade it or something. I don't remember what we had to do, but we had to do something. We also had Oracle on our test server, which was a different platform than the production server, which means that we couldn't just copy the production database to our debug server for testing or debugging purposes, which was quite a pain.

Anyway, while this was a very convenient feature, we did accrue some "technical debt". This is not quite the same as described above, in that we never took the "quick and dirty way", but we still had to have code in the server to support features that had been removed from the product and very old bugs that had long been fixed. After six major versions and thirteen years, there was a lot of these. After much discussion, we decided to take the big plunge with the 10.0 release (known internally as "Jasper" — the last few releases have all had code names from ski resorts, "Aspen", "Vail", "Banff", "Panorama", and the next one is "Innsbruck"), since we were adding a ton of other new functionality with that release. The decision: version 10 servers would not run databases created with version 9 or earlier servers. Everyone would have to do a full unload of all their data and reload it into a new database when upgrading to version 10, and they'd have to do this for all their databases. This would allow us to remove thousands of lines of code from the product, making it smaller, and since we have far less cases of "what capabilities does this database have?", the code can be more efficient. As a simple example, we now know every database that the server can run supports strong encryption, checksums, clustered indexes, and compressed strings, among others, so we don't need to check for those capabilities before using them. There are a lot more assumptions we can make about the layout of the database that makes the code simpler, smaller, and more efficient. We can also add new features that might have clashed with old databases. We knew that the rebuild itself might be inconvenient, and upgrading to version 10 wouldn't be nearly as seamless as previous upgrades, but we also knew that once the initial pain of the rebuild was over with, life would be much better for everyone. We even put a lot of work into streamlining the rebuild process so that it was as fast and simple as possible.

As you can imagine, there was some resistance to this, and I'm sure product management had to handle more than one call from a customer asking "I have to do what with my multi-terabyte database?", but to their credit, they stuck to their guns and told the customers that yes, we know it's inconvenient, but it's really for the best, and you'll appreciate it once the rebuild is done. Or perhaps they blamed it on us, telling the customers "We know it's a pain, but engineering won't budge. They're determined to do this." Either way, it happened, and we did get some more bug reports because of problems with the rebuilds, but for the most part, things went pretty well. That pain paid off the technical debt that we'd accumulated over the previous decade.

Of course, we've since released version 11, which added new stuff to the database file, and we're working on version 12 which adds even more, so now some of those "if the database file has this capability, then do something, otherwise do something else" conditions are creeping back into the product. So far, there aren't a ton of them, so our current interest payments are pretty low, but perhaps in five or six more versions we'll have accumulated enough technical debt that we'll have to bite the bullet and pay it off again.

Wednesday, October 01, 2008

IvanAnywhere on Space TV

Space TV interviewed my co-workers Glenn Paulley, Ian McHardy, and Ivan Bowman about IvanAnywhere a few weeks ago, and the results aired last Friday night on their show "The Circuit". The piece is online: go here and click the link at the top that says "Ivan Anywhere, the robot telecommuter". There is also a direct link to the video, but note that the link resizes your browser window. The bit about Ivan is about four minutes long, and starts a minute or so into the video.

I PVR'ed the show, but I'll be damned if I can figure out how to copy it to my computer. I thought I could record it straight to my digital video camera, but the camera doesn't have inputs, so I'd have to play the video and then actually record the TV screen with the camera. Video and audio quality would both suck, so I didn't bother. Of course, even if I could get it in digital format, I couldn't post it to YouTube or anything, since it's copyrighted.

Sunday, January 13, 2008

I want to be terrible too

Here is a great article by a self-confessed "terrible programmer" who points out his own "failings" as a programmer and how he covers them up, so that nobody will find out the truth. Of course, he is not a terrible programmer; quite the contrary. He is obviously an experienced programmer who is very good at what he does. (Note that I have no idea who this guy is.) The methods he uses to cover up his incompetence are time-honoured ways of ensuring that the code you release is as correct and robust as possible: do code reviews, use assertions liberally, test the snot out of your code, and use the right tool for the job.

As for me, I do use assertions all over the place, and I'm usually pretty good at writing tests for the modules I write. I am part of the core engine team for SQL Anywhere, a relational database management system from Sybase iAnywhere. When I add features to the database engine, I make sure I test boundary conditions, confirm the syntax of any SQL statements I add, and try to make sure that whatever changes I've made work in multiple types of databases, and on multiple platforms. However, I work on a lot of security-related features (encryption, authentication, database permissions, auditing), so I have to do more than just write tests — I have to think about how hackers could break into our systems, or otherwise gain access to data that they should not have access to. If someone was watching packets go by, could they use that information to break into the database? Could someone write a man-in-the-middle program that makes itself look like a server so that clients will connect to it instead of a real server? Can we eliminate the possibility of brute-force attacks, or at least slow the process down enough to negate the effectiveness of the attack? Can we give the DBA the ability to detect when intrusion attempts are happening, and determine where they are coming from?

Anyway, I occasionally make the same mistakes the author does — bugs in code, not initializing variables (ran across one of those this past Friday, actually), making assumptions that aren't true (and not backing up those assumptions with assertions), stuff like that. I use some of the same methods of covering up my own incompetence as he does, so perhaps I'm as terrible a programmer as he is. I can aspire, anyway.

Just remembered that my boss sometimes reads my blog, so maybe admitting my own incompetence here is a bad idea...

Wednesday, October 10, 2007

Windows reminder app

Does anyone know of a good Windows-based calendar / reminder application? I'm currently using the Lightning plug-in for Thunderbird. Lightning is basically a plug-in version of Sunbird, which is a Mozilla calendar application. It has the advantage of being able to read events from my Google calendar plus add events of its own, and it can give you reminders, but the reminders seem to be flaky.

My company uses Lotus Notes for email, but after using it for a few years, I now flatly refuse to install it. I switched to Outlook for the next few years, and Outlook has a pretty nice calendar built-in. I'd set up reminders for my meetings, and a message box would pop up 10 minutes beforehand. I switched to Thunderbird for email a year or so ago, but Thunderbird doesn't have a calendar built-in, so I've been without one ever since. I discovered Sunbird a little while ago and set that up, but soon discovered Lightning — it's the same thing as Sunbird but since it's a Thunderbird plug-in, it's one less application to run. However, I have been late for a number of meetings lately because my reminders never fired. Sometimes they fire the next time I stop and start Thunderbird, and sometimes they simply fire an hour or two later. The reminder for the meeting I was late for this morning fired an hour after the meeting ended.

I'm thinking of re-installing Outlook just for the calendar, but that seems like overkill. Considering how happy I've been with Firefox and Thunderbird (for the most part), I'm quite disappointed with Sunbird. Anyone have any other suggestions?

Sunday, September 09, 2007

Mobilizers baseball

Our baseball season ended today. (We all call it "baseball", but it's really softball, or even more accurately, 3-pitch.) This past year, I was the captain of the iAnywhere Mobilizers, one of our company's two teams. We play in the "B" division of the league, whereas the other team (the "Sybase Sluggers") play in the "A" division. We usually refer to the Sluggers as "The A Team", and after playing in this league for two years, it's only recently that I don't giggle every time I say that, thinking of Mr. T in a baseball cap and glove, yelling "C'mon, guys, force play at second, let's get this one".

The "B" division is for those teams that aren't good enough to play in the "A" division, but don't completely suck — those guys are in the "C" division. Well, for most of this season, I suspected that they'd move us down to "C" next year because we more or less completely sucked. We started the season 0-10, including scores like 24-3, 19-4, 33-11, 11-2, and 24-1. The week after the 24-1 loss, I went away on vacation and someone else made the lineups, and we won 13-12. Then I came back and we lost the next 6. I like to think that was coincidence.

In late July, we lost a game 20-15, but the 15 runs was our highest run total to date, and we played pretty well, and I started to realize that we were actually playing better as a team. In August, we won another game, this time in convincing fashion, 26-20. I was actually at the helm for that game, so that broke my personal losing streak at about 18 (including the 0-3 showing at last year's September tournament). We ended the season in last place at 3-18, two games worse than the second-last place team. Doesn't sound like there was much reason for confidence going into The Tournament, but we actually had some guarded optimism, since we played much better in the last month, and two of our three wins came in the last four games.

The tournament was played yesterday and today, and rather than one or two games per week, we suddenly had to play four in one day, and up to three more the next day. Our first game was 8am, and we played pretty well. We lost by one run, but because the score differential matters in the tie-breakers, we played the bottom of the ninth even though the home team was winning. They scored one more, so it goes in the books as a two-run loss. 0-1 and -2 in the run differential column after one game. Not great, but considering we were 0-3 and -30 in last year's tournament (the max run differential in any one game is -10), this was an improvement. The second game was pretty good too, and we were losing by 1 when the umpires called the game because of time constraints. I went and argued that the time limit had not yet been reached (we were two minutes shy), and we wanted to keep playing. They agreed that the game should continue, and we proceeded to not score any runs and allow 5, so we ended up down by 6. After two games, we were 0-2 and -8. Still better'n last year, but not great.

The third game never happened. Someone on our team had heard from someone else (who heard from someone else who... ) that the team we were playing in the third game did not have enough eligible girls — the rules say that you must have at least three girls who have each played at least nine games during the regular season, or you forfeit the game. I asked the umpires and the other team's captain, and he confirmed that they had three girls available, but one had not played the requisite number of games. The umps called the game a forfeit, and we were considered the winners (by a 10-0 score), but said we could play anyway if we wanted. We declined, saying that we didn't want anyone getting hurt in a meaningless game, but in reality, I think we were just hot and tired and wanted a break. So we were now 1-2 with a +2 differential.

The fourth game was great, except for the part of the game that really sucked, but I'll get to that in a second. We hit well, played defence well, and won the game by 8 runs. I don't think I made any errors on the field during that game, and I missed turning a 5-3 double play by this much. Runners on first and second, I'm playing third base, and the ball is grounded in my direction, just to my right. I run forward, grab the ball, step on third, and heave a throw to the first baseman, who catches it just after the runner hit the base. Normally, that's the kind of play where I'd (a) miss the ball completely, forcing the left fielder to come in and get it (probably allowing a run to score), (b) boot the ball, loading the bases, or (c) make the play at third and then blow the throw to first, so I was very pleased with the fact that I made both ends of the play.

The part of the game that really sucked was during the bottom of the third inning. I was playing left field, and the batter grounded the ball to the second baseman. I didn't see what happened, but some of our players were yelling "Throw it to first!", and I didn't understand why it was taking so long to do so. Eventually, the ball made it to first, the first baseman stepped on the bag, and then everyone walked towards the plate. I had no idea what was going on, until I saw that the batter had never left the batter's box. He swung, hit the ball, and then must have dislocated his knee when taking off towards first base. Someone called 911, and an ambulance showed up 10 minutes later and took him to the hospital. The whole thing caused a delay of about a half hour, and since the games were a max of an hour and fifteen minutes long, that was almost half the game right there. Eventually, we got back onto the field, but I think the whole game lasted five innings. I haven't heard since about how the guy is doing, but I can't imagine he'll be walking much in the next couple of weeks.

So at the end of the day, we were 2-2 and +10, a tournament record with which I was completely thrilled. As I said, the only experience I'd had in the tournament was the previous year, in which we got smoked three games in a row. Both teams that we beat won against (since we didn't actually beat anyone in the third game) ended up going 0-3 on the day, with one game left to play this morning, while the other two teams in our grouping were 3-0 yesterday with one game this morning. So regardless of the outcomes from today's games, we ended up third in the grouping, which meant that we played a quarter-final game today at 11:30 against the team that finished third in the other B-division grouping.

Yesterday, the weather was great for baseball. Sunny and hot. Today, the exact opposite — rainy and cold. It just flat-out rained for the first three innings or so, though after that it was just drizzly. We had one guy show up to play that I didn't expect, since he said the day before that he couldn't make it. I don't want to put any blame on him at all, since the team is certainly better with him in the lineup than without, but the defensive lineup I had was done assuming he wasn't going to be there, so I spent most of the first inning tinkering with it to make sure that he was included, but that nobody was sitting too often or in consecutive innings, that we didn't have people playing in positions they weren't comfortable with, and we didn't our best defensive players all sitting at the same time. I didn't do that great a job, though, since we ended up with too many or too few fielders in at least half the innings, and I had to make last-minute "You sit! You play right! You play third!" decisions on the fly. I think I ended up sitting out about four times just because I didn't have time to figure it out properly. And to cap it all off, the hitting that came along so well in the last month of the season and all day Saturday completely vanished, and we ended up scoring all of two runs. We lost by about 12, and so ended the Mobilizers' dream "worst-to-first" playoff run. The A Team (heh) got spanked in their game today as well, so both Sybase teams were eliminated.

Despite the win-loss record, I really enjoyed playing ball this year. It was much more work than in previous years because being the captain, I couldn't just show up to games and play wherever someone else told me; I had to be the one to tell others where to play. One thing that I told everyone at the beginning of the season was that being the team captain does not mean that I'm the best player on the team, and it does not mean that I'm a good coach. I know the game itself as well as anyone, but I'm generally a crappy teacher, and I tend to forget that not everyone knows the intricacies of the game as well as I do. We had plays during the season where a fielder caught the ball while stepping on the base, but the runner was called safe because it wasn't a force play. I knew it wasn't a force play, but it didn't occur to me to yell "Tag him!" because everyone knows that, right? Well, no, as it turns out. Anyway, due to complicated reasons that I'm not going to bother posting here, the league may not even exist next year, which means I may be looking for a new league. I remember looking into a league in Waterdown a while ago, but it was only for men 35 and older, and I didn't qualify at the time. Now I do. Sigh.

It occurred to me earlier this year that if I played golf once a week during the summer instead of baseball, I'd become a much better golfer than I am now, and that concept certainly has some appeal. But can you imagine life without baseball? I can't. I've played in a baseball league of some kind every summer since university, and I played pick-up baseball with friends every summer before that since I learned to walk, so until I get to the point where I am physically unable to play, I'm playin'.

Wednesday, September 05, 2007

IvanAnywhere

And I thought I had a tough commute... A guy (Ivan) on the query processing team lives just outside of Halifax, Nova Scotia. He's been living out there for a few years now, and has been telecommuting. His ability to interact with the rest of us was greatly improved a couple of months ago when IvanAnywhere was introduced. IvanAnywhere is a "telepresence" robot, built by another guy in our department, Ian. One of Ian's hobbies for many years has been flying RC airplanes, and after Glenn (Ivan's boss) semi-jokingly asked him to build a flying RC blimp with a webcam that Ivan could control, Ian thought about it and decided it was possible, though with a robot, not a blimp. He took an RC truck and mounted a tablet PC and webcam on it as a proof of concept, and once that worked, he built a robot that Ivan can control. It has a webcam as well as a digital camera, microphone, speakers, proximity sensors so it won't run into walls and such, and works over our internal wireless network. Now when Ivan wants to talk to someone, he can just go on down to their office, and he can attend meetings and even give presentations. The robot has a monstrous battery, but can run all day without being recharged.

Ivan can't do everything himself, though. The robot can't turn and move forward at the same time, so to go around a corner, it had to go forward, then spin 90°, then go forward again. Update: Yes it can! For tight manoeuvring, Ivan has to point the webcam down so he can see what he's doing, so it's easier to stop first. He can't open doors, and manoeuvring around chairs and stuff in meeting rooms can be challenging. In one meeting, Ivan misjudged how far away a chair was, and the robot crashed into it (ironically, it was Ian's chair). Also, someone here has to plug the thing in at night to recharge the battery.

Regardless of how cool this technology is, it's almost no big deal anymore. We're all so used to seeing Ivan (well, the robot, who we generally refer to simply as Ivan) roaming around, we don't think much about it. One big difference is that our area is now pretty much mandatory on all building tours, so when customers or other partners visit, they are always brought through this area to see Ivan. Thankfully they haven't changed our dress code (i.e. given us one) because of this.

As someone who telecommutes on a regular basis, I can certainly see the appeal of this for Ivan. For me, talking to co-workers via email, IM, or telephone is almost always sufficient, but I'm only at home one day a week (though it's more if the weather is bad or I'm not feeling well or whatever). If I was at home every day and it was pretty much impossible to get into the office, I'm sure I'd miss the face-to-face interaction, and I find attending meetings over speakerphone (when everyone else is in the same room) difficult. Unfortunately, I think I live too close for the company to consider creating GraemeAnywhere.

Cool — just found out that we've been slashdotted!

Update: Ian informs me that IvanAnywhere can move forward and turn at the same time, so I updated the paragraph above. Also in the comments I say that it's running a 9.0.2 server, but it's actually running 10.0.1, and it stores status and monitoring information, which is used for diagnosing problems.

Wednesday, March 21, 2007

NetWare hell

Novell announced the other day that their next version of SuSE Linux (called Open Enterprise Server) will be able to run NetWare 6.5 as, essentially, a virtual machine. It also says that "This release of OES also spells the end of NetWare as a separate operating system", so that you will only be able to run NetWare as a VM.

SQL Anywhere has been supported on NetWare since the beginning, and I have been the sole NetWare developer on the engine team for most of the last ten years. With this change, I don't know if it makes sense to continue supporting NetWare, so it's possible that management will consider dropping NetWare as a supported platform. This would be fine with me, since NetWare is a difficult operating system to work with — the compiler is old and unsupported, the debugger is flaky and slow, and there are lots of idiosyncrasies specific to NetWare that I have to deal with.

The title of the above linked article is "Good-bye NetWare, hello, OES 2", so when viewing that page in Firefox, that's what the title bar says. When I minimized the Firefox window, I got this, which I thought was kind of appropriate:

Friday, April 28, 2006

Ryan the math whiz

Ryan seems to be turning out to be quite the little mathie, just like mommy and daddy. The other day he got in trouble at school for throwing his shoe or something like that, and he and another boy (grade 3 - Ryan's in grade 1) were told by the teacher on duty to stand against the wall and count to 100 before they could go play again. Ryan decided to count by 5's rather then 1's, and had left the wall long before the other kid had. Not what the teacher meant, to be sure, but hey, she didn't specify!

Then this morning he was putting together an alphabet puzzle he has - each letter other than A and Z has 2 puzzle pieces, and A and Z have one each. He noticed that the box said '50 piece puzzle', and came to me and said 'daddy, 26 plus 24 equals 50'. I asked him how he figured that out, and he told me that he knew that there were 26 letters in the alphabet, but that only 24 of them had 2 pieces in the puzzle, and since there are 50 pieces in the puzzle, 26+24 must be 50.

It ain't rocket science, but he's only 6 1/2, so I think (totally unbiased proud poppa) he's doing very well.

On the work front, ASA finally got its Common Criteria certification today. This has been in the works for over three years, and I've been the engineering point person for the project. I've referred to it as "The project that wouldn't die", but I guess it's now officially dead! As long as we don't decide to do the whole thing again for Jasper...

P.S. A very happy birthday to my wonderful wife Gail, who turns <mumble> today!

Wednesday, March 08, 2006

I'm a star!

Thanks to my work on attempting to get CC certification for ASA, I was given an "iAnywhere Solutions Star Performer" award yesterday. I got a plastic star "trophy" thing (which actually looks cooler than it sounds), as well as a nice monetary bonus. Once we get this certification (should be later this month), it will allow us to sell ASA to various sectors within the US government, which requires this level of certification before they are allowed to purchase any software product. John yesterday congratulated me on my award and called me "a god among men", which I think might be a bit of a stretch, but it is certainly nice to have my efforts recognized.

On an unrelated note, the sports headlines yesterday read "Barry Bonds Steroid Shocker". Two guys in the know wrote a book stating that Barry Bonds used lots of steroids over the last few years. Question: "shocker"? Is anyone actually shocked?

Update: Fixed the CC link. Thanks Daniel!

Thursday, January 19, 2006

Mama, I'm comin' home

Once again, I'm writing this on a plane, this time flying back from Washington. As I look out the window, I see what I think might be Andrews Air Force Base, judging by the google map I looked at yesterday. We just entered the clouds, so now I can't see anything. I still don't know what caused the nervousness I felt before the flight down, but I was fine before today's flight.

The testing didn't go well on Tuesday, and I was working until 10:45pm to fix all my tests up. Wednesday went much better -- all four of my test suites had run to completion with no failures by about 9:30am, so the rest of that day was spent working on unrelated stuff and answering questions from the validation team and the evaluator. The evaluator, Daniel, was an interesting guy - lives in a suburb of LA, and seemed quite proud of being Californian. Dude loves to talk about himself, and is very open with personal stuff - like the fact that the gyro sandwich he had for lunch on Tuesday kept repeating on him all afternoon. Thanks for sharing that. It's one thing to talk to relative strangers about your kids (we all did), but did I really need to know that his 11-year-old daughter weighs over 100 pounds ("chunky but solid"), and has started "developing" already? Apparently she's into a B-cup now. Now, I don't have daughters so maybe I just don't get it, but do other fathers of pre-pubescent girls go around talking about the size of their daughter's boobs?

He also dropped a couple of names here and there - mainly people that I'd never heard of but that the validation team had. He did once refer to himself as "the godfather of perl", and that "Larry" (presumably he meant Larry Wall, the creator of perl) was a good friend of his. "Haven't seen Larry since his in-law's 50th wedding anniversary" he says. Okay, so you know Larry Wall, we're all very impressed. Sheesh.

We're flying over St. Catharines now (just saw Niagara Falls from my window a couple of minutes ago -- cooooool), so I'm going to end there. No, it didn't take me the full hour flight just to type the stuff above - in the middle I wrote up a detailed report on the testing. That's probably all confidential stuff, so I won't post it here.

Yup, the fasten-seat-belts sign just came on. Time to go.

Update: Flight time on the way back was one hour, 7 minutes and 4 seconds.

Another update: If a girl is "developing", is she still considered "pre-pubescent"?

Wednesday, January 18, 2006

Extortion in the skies?

We got all the testing done today, so I was back in the hotel by 5:00. I took a quick look online to see if there was an Air Canada flight tonight -- there's one at 8:00, and as long as I packed quickly, I should be able to get there on time. I called Air Canada to see how much it would cost to switch the ticket - there's a $10 fee for this, a $32 fee for that, which I would have been happy to pay if it got me home tonight instead of tomorrow. Then he said that the ticket price was higher, so I'd have to pay the difference -- $350. The original return ticket cost $491, or just under $250 each way. I didn't ask the guy, but I should have -- why would the price of a ticket on this flight be more than double that of the one tomorrow morning? Is it on a nicer plane? Better food? Free lap dances by the flight attendants? There's gotta be some major difference, right? Nope -- it's a time-honoured airline tactic called "fucking the customer over whenever possible". I just checked aircanada.ca for flights from Toronto to Vancouver tomorrow (Jan 19) -- there are 13 direct flights. Tango ranges from $168 to $426. "Latitude" costs $626 for every flight, and the only advantages over Tango are things like more Aeroplan miles, no charge for same-day ticket changes, and the ability to select your seat without paying for it. For "Latitude Plus", $1260 allows you to sit in the Maple Leaf lounge before the flight, and you get an upgrade to first class if a seat is available. This means that if first class is full, flight 103 from Toronto to Vancouver tomorrow morning will have some people sitting in coach who paid $168, while others also sitting in coach who paid $1260. Does this make sense to anyone other than Air Canada?

BTW, the flying time on the flight down here (from wheels-up to touchdown) was exactly 59 minutes and 30 seconds. I'll write again after I get back and post the flying time for the return flight.

Monday, January 16, 2006

In-flight entertainment

I'm writing this on my laptop while flying over the blackness that is Lake Ontario at night. Through the clouds, I can occasionally see some lights off to our left, which must be the east end of Toronto, or possibly even further east, like Pickering or Whitby. I'm on Air Canada flight 310, flying down to Reagan airport in Washington DC. Tomorrow and Wednesday, I'll be meeting with some contractors who are doing a security evaluation of the database product that I work on, Adaptive Server Anywhere (ASA). This evaluation is required before a software product can be used by the US government and its agencies, so getting the evaluation done opens a bunch of doors for our sales people. I'm the technical lead on the project, so over the past three years, I've put together lots of documents describing the product and how it works, and written lots of tests and documentation about these tests. It's been a long and ardous project, but for the most part, it's been part time - a few hours here and there, rather than 8 hours a day every day. I will be glad when it's all over though.

Starting this morning when I got up, I've been very nervous about this trip. Not because of what will be happening when I get there, but the flights themselves. I can't explain why - I've flown many times, and I've never been the least bit nervous about it. In my previous job, I flew down to Boston all the time - probably averaging every other month over three years, as well as a couple of trips to San Francisco, one to Naples, Florida, once to DC, and once to New York City. And that's just work trips with Comnetix - I've flown to Baltimore three times with Sybase (though not for over 5 years), and many times on various vacations. I've never been nervous flying, but I had butterflies in my stomach all day, and they got worse as the day went on.

My only guess as to the reason is that it's the first trip I've taken away from my family since Ryan was a baby. The most obvious fear is that the plane will go down and Gail will be left to raise the boys on her own, and they will grow up without a father, and that idea scares the hell out of me. I have every confidence in Gail's parental abilities, and I'm sure she'd do fine, I just don't want her to have to. The weird thing is that Gail and I flew down to Las Vegas back in October without the kids, and I had no qualms about that. If there was, um, an incident during that flight, the kids would grow up without either parent, and would be raised by my sister. With all due respect to her, that would be far, far worse, and yet, I felt no nervousness about that flight. I don't get it.

Looking out the window, I can still see lights off to the left. We must be far beyond the lake now, over New York state somewhere. For some bizarre reason, I felt this urge to time the flight, so I started my stopwatch as soon as the wheels left the ground - 29 minutes and 30 seconds ago. Actually, flying time is supposed to be about an hour, so we're probably at our cruising altitude of 25,000 feet, and roughly halfway there.

We started boarding the flight around 5:45, and just before then, I realized that Gail had already picked up the boys, and was probably at home fixing dinner. The boys would be in the family room, glued to today's episode of What's New, Scooby Doo? which we tape every morning. I thought of calling just to tell them that I love them, but this would be weird for me (telling them that I love them wouldn't be weird, I do that all the time, just calling from the airport specifically to tell them). I know that Gail would immediately ask me what was wrong, and I don't want her to worry about me, so I didn't call. I hope I get to the hotel in time to call before bed - I'd really like to talk to Ryan and ask how his day went - he had a test on owls, which they've been studying for a few weeks now. Did you know that an owl will eat pretty much anything smaller than itself, including bats, rabbits, and even other owls? I did not.

Sometimes talking to Nicholas on the phone is fun too - he's too young to have any real concept of how far away I am or when I'll be back. Ryan, simply because of his age, has a much better understanding of the concepts of time and distance. I keep forgetting how much younger Nicky is - almost three years. Nicky sometimes talks about Figgy and the fact that he died -- and then asks when he's coming back. When we tell him that Figgy's not coming back, he never gets sad, he just sort of says "oh, right", as if he simply forgot. Ryan, on the other hand, started to sniff and almost cry when we drove by the vet's a few weeks ago, because he remembered that that's where we took Figgy when he died.

The captain is talking now - we're at about 15,000 feet, and we'll be touching down in about 10 minutes, so I'll have to shut the machine down now. I'll probably write more on the return flight.

Thursday, December 22, 2005

Jasper secrets revealed!

My boss discovered my blog today, thanks to the link on my family web site, so I thought I'd scare him a bit. Jasper is the code name for the next release (version 10.0) of SQL Anywhere, the RDBMS that I work on. It's not scheduled for release until sometime in 2006, so revealing the new features and stuff here would be a very Bad Thing™ and could get me fired. So, no, Mark, I have no intention of posting any secrets here, except to say that Jasper contains more new features and big changes since ASA 6.0 back in about 1998.

BTW, all of the major releases since version 7.0 have had code names, and they've all been ski resorts: 7.0 was Aspen, 8.0 was Vail, 9.0 was Banff, and 10.0 is Jasper. We haven't picked a code name for 11.0 yet, but apparently Chicopee, the staggering 200-foot-vertical ski hill in nearby Kitchener, is not in the running. By way of comparison, the hills in Jasper, Alberta have a vertical rise of about 3,000 feet.