Wednesday, March 31, 2004
Meet and Greet
My company has a new Vice President of Software Development. His office is only 100 feet away from mine, but I have been scheduled to meet him at an informal "Meet and Greet" luncheon in six weeks. I look forward to it. According to the notice, there will be pizza.
I hope I don't accidentally meet him before the scheduled time. That would be awkward.
Tuesday, March 30, 2004
Well, my project at work is nearing its deadline, which means we are all working 70-80 hours a week without any days off.
This is dumb. Dumb, dumb, dumb. I'm stupid for doing it, and the people I work with are just as stupid. But we're doing it anyway. Why?
Of course, the only reason I'm doing it is because everyone else is doing it. I know I am not more productive this way. I know my assignments won't get done any faster. I know I'm burning myself out without good reason. I know it's the incompetent managers who should be suffering rather than me. But here I am, tired, pissed-off, and fantasizing about the perfect resignation letter.
I often think that I've matured as a developer (and as a person). I think that I've learned my lessons and will not repeat past mistakes. And then I make the same mistakes over again. What's worse: making a mistake I've never made before, or making the same mistake again and again? What the hell is wrong with me?
I'm weak. I don't have the courage to say "No", or to ask "Remember what complete shit we created the last time we worked ourselves to exhaustion?" I've spent the past six months trying to fix all the stuff we threw together at the last minute from the last project, and now I know we're setting ourselves up for another six months of bug fixing on this project.
I'm on autopilot. I'm just doing what's expected of me. I look at the list of fifty things that need to get done in the next week, and instead of saying "This is impossible," I just go on to the next item.
Maybe next time I'll do the right thing. But this time, I'm sticking with what is familiar. I'm an idiot.
Saturday, March 13, 2004
Helicopter Blooper Reel
I don't have any video of my own helicopter flights, yet, but another hobbyist uploaded a blooper reel that looks remarkably like my own flying.
Among the bloopers are a set of unsuccessful attempts to land on a small toy helicopter platform. He did eventually stick the landing.
(I'm currently grounded, waiting on a replacement part, so I just have to watch others' videos for now.)
Tuesday, March 09, 2004
The MSDN feed indicates that there are several new walkthroughs available today:
- Build a Data-Driven Website Using Visual Basic .NET and Visual Studio .NET 2003
- Build a Data-Driven Website Using Visual C# .NET and Visual Studio .NET 2003
- Build a Data-Driven Website Using Visual Basic .NET and ASP.NET Web Matrix
- Build a Data-Driven Website Using Visual C# .NET and ASP.NET Web Matrix
- Build a Data-Driven Website Using Visual C# .NET and the .NET Framework SDK
I haven't looked at these articles, but I assume they contain the same information, except some are in C# and some are in VB.NET, and some use Visual Studio .NET and the others use different tools. At first I wondered why there is not a "Build a Data-Driven Website Using Visual Basic .NET and the .NET Framework SDK" (the one missing combination), but then I realized that VB .NET developers are assumed to be incapable of using command-line tools.
At first I was pissed off at the MSDN folks for once again promulgating the belief that VB .NET programmers can't read C# (and vice versa), or that a Web Matrix programmer won't be able to figure out which menu items to use to create an application, having only been led step-by-step through the Visual Studio process. But of course, the MSDN folks have to do this because there really are a lot of developers who are unable or unwilling to make sense out of code that is not in the one language they know, or who don't know their tools well enough to use them after being shown a demonstration with a similar tool.
I have some sympathy when a C programmer has trouble reading Haskell, or a Fortran programmer has trouble reading Prolog. But C# and VB.NET are essentially the same language, with some minor syntactical differences. If you know one of those languages, you should have no problem reading the other unless you are either incredibly stupid or incredibly closed-minded. If you can't figure out that a "project" in one IDE is like a "solution" in another IDE, then please find another career so I won't risk running into you someday.
If you are learning .NET, you should be able to read C#, VB.NET, and JScript.NET with equal facility. C programmers and C++ programmers should have no trouble reading one anothers' code, nor should Lisp and Scheme programmers, or Smalltalk and Ruby programmers. If you are unwilling to learn even a little about things at the boundaries of your existing knowledge, you have no business calling yourself a professional or being proud of your skills, no matter what field you are in.
I look forward to the day when MSDN could publish an article called "Build a Data-Driven Website Using .NET", without the need to focus on specific languages or specific tools. I know that day will never come, so I'll have to settle for finding colleagues who would be capable of understanding such an article.
Saturday, March 06, 2004
Helicopter vs. Lamp: No Winner
I've reached the point where I can "hover out" a battery pack. That is, I can hover the helicopter without crashing until the battery runs out. This is much harder than it might sound. Hovering a micro-helicopter is much like riding a unicycle, with an extra dimension. Keeping the thing steady for a few minutes takes a lot of concentration, and is mentally exhausting. It's taken several weeks of practice, but I can do it.
So I decided to try something more interesting: take off from the dining room floor and land on the living room coffee table. I've got a small apartment, so this is a flight of only twelve or fifteen feet, but it was my first attempt to travel from a point A to a different point B. This also tests my altitude control, as I need to pass over some furniture to get to the coffee table. The coffee table is pretty big, so landing shouldn't be too difficult.
I took off smoothly. The helicopter kept drifting to the left. I should have landed and adjusted the trim, but decided to just keep going. I made it about halfway to the destination, but the leftward drift took the helicopter into a tabletop lamp. The crash was pretty spectacular, as parts flew in all directions.
The lamp shade looked bad, but was easy to fix. It is covered with frilly fabric, and I was able to adjust it so that the frills looked fine.
The chopper needs a little work. I broke the tail rotor into two pieces, but I already have a replacement part. The landing gear broke as well, but that gear has been breaking continuously. It's a common problem with the Ikarus Piccolo landing gear: after it breaks once, it will break on any hard landing.
So I need to balance a new tail rotor and wait for the glue on the landing gear to dry. I'll be flying again later tonight. I may move the lamp before I try.
Tuesday, March 02, 2004
Installing QNX 4
I installed QNX 4 on a machine today, for some upcoming embedded systems work. This is not the first time I've installed it, but of course I didn't take any notes the last time I did it, so it was almost a new experience.
My first hurdle was figuring out how to run the installer. The installation program runs on Windows, but the machine where I wanted to install only had Linux.
"No problem," I thought, "it's a bootable CD, so I can just boot from that". My next hurdle was the discovery that while the machine had a CD-ROM drive inside it, there were no power or data cables connected to it. And there was a good reason for that: the drive didn't have an IDE interface, but something with a whole lot more pins than any ribbon cable I could find. So I scrounged up another CD-ROM drive and plugged it in. Then it took several minutes of rebooting and cursing before I had to conclude that the ancient BIOS on that 300 MHz Pentium II machine wouldn't let one boot from the CD.
I was starting to think I'd have to install Windows on that machine just so I could run the installer for QNX. This would have been a problem, because this was a CD-ROM drive, and we only have DVDs for installing Windows. But poking through the contents of the CD, I found a .BAT file that would create a bootable floppy for installing a demo version of QNX. I didn't want a demo version, but a few more minutes of poking around (and guessing) led me to discover how to create a bootable floppy for installing the full QNX.
So, finally I booted the floppy and went through the QNX installation. I actually had to do this twice, because the first time I couldn't figure out how to delete all the Linux partitions to make the entire hard drive a QNX partition. But I eventually had a bootable QNX box.
The last problem was getting a working network interface. The machine (which I inherited from a recently departed colleague) had both built-in Ethernet on the motherboard and a PCI Ethernet card. I tried configuring both interfaces for DHCP and plugging both into my switch, but neither card was able to retrieve an IP address. I won't bore anyone with the details (assuming they are not thoroughly bored already), but I eventually figured out that there was no driver for the card, and removing it let the built-in Ethernet port start working. I had to give it a static IP address at first, but eventually got it doing DHCP by ignoring the nice network-configuration GUI and instead using "dhcp.client -h mymachine -i en0 &".
So it wasn't impossible, but this illustrates one of the reasons Windows is going to remain popular. I've heard people with horror stories about Windows installs, but every one I've done has been basically (a) boot with the CD, (b) follow the onscreen instructions, (c) OK, everything works. Sure, QNX is not a "consumer" operating system, and a lot of my problems were related to having ancient hardware, but still, I think it should have been easier.