Older blog entries for goingware (starting at number 112)

31 Aug 2002 (updated 31 Aug 2002 at 08:27 UTC) »
Food for Thought

Zaitcev's and kroah's comments on my efforts to get into embedded systems programming certainly made me wonder if I'm doing the right thing. (Thanks kroah for letting me know who you were!)

I think I'm still doing the right thing, but hopefully I could go into embedded work somewhat less naively than I might otherwise have.

I'm well aware that the nature of the work makes it harder to make one's code free. But I don't think it's hopeless.

For one thing, embedded Linux is booming. There are even some books about it.

There have been some setbacks, though. The Embedded Linux Journal used to be a print publication, but its existence as a separate dead-tree magazine ceased not too long ago, I think a victim of bad economic times. But it's still on the web and I think it now exists as a section within the Linux Journal.

Of course, since Linux was originally developed for desktop and server PC's, it has some limitations that prevent it from being used in some embedded applications. Lots of embedded chips don't have enough memory to run a Linux kernel, let alone any userspace applications. For this one can use eCos. eCos can run in much less memory that Linux, and is architected to make it easy to remove features you don't need from the build so they don't take up space in the ROM image.

There also appear to be some open source Forth implementations.

There are a couple problems with free software being used for embedded systems. One is that one often cannot look at the binary running on an embedded chip, so it is hard to tell that it is running software which should be Free. Likely there are a lot of GPL violations out in the market, running on embedded chips with no one but the manufacturer knowing about it. The best we can hope for is that whistleblowers will leak the secrets, and I expect that will happen from time to time.

The other is that many embedded products don't provide a way for the user to reload the software. They might not be using flash rom, and there may be no I/O ports on the device to load new software onto it. So even if the manufacturer publishes the source, you may not be able to use it.

(I asked RMS about this specifically a while back and he said that the GPL did not require one to be able to load new software on a device that runs a GPL'ed binary. I think this is a real problem. While one could manufacture new compatible hardware, there may not be enough of the hardware spec made public to be able to reproduce it.)

One more problem is that the manufacturer might publish the source but not the hardware specs, so you might be able to write software that does the same thing, but not be able to figure out how to alter it.

Another problem is that a lot of the commercial offerrings in the embedded linux market include proprietary parts. So some firmware may only contain free software, but the tools required to build it may be proprietary. There are also some packages to give Linux real-time support, that don't actually link into the Linux kernel, and some of these packages are proprietary. Both of these are a real problem.

But I don't think it's hopeless. After all, the server software market used to be a completely closed-source proprietary world. Even BSD used to be closed-source because it contained a lot of AT&T Unix code. At some point, U.C. Berkeley started publishing all the parts of BSD that weren't AT&T derived, and then the AT&T parts were rewritten from scratch, so we did eventually end up with an Open Source BSD. (I understand AT&T threatened UCB with a lawsuit over this, which could have been a huge disaster for the University if AT&T won. But AT&T backed down when Berkeley asked AT&T about all the BSD code it was using in Unix.)

In my early career, when I was a sysadmin for the BSD-based SunOS, I was unable to get the source code to SunOS. If I wanted to rebuild the kernel, I had to link together a bunch of .o files that came from Sun - I didn't even have the kernel source. Now, although the license is restrictive, one can at least obtain the Solaris source code. Even the source to the Mac OS X kernel is available (but under a license that the Open Source Initiative has certified but the Free Software Foundation says is incompatible with the GPL.

I think most embedded work is still mostly closed source. I just signed an NDA to get the manufacturer's source code to the chip I'm about to program, and my modifications to it will also be a secret.

But Free Software is not yet at the point where every programmer can make their living writing or even using it.

I think most paid involvement with Free Software still consists of either integrating Free applications or writing extensions to it that are never released either because the license doesn't require it (like BSD) or because the GPL'ed code is only used on a server without actually distributing the binary. (Some have proposed adding a "performance" clause to the GPL which would address this. I brought this up too with RMS, and he said he wanted to address it in the next revision to the GPL, but said "it can't be soon".)

I have heard that RMS feels that if one cannot write Free Software, then one should not write software at all - that is, one should not even take employment as a programmer unless the source one creates is Free. (I don't know for sure that he feels that way, so I won't claim that he really feels this way.)

I don't agree with that. I think that most people with the talent to program well do not have the ability to do as well for themselves and their families in some other occupation. If I could have changed careers these last couple years into some saner job that would still have kept all my bills paid, I certainly would have done it, but even after the dot-com crash, programming is the only work I could find that would pay enough that I can keep me and Bonita housed and fed and our creditors at bay.

I think RMS would likely say one should take a job flipping burgers rather than write closed source, but I don't feel it's right to ask people to be so self-sacrificing. Many advocates of Free Software do not feel as strongly about their principles as RMS does, and even if they do, I think the movement would be better off if we were all in a position of economic advantage.

Finally, I don't think it helps our cause if people aren't allowed to write closed-source software. While the software we write as employees and consultants may not be Free, the skills we sharpen while we write it can be, and usually are, brought to bear on Free Software problems.

I'm certified as a Master here but the fact is that I haven't written that much Free Software at all. I guess I could claim that my skill qualifies me for that certification but I got that skill writing proprietary software - and reading and debugging the proprietary source other employees had written.

Quite often new technologies, techniques and algorithms are developed in a proprietary fashion but openly published so they can be reproduced by Free Software authors. And even patents eventually expire. The RSA patent used to be so onerous but it is expired now, so it benefits all.

I'm not saying that I feel very good about making a living writing proprietary software, but it is not all bad. What gets me down more is when I have difficult clients or clients who don't pay me on time or don't pay me at all. I've yet to have either an employer or a client tell me I can't write Free Software on my own time, and a couple clients have been enthusiastic about me contributing work I've done for them - with pay - back to the community.

kroah comments on the unpleasant nature of embedded programming, like whacky undocumented hardware and size restrictions, and also says:

Typically you are working at a hardware based company, and have to live with design decisions made by people focused on the bottom line of product cost (remember, in production the firmware is free, and no one will recall the 6 months that it took you to get a beeper not to warble, even though they could have solved it with a 5 cent part in the design up front.)

Personally, I would be really thrilled if I could get paid for six months in order to get a beeper not to warble. I've been in that position before, and I loved it. I miss it terribly.

I invented a graphics compression algorithm once that needed to have a fast decompressor because it would be used interactively to browse CDROMs on the old 68020 Macintoshes. I used to lie awake nights thinking of how I could cram a few more bits out of certain file structures, because those structures would grow if I tried to shrink others - it was a balancing act. I would also be unable to sleep because I was thinking about how I could write the decompressor in assembly code. In the end I got the two innermost loops to fit into the 64 BYTE code cache of the 68020, with the result that my overall decompressor was twice as fast as the C version. I'd do anything to go back to those days.

But instead what I have is constant pressure to get feature after feature implemented. Almost always the client doesn't particularly care if the code is error free, easy to understand, maintainable or fast - they want it NOW, and they don't want to pay very much money to have it developed.

Throughout my career I've devoted a great deal of energy to learning new things. Whether I could learn a new skill has almost always been a top consideration when considering a new job. In the last four years in particular I have devoted a tremendous amount of work to improving the quality of my code. By quality I mean the reliability, comprehensibility, maintainability and performance all together. I never agreed with the position that fast code cannot be maintainable and I feel I've proven that in the products I've written.

And the end result is that I have found I've gotten extremely good at delivering something that the clients would rather I not give them. I've never cared to work fast and cheap - it takes time to write the kind of code I do.

For a long time I've struggled to convince clients that they really need and should want quality code. The best I've been able to do is convince individual programmers at my client companies that this is the case - look at my homepage where I quote the Director of Research at the client I've had for a year saying "Your code is by far the best in our codebase".

The problem is that I can't convince the people who write my paychecks of the need for quality.

I think the only answer is to program for a different market. A market where there can be no arguing that poor quality leads to business failure. I have the theory that in such a market the clients will be happy to pay me for the kind of work I like to do.

My ultimate goal is to be working on the kind of software where poor quality would lead to injury or loss of human life. I personally don't agree that software should be employed at all in life-critical applications, but people use it no matter what I say, and sometimes there really is no choice, like in spacecraft. So I think it would be best for that software to be written by someone with an attitude like mine. (I don't pretend that I have the expertise yet to write mission-critical software, but I think if I learned how I would be good at it.)

A number of people have suggested to me that I would do well to go into writing console video games. I don't know that reliability is prized so highly in gaming but performance certainly is. Console games often have pretty severe constraints so it is important to have both compact and fast code.

I think I would do well at writing video games if I learned how to. I'm particularly interested in learning more about 3-D graphics. (I just bought Edward S. Angel's OpenGL: A Primer.) So in the short term I'm going to at least study games programming, and maybe I'll eventually do some work in it. It's a hard field to break into also.

But in the long run I don't think I want to do games. It's important to me that the code I write be socially useful, at least in some small way.

My very first commercial product was Last Resort for the Mac from Working Software. It's a keystroke logger, but it's not the spyware people (like the FBI) try to plant on your computers these days - it's meant to help people recover the text they've typed in the event of a crash or a power failure.

I've had several authors tell me that Last Resort saved the books or papers they were writing. One of the editors of Mac User magazine told me he caught his girlfriend cheating on him because of Last Resort, and he later featured it prominently in a computer novel he wrote. I have mixed feelings about that but I think it's probably best that he found out about it - he seemed happy that he found out. (He changed the names of all the software he mentioned in his book, but it was pretty obvious what the real products were meant to be. Last Resort more or less saved the world because it recovered some really important text.)

I've gotten comments like that for a lot of the code that I've written - from users. I imagine I could write games that lots of people would enjoy playing, but I don't think I could get that kind of gratification from their feedback because I don't think I would feel that I had actually made their lives any better.

At least not until there is some kind of significant change in what video games do. I don't want to write violent video games. Maybe if I could write Sim games. I was a big fan of the original SimCity.

Of course the real answer is for me to write nothing but high-quality Free Software. That's what I really want to do. My strategy to get there is to write enough products that I will either license for royalties or publish myself that I can stop doing regular work. If I didn't have to write code for a living I would write code for Free.

It's that kind of thing that led me to start LinuxQuality. Read what I have to say on its homepage:

I feel that software must not just be Free, it must be Good.

Well, I have more I'd like to say but this is getting way too long for a diary entry, and it's late. I would enjoy staying up all night but my wife hates to sleep alone.

I value any comments anyone may have.

Good night.

29 Aug 2002 (updated 30 Aug 2002 at 00:22 UTC) »
Embedded note, updated

Well I closed the deal to do some embedded work on an I/O chip that has an ARM core in it. I'm afraid it's very much under nondisclosure, so I can't be very specific about what I will be working on.

The client is sending me his eval board (a development kit built into a large briefcase!) and the chip manufacturer emailed an NDA to sign. An hour after I faxed the signed NDA to them, the manufacturer's support engineer emailed a whole bunch of useful information.

I wanted to have a desktop system to practice ARM programming on so I asked on the debian-arm mailing list. Someone is selling me a used Corel Netwinder for $350. You can also buy new and somewhat fancier ARM Netwinders for $550 to $600 from Netwinder.net. They have Crusoe based systems as well.


This first job is quite small, but the client has a lot of other work waiting after this. Having the small job will allow me to get familiar with the chip before I do the other more difficult jobs he wants.

I discussed this on the ACCU list and based on what they said and what I found in their embedded systems book reviews section I'm going to get the following books, the first two right away because that's all I can afford so far:

I have a bunch of linux kernel books and one embedded linux book already.

Also here are some good websites for emedded stuff:

I'm very excited about this. I've been trying to find a way to break into embedded programming for over a year.

Help Me Get Into Embedded Systems Programming

I've had the idea for about a year that I should go into embedded systems programming. One reason for this is that many of the things I strive to achieve in my programming (efficiency and reliability) are valued in the embedded world much more than in the desktop GUI market. Another reason is, at least when I was looking a few months ago, I saw lots of job and contract ads looking for embedded programmers that offerred much higher pay than what I was seeing for GUI work.

Another reason is that I think the efforts the industry giants are putting into moving applications to the server (stuff like .Net and web services) are going to kill the GUI application market.

There are a couple of problems though. The embedded systems market has this whole huge body of knowledge and practice that I'm mostly unfamiliar with.

I have done some kernel-level work (mostly in the Mac OS, but I have tinkered with the Linux and the old BSD-based Sun OS kernels) and I've done a lot of work in 68000 and PowerPC assembly code. I also have a bachelor's degree in Physics and have done a lot of experimental work, and took courses in analog and digital electronics at UC Santa Cruz. But I know I have a lot to learn.

So here's how you can help me: recommend books I can read that can help me get started in embedded programming. I'm interested in both theoretical books (like architectural theory for embedded OSes) and I'm also interested in really practical things (like hands-on project books for hooking up toasters to 8-bit microcontrollers), techniques for day-to-day development and debugging, as well as books on learning electronics.

You can either post your recommendations in your diary here or email them to crawford@goingware.com.

One recommendation I can pass on is that my friend Tom Cumming (who's been doing embedded work since he was a kid) recommended I read Circuit Cellar magazine (I hadn't seen their website until just now - it looks real good). Actually I have read circuit cellar from time to time since it was a Byte magazine column, and I know it to be very good.

The book I used for both my analog and digital classes in school was the first edition of The Art of Electronics. The classes were actually taught by the physics department, and were intended to teach physics students to design and build their own instrumentation. Horowitz and Hill take a very different approach to teaching electronics than is traditional for electrical engineering textbooks. I remember professor dorfan saying that EE profs held a very low opinion of the book, but it was a hit with physicists and physics students.

I actually started reading it again a few months ago when I was interviewing for a job writing electronic cad software, but I got sidetracked. I'll pick it up again.

I also read a book last year that I think is called "embedded linux programming" or something like that, but I can't find my copy just now. But it was very good. It had a particularly clear explanation about what happens when booting an x86 linux system. And I have the books "Linux Device Drivers", "Understanding the Linux Kernel", "Kernel Projects for Linux", and Moshe Bar's "Linux Internals".

Anyway, any suggestions you have are greatly appreciated. Embedded Linux programming of course is a big interest but I'm also interested in other embedded OSes - there are a lot of things Linux can't do, like support multitasking in less than 64k of ram, which I think eCos can do.

Of course, a big problem is finding the time to study all these books, even the ones I already have!

The other problem is breaking into the embedded world. No one wants to hire anyone without paid work experience, and even though I've been working as a programmer for fifteen years, I don't really have anything on my resume yet that I can claim as embedded work.

But I have some happy news. I think I will be getting a small contract very soon writing the software that runs on an embedded ARM processor aboard an I/O chip. This would be very good work for me, and would finally give me a toehold into the industry.

I thought it would be helpful to have an ARM-based desktop machine to learn more about ARM assembly code and OS programming, so I asked around and have found someone who wants to sell me a very-slightly-used Corel Netwinder, an ARM-based Linux box. Debian supports ARM now, so the guy is going to install Woody on it for me.

Wish me luck.

Sandy's Gone

We found out our friend Sandy died when we saw someone bring a large boquet of flowers into The Second Read in Rockland, the bookstore where her partner works.

Sandy found out a year ago she had cancer. She was told she would likely live a year, and the prediction was very close to exactly correct. The original tumour was a kind of cancer that is easily treated if caught early, but it wasn't caught until it was too late and it metastized to her liver. It was the liver cancer that killed her.

We haven't gotten to know that many people since we moved to Maine in January of 2001. But two women we have gotten to be close friends with were Sandy and Yvonne. Now Sandy is gone and Yvonne is left all alone.

My wife Bonita, an art student, enjoys pottery and ceramic sculpture. She invited Sandy to take a pottery class with her a few months ago. Sandy enrolled in the class with the full knowledge that she would die soon. It turned out that Sandy had a college degree in pottery, and was turning out the most amazing work with blazing speed in the class. She really enjoyed herself and was very glad that Bonita had invited her. Sandy hadn't worked with clay for sometime and had thought that she never would again.

We visited Sandy and Yvonne at their apartment last week. Yvonne had called to say that Sandy had gotten suddenly very sick. Before that she had been doing quite well and had even been traveling to visit her children. But quite abrubtly her liver began to fail. Her doctor said she would not last long.

When we visited Sandy couldn't even look up from the bed. She was very weak. Bonita and I each hugged and kissed her.

That was the last we saw her. We meant to return in a day or two, but with things being very busy, we just didn't get it together to do so.

Is there anyone in your life you've been meaning to visit? Go visit them.

Is there anything you've been meaning to say to someone you're close to? Say it. While you still can.

Remember from my earlier diary entries that we made a long visit to Newfoundland in June to visit Bonita's family, and then a bunch of them visited us here when we returned. This was a big strain on us financially. We really couldn't afford it. But Bonita hadn't seen any of her family in a year and a half. One of her nieces is graduating high school next year and this was likely the last opportunity her sister's family would likely have to all take a vacation together. It was more important that we had this visit than that we be able to afford it.

I haven't known Sandy very long but I've been very fortunate to have known her at all. I will miss her.

I can't possibly imagine what it is like to spend a year of one's life knowing that one will almost certainly die soon. That Sandy was courageous enough to relax and take time out to have some fun throwing clay speaks volumes about her.


I had been using an old Pentium II box for an IP masquerading server and a home-office fileserver, but I took that machine up to my mother-in-law in Newfoundland so I could help her get online. So I decided I would resume running Debian on my old Mac 8500 and use that for my masquerading.

I hadn't updated in a while, and woody had finally shipped in the meantime, so I did an update and downloaded a couple hundred packages.

Imagine my dismay when the machine froze as the packages were being installed. I had the most curious thing happen - I was sshed to my hosting service when the machine stopped being responsive, but my ssh session still worked. The installation progress had stopped. But when I logged out of my hosting service I didn't get control back in my local gnome terminal.

I couldn't ssh in to sync the disk. I forcibly rebooted, to be greeted with loud complaints by fsck when it came back up.

My /, /usr and /var filesystems had hundreds, if not thousands of errors in them. It took a long time to get fsck to run without complaint.

Unfortunately, the filesystems were left with the file data of lots of important files just plain wrong. I figured this out when investigating why I couldn't successfully resume my update. Eventually I gave up and ran the woody r0 PowerPC installer and reformatted all my filesystems except /home, and reinstalled.

One obstacle to this was that the kernel that comes with the woody r0 installer crashes on my Mac. At first I tried to install using an earlier kernel I had on hand, but it didn't match the modules that came with the installer. Eventually I was able to use the kernel and drivers.tgz that came with the last potato installer.

After I got everything installed (well, the basics anyway, I don't have X yet) I built kernel 2.4.18 and set up iptables to do masquerading. Now all my machines are sharing my blazing 56k modem. I'm still looking for ways to get broadband in rural Maine.

Here's a tip for you: an upgrade or installation is probably the worst time you can have a crash or power failure. Run a script like the following in the background just before starting dselect, and let it run until the installation is done:

while true
    sleep 3

I posted a message about this to debian-user, but it's not yet in the archives. When it shows up it will be on this page.

Why Web Browsers are a Poor Application Development Platform

I had written out most of the diary entry that I'm now going to repeat below, when I brought up another browser window to look up another web page. Then I clicked its close box, accidentally clicked twice, and my second click hit the close box of my diary entry window.

This would actually be a simple thing to fix, maybe I'll try submitting a patch to mozilla (I built it once, it's pretty huge). Just check if the text in any of the form fields has changed and ask the user if they want to submit the form before closing.

How long have we had forms on the web? How easy would it be for every browser to make that change?

Now back to our regularly scheduled broadcast:

My Honey's Coming Home

My wife Bonita's been away at an art retreat in southwestern vermont for the week. It seems to have done her a lot of good - life has been hard on us since we've been married, largely because of the dot-com crash, and there hasn't been much of real quality in her life. I'm glad she's had this.

I'm leaving at 5 am for the six-hour drive to pick her up. Tonight I'm cleaning the house as I promised her it would be spotless upon her return so she wouldn't worry about me trashing the place in her absence. I even mowed the lawn.

The workshop certainly seems to have done her a lot of good. They had her doing a lot of work that's quite different from what she usually does, and she has painted quite a few paintings. She actually had to buy ink, paint and paper during her stay there even though she arrived with what she thought would be plenty.

486DX2 Laptop Packed with 8 MB RAM, 350 MB Hard Drive, 640 by 480 Passive Matrix Color Screen and Two (count 'em: two) PCMCIA Slots!

A while back I did some volunteer work to set up the office computers for the Lincoln Street Center for the Arts in Rockland. It's the former Rockland High School which was purchased by a non-profit foundation and now used for performing arts in its rather well-equipped theater, as well as gallery and studio space.

The grateful director offerred to give me a bunch of antiquated hardware and of course I eagerly accepted.

I got the laptop with the above specs, a Toshiba Satellite T2100CS. Once I plugged it in it booted right up into Windows 3.1 and seems to work flawlessly. I ran Windows Scandisk on it and tested it at length with Memtest86 and it didn't seem to have any problems. It's also built rather more ruggedly (and heavier) than is the current practice of laptop manufacture. They just don't build them like they used to.

I plan to use it as a firewall and NAT server to share my 56k modem connection among several other machines in the house. I used to have a Pentium II box to do that, but I took it to Newfoundland in June to get my mother-in-law online.

I know there are a number of distros that would probably be more optimized for this purpose, like The Linux Router Project (which can be installed on a single floppy, so you don't even need a hard drive) but I want to go through the trouble of building a firewall myself so I learn all about how it's done. I wasn't really firewalling before, just using NAT.

I just took it as a challenge when the Debian Woody r0 boot floppies wouldn't boot - they use up more RAM than the 8 MB the machine has to offer. The kernel includes a lot of options I don't need and the root disk includes a lot of stuff so that the ramdisk is too big.

The solution will be to make a boot disk that will allow me to partition and create filesystems that can boot in such small memory constraints, and then copy the contents of the woody root disk into what will later become /home, and then use that as root when I boot to do the initial install, rather than using the ramdisk at all. I found this in the 4mb Laptop HOWTO.

I didn't have a lot of luck with making a disk for muLinux with all the weird hardware I have (SCSI hard drives and IDE floppy on my laptop) so later I tried using the GNU Parted disk set.

But parted has a kernel packed with drivers for all kinds of RAID controllers and stuff, and a 7 MB ramdisk that's full of handy disk repair tools, so that didn't even come close to booting.

Then I figured out how to resize a ramdisk image. The wrong way is to give the "ramdisk_size=" parameter to the kernel. You can boot this way but only part of your ramdisk gets loaded into memory. At some point you will get a message like "attempt to seek beyond end of block device" at which point you are likely to crash.

The real way to resize a ramdisk image is to uncompress it under Linux with gunzip and mount it using the loopback device:

mv partroot.img partroot.gz

gunzip partroot.gz

mount -o loop partroot /mnt

Then you go through the filesystem you've mounted merrily deleting files you think you won't need. Note that all the /dev special files take up a significant amount of space because there are so many of them and the inodes take up invisible space in the filesystem. There are something like 3000 special files in the /dev directory of the parted root floppy so deleting most of them actually saves a significant amount of space.

Finally there is a couple megabytes of free space in the ramdisk to allow you to save scratch files that you just can leave out.

Now you create the new ramdisk image. Suppose I'm going to make it three megabytes:

dd if=/dev/zero of=newimage bs=1024 count=3000

mke2fs -b 1024 -i 2048 newimage

(press "Y" when it asks you if it is OK to make a filesystem in a file that is not a special file).

mkdir ~/newfs

mount newimage ~/newfs

cd /mnt

tar cvf - | (cd ~/newfs ; tar xf - )


umount newfs

gzip newimage

dd if=newimage.gz of=/dev/fd0h1440 bs=10240

If you want to create an image that can be put on a floppy with rawrite2.exe under DOS, use the following command line to append the appropriate number of bytes of zeros so it is the same size as the kind of floppy you want to use.

dd if=/dev/zero of=newimage.gz bs=1 count=XXXXXX

(where XXXXX is the right number of bytes)

Unfortunately that only almost booted. It would come all the way up, run out of ram, find no processes it could kill to free ram, and reboot.

So what I'm going to do is compile a custom kernel to boot off a floppy, that only has what the Toshiba Satellite needs to boot. Then I'm going to make a ramdisk image from scratch that only has cp, parted, and gunzip on it. I think it may actually save space to statically link the binaries, because the standard C library (if used as a shared library) will have a lot of subroutines that I don't use. So likely I can make a ramdisk that is only a few hundred k.

I'll write up a mini-HOWTO when I'm done.

To Onions

My wife Bonita has gone to spend the week at Bennington College in the mountains of southwestern vermont to attend an Art New England Summer Workshop on watermedia that is being put on by the Massachusetts College of Art. (Watermedia means acrylic and watercolor painting in this case.) Massart's in Boston so I guess they think it's nicer to hold their summer workshop out in the countryside. I drove Bonita down there yesterday and found that Bennington is indeed a beautiful campus.

I am very happy she is able to go and spend some time having a nice time doing something interesting in a beautiful place. Life has been very hard for Bonita almost her entire life, and especially so since we were married, because of the turbulence in the tech industry, and the stresses of buying and owning a home, and having to wait so long to get her green card. I have made four trips away on my own because of my work since we've lived in Maine, but each time Bonita has to stay home (usually because we didn't have the money for her to come too). So she's getting to live a little for once.

So I celebrated my temporary bachelorhood by cooking up some pasta sauce with lots of onions. For some reason Bonita really despises onions, she finds them revolting, so when she cooks for the two of us she never uses onions. Tonight as I sat down to dinner I raised my glass of wine in a toast:

"To Onions"

To be fair, Bonita does cook dishes with onions in them just for me to eat sometimes. She makes a mighty fine salsa - which she has never tasted.

I come from California, where I had grown up eating Mexican food. I miss the spicyness. Bonita is slowly coming around to the idea of eating somewhat spicy food, but I don't think she'll ever willingly eat onion.

So how am I spending the rest of my evening, how am I enjoying my newfound freedom? I went for a bicycle ride, and I've spent several hours doing the filing in my office.

My desk is a mess, and I need to do some state tax forms. I also recently filed my 941 Employer's Quarterly Federal Tax return, and I can't find the folder with any of my previous form 941's. That is a Bad Thing. So it's 2:30 am and I'm still filing. Once I (hopefully) find all my 941's I'll do some Maine state tax forms that are overdue, fax them in to Maine Revenue Services and go to bed.

Univega Gran Touring

I've begun doing a very happy thing. I've started bicycling again for the first time in more than three years.

I have a very nice bicycle (a touring bike), it is a red 27 inch Univega Gran Touring. Once upon a time I was so into bicycling I would go for 40 mile rides on it just to pass the time. I rode this bike 200 kilometers through Banff and Jasper National Parks in Alberta, Canada in the early 90's. (It was a Backroads bicyle tour and was a wonderful experience. Their singles trips (I haven't always been married) are great ways to meet the opposite sex.)

But for a long time the bike had sat in my garage almost completely unridden. Then I packed it up to put into storage when I moved to Newfoundland in April, 2000. We finally got our stuff out of storage and moved from California to Maine in January of this year, but it was the dead of winter so I couldn't ride. I left it unassembled, still packed in its unopened box, until last week.

But then I finally got it together to go out and put it together. It was a great joy. To my surprise, I discovered that I had a stroke of genius when I packed it back in Santa Cruz - I left the key to the kryptonite lock inserted into the lock, but turned in such a way that it could not fall out. So I even still have my kryptonite key.

I'm way out of shape (having worked as a programmer for 15 years!) so I didn't know how far I could ride at first, but I pushed hard and took it around the Owl's Head loop, North Shore, South Shore Drive and some other road past the Knox County airport. here's the yahoo map of Owl's Head.

I had a tough time of it (there are some hills) but I made it all the way around on the first try!

Today I timed myself - 36 minutes. Later I drove my car around the loop so I could measure the distance with the odometer. The trip is 6.4 miles - 10.67 miles per hour. Not bad for an old fat guy! Then I set up a spreadsheet so I could track my progress over time. I'm going to try to do the loop every day, when my time improves somewhat I'll start doing two laps, and eventually ride into Rockland and back.

When I'm able to ride into town and back regularly I'm going to re-join the Mid-Coast Gym. I was a member for a couple months a while back but I only went three times because I'm such a slacker. Bonita went every day or so for six months, and got in much better shape than she was. I'd like us to be able to go work out together.

Mid-Coast Gym is owned by a woman named Mona, who Bonita hires from time to time as a personal trainer. Mona celebrated her fiftieth birthday last year by riding coast-to-coast across the U.S.A. (Atlantic Ocean to Pacific). So I know I've got a ways to go yet before I can really claim I'm a cyclist again.

At the time of my life I've been in the best shape I ever was, I was riding one or two times a day up a big hill to U.C. Santa Cruz and out to the neighboring towns of Davenport to the north and watsonville to the south. I weighed about 180 pounds, felt great and was trim and muscular. Now I weigh 250, I'm about 16 years older, and I tremble with fear just to walk up the stairs to the second storey of my house.

So my goal is to weigh 180 again, ride at least 20 miles every day, and make a 50 mile ride at least once a week.

Unfortunately it snows pretty heavily during the winter here in Maine, so I'll need to stay in shape working out indoors. I've seen these workout stands one can mount a bicycle on that use spinning fans to provide resistance - a bicycle racer I knew had one of these. I'll get one by this winter.

I also used to lift weights. Not a whole lot, but overall I was much stronger then than I am now.

Bonita has been expressing concern for a long time that I am at risk for a heart attack (I am 38 years old). I had to pay significantly more to get life insurance because of my weight. Also an old friend who is only a few years older than me wrote me a while back to tell me he had been diagnosed with unstable angina, and to urge me to improve my diet and exercise regularly.

Oh, yeah, one more thing. It feels simply excellent to be riding again.

Lots Going On, and some Very Happy News

I'm afraid things have been far too hectic for a while for me to write, and I won't be able to write much even now.

Bonita's parents came down with us from Newfoundland when we returned home. A week later, her older sister and her family (including my brother-in-law Bruce, whose PC I installed Debian Woody on just before I left Newfoundland, and their two teenage daughters) came down to visit for a couple weeks. When her sister's family returned, they took Bonita's parents back with them.

I have some very happy news - one of the reasons I have been so busy is that we went to Montreal for Bonita's immigration visa interview at the U.S. consulate there. She also had a pretty thorough medical exam which included a couple vaccinations and a chest x-ray (to look for tuberculosis).

So the happy news is that nearly two years after we started the application process, we received Bonita's immigration visa! An hour later we arrived at the U.S. border in northern Vermont, surrendered the visa, Bonita submitted a signature and a fingerprint, and she was admitted to the U.S. as a permanent resident!

A temporary Green Card was stamped in her passport. She can now stay in the U.S. as long as she wants, and (importantly) obtain employment in the U.S., and can also qualify for U.S. bank loans (we would like to refinance our house, since the interest rates have dropped since we bought it, and we may qualify for a better loan with Bonita as a cosigner).

Happy news indeed!

Quite coincidentally (and completely unplanned) is that we celebrated our second wedding anniversary in Montreal!

(If you wonder how Bonita was able to come here before - Canadians can enter the U.S. freely as tourists for up to three months at a time. So each time she arrived, she had to leave a little less than three months later. Usually she would go visit friends in Nova Scotia and then come back. Even so, this wasn't a very good situation as she was not guaranteed re-entry into the U.S., and she could neither work here nor obtain credit here.)

I'm afraid though that within about five minutes of us arriving back in Canada on our way to Newfoundland in June, we both decided we wanted to move back to Canada (but to Nova Scotia this time). So now I get to start the same process Bonita just went through, to become a landed immigrant in Canada. But things will be more sensible now that we are both legally allowed to reside permanently in the same country as each other.

Today is July 30, 2002. I'm going to call up an immigration attorney in Halifax in the next week or so to tell him I want to apply to immigrate. Someday (hopefully) you will find news of my success in my diary much later on - I'll link back to here. I'm told it usually takes a year; Bonita's green card took a little less than two years and would have taken very much longer had she not been married to an american citizen with a good job. Let's see how long it takes me to immigrate to Canada!

Nice Words

I've been consulting for a private hedge fund named Market Research since last summer. Just now, Andrew Mart, the Director of Research there sent me the following:

Your code stands out in our code base as elegantly structured, making full use of the object oriented nature of c++, well documented, easy to understand and maintain, efficient to execute without violating interfaces or type safety, as well as platform independent with minimal dependencies. It is clear that your are thinking not only from the perspective of the hardware processor, cache, and RAM but also from the perspective of the user and other programmers who might later be responsible for maintenance of the code. The code is interesting to read for new ideas and tricks on how to make full use of what c++ has to offer. Furthermore, by using compile time safety checks and automated test harnesses as part of the build process, the code is hard to break since it maintains its integrity against other rushed programmers adding features before they read the code and understand its design assumptions.

Anyway, I have certainly learned a bit from reading your code and talking with you. Please let me know if you ever need a letter of reference.

That makes me feel really good. I worked hard on their code. I also stretched myself - there were a number of things that are in the code I delivered to them that I had never done before.

He also gave me permission to quote something else nice he said about my work earlier today on the phone. Go have a look. It's on the left and down a little ways.

Take a Stand

I just sent the following email around to some of my friends and family. I thought you would be interested to read it too:

Please consider signing the online petition, "No cooperation with U.S. Stasi".

It seems that Dubya wishes for us to form citizen's committees to rat out our neighbors, a well respected tradition with roots in such forward thinking nations as East and Nazi Germany, China during the Cultural Revolution and the USSR under Stalin, Vichy France and the Khmer Rouge's Cambodia.

The petition is at:


It's quick, it's easy, and best of all it's probably the simplest way for you to get your very own file folder started at FBI headquarters. Be the first on your block! (I understand if you listen real carefully, you can hear the spooks breathing on your phone tap.)

If you haven't already, please read my following two web pages, one an essay I wrote a few months ago, and the other a speech delivered by John J. Chapman 102 years ago - and even more profoundly important today than it was when it was first spoken:

Is This the America I Love?

Make a Bonfire of Your Reputations

Ever Faithful,


Perhaps President Bush's antiterrorism efforts are really a smokescreen to distract the American public from the financial shenanigans that he and Vice President Dick Cheney engaged in while Bush was a director for one texas oil company and Cheney was a senior executive at another.

My ISP, Adelphia, filed for bankrupcy after public disclosure of a Securities and Exchange Commission investigation into highly irregular loans that members of Adelphia's founding family received from the company.

President Bush received a loan under similarly favorable terms from an oil company he was a director of a while back. Recently, Bush rather hypocritically spoke out against such loans, and the House and Senate voted to make such loans illegal just in the last couple days.

(I read in the newspaper yesterday that the family members who received Adelphia's loans are likely to be indicted. Only Congress can indict a sitting president - a Congressional indictment is called "impeachment". How long do we have to wait before Bush is impeached?)

Further, Bush' oil company engaged in a fraudulent scheme to inflate its earnings while he was a director, in order to drive up its stock price. The SEC later forced the company to restate its reported profit as a loss. Bush sold his stock in the company just before news of this caused its stock price to plummet, an action for which he was investigated for insider trading by the SEC.

The SEC took no action against him, but did not release all the documents to the public. Now that Bush is president, many members of the public as well as many congressmen are calling for full disclosure. Yet despite Bush's claims that he did no wrong, the White House is forbidding the SEC from releasing these documents.

Finally, I'm less familiar with the details, but apparently Vice President Dick Cheney used to be a senior exec with an oil company called Halliburton, which is now found to have been cooking its books. Cheney denies having any knowledge of it, but yesterday the current president of Halliburton publicly stated that Cheney knew full well of the fraud when he was an executive there.

I don't want in any way to discount the greivous loss of life as well as the crippling injuries that resulted from the 9/11 bombing. But consider for a moment the economic impact that the 9/11 bombing had - nearly every employee killed at a whole stockbrocker company (Cantor), New York City tourism dried up, air travel down around the world, as well as the cost of fighting the war in Afghanistan.

Now consider the economic impact of the gross, and apparently quite widespread, corporate financial fraud that has been going on apparently for quite some time. Enron was the largest bankrupcy in U.S. history, yet it seems that in a few days WorldCom will become an even larger bankrupcy than Enron. The founding family of Adelphia borrowed $2,500,000,000 from Adelphia in such as a way as to leave this public company's stockholders liable, yet were given the loan without the knowledge of Adelphia's board of directors.

Qwest, a major phone company and ISP, is on the verge of bankrupcy too, and is desperately seeking a purchaser to acquire it, but no purchaser may step forward, because Qwest is under criminal investigation, and any company that buys Qwest would also acquire any criminal liability if it is found guilty.

It's not just a matter of a bunch of rich guys losing on the stock market. The rich guys - the people like George W. Bush and Dick Cheney - don't lose when this happens, because the have insider information, and get it early enough to cash out.

The real losers are ordinary people like you and me, programmers whose livelihoods depend on a healthy investment climate so that software companies will have the capital to hire us to write their products.

The losers are ordinary people like our mothers and fathers, people who are retired or are close to retirement, who depend on their investments in companies that once seemed reputable to sustain them through their golden years. Many elderly people who had invested in Enron have had to get minimum wage jobs at McDonalds in order to put food on their table. Now they will be joined by the other elderly people who had invested in WorldCom, Adelphia and Qwest.

It seems that there are many other such companies whose financial shenanigans are just coming to light. The economic impact of this will be far worse than the September 11th bombing.

Yes, Mr. President, what this country really needs is a Citizen Corps to rat out our neighbors in the fight against terrorism.

I know where one rat can be found - and he's a ringleader. Why don't you send the rat an email?. Or snail mail if you prefer, here's his street address:

President George W. Bush
1600 Pennsylvania Ave. NW
Washington, DC 20500-0004

According to Switchboard.com, you can give the rat a call at (202) 456-1111 (if you're not in the U.S., the country code for the US is 1).

Oh, I forgot to mention, many members of congress are calling for the resignation of the Secretary of the Army. It seems that he cashed out $31,000,000 worth of Enron stock when he was an Enron executive, and was the head of an Enron division that fraudulently manipulated electricity supplies to drive up prices in California during a desperate electricity crisis there. That's the kind of guy I want leading our boys in Afghanistan!

Guess I'll be the first up against the wall.

Back Online

Happily, a friend lent me the password to a national ISP that he keeps a subscription to for when he travels, but doesn't otherwise use much. So now I'm connected again. I'm researching new ISPs. I want to use a local Maine ISP - I always try to use mom 'n pop shops. I had no idea mint.net had just got bought by Adelphia when I signed up with them or I would have used Midcoast.com.

I'd appreciate any advice you may have for finding a new ISP.

What I want is always-on service with a static IP where I can run a server offering any protocol I want. I want no packet filtering, so I can use ping and traceroute, as well as portscan myself from the outside to test my security. I don't need much bandwidth, 128 be acceptable and 256k would be just great. 56k modem service would work, but would be slower than I'd like.

Unfortunately, both DSL and cable modems do not appear to be options because of my rural location. I looked into Midcoast's 802.11 wireless service but the signal couldn't penetrate the forest surrounding my house. I think there is two way satellite service sold in the area, but I don't think they'd let me run a server. I think the latency for interactive logins to my hosting service in Seattle would be unacceptable too. But if I can run a server on two-way satellite I'd like to know about it, I could deal with the poor latency if it would allow me to run a server with at least 128k in both directions.

So the options I think I have are dialup, analog leased-line, Centrex ISDN, or frame relay.

I know frame relay is expensive to install. I could deal with that but I can't figure out what the monthly charge would be - pricing for it is complicated. If anyone could give me a clue for what a month's charge of frame relay with guaranteed bandwidth of 128k would be (and very modest amounts of data transferred) I'd be very grateful - crawford@goingware.com.

Centrex ISDN would probably be the best compromise but I think it is unlikely anyone offers it. ISDN is not so widely used. I may not even be able to get an ISDN line installed by the phone company at all. With Centrex ISDN you can make an ISDN call to your ISP all month long without paying for the time (ISDN calls are normally metered at a business rate), you only have to pay the basic rate for your line, like $20-$30 a month. The ISP has to subscribe to Centrex service from the telco. My old ISP in Santa Cruz offerred Centrex ISDN and it worked well for many of their customers. I have a Motorola ISDN modem that I used with the Santa Cruz ISP and I found it really cool to use.

I can get static IP dialup service with a dialin number reserved for my private use for $79 a month from Midcoast. This would work OK. My main distress is that the outgoing bandwidth on a 56k modem is just 33k. This would be so slow as to make most of what I want to do with my server pretty painful. But that's the option which is currently leading the pack, I'm just not happy with it.

An employee of another Maine ISP (Great Works Internet) who wrote to me after seeing my previous lament about Adelphia's demise, told me that I can get toll-free dialup to most of the ISPs throughout Maine using a special area code 500 number. That greatly expands my choices. What would be really cool is if someone offerred Centrex ISDN on one of these 500 numbers, then I would be really set.

So help me out. I've spent a lot of time checking out various ISP's web pages and emailing their support staff, but it's really hard to get a straight answer to my questions. Very few of the ISP's seem set up to provide the kind of service I want.

Network Solutions Earns the Loss of My Domains

When registered my first few domain names, I used Network Solutions. That's all there was at the time.

But when competing registrars came into existence, I registered my new domains at Melbourne IT both because of all the negative stories I'd heard about Network Solutions as well as the recommendation of the Domain Name Buyer's Guide.

The Domain Name Buyer's Guide seems to have had it's domain name bought by some registrar that no longer offers the incredibly helpful information that it used to have. Unless I've got the domain name wrong? Is it domainnamebuyersguide.com or is it somewhere else now?

I emailed a request for a domain transfer form to Melbourne IT just now, and included the following in the letter. I thought you would all be interested to read it too:

I'd like you to know why I started using Melbourne IT for some of the newer domain names I have registered, and why I am transferring my domains away from Network Solutions.

I discovered Melbourne IT when I found your high ranking at the Domain Name Buyer's Guide (which sadly seems to have disappeared). My primary concern was the rights given to the domain owner in your contract. I think one or two other registrars may have placed higher than you in the overall ranking because of their lower prices, but you ranked the highest in terms of the rights given to the domain owner.

I have never been very happy with Network Solutions. While with one important exception (noted below) they have handled my own registrations OK, I have heard far too many horror stories to want to stay with them. It just happens that most of my domains were registered with Network Solutions before competing registrars were allowed. I think I may have registered one or two after this but before I was able to make an informed choice of who else to use.

Among the horror stories I have heard:

  • transferring ownership of domains in response to fraudulent requests

    (sex.com is a notable example; network solutions refused to transfer it back after it was stolen. There was a court battle over it for several years and ownership was only restored to the original registrant after he won on appeal and network solutions was ordered to do it by the court).

  • losing customer payments

    (a close friend of mine who owns quite a few domains has had several payments lost by network solutions with the result that some of his domains expired without him being able to prevent it. His credit card was charged yet no credit was made to his registration accounts. I've heard tales of this from lots of other people.)

  • inability to reach a human being for customer service or tech support. Network Solution's wall of silence is legendary.

  • spam sent by network solutions to domain owners, banner ads on network solutions web sites, direct snail mail hawking .cc and .tv domains, and browser cookies that are obviously meant to track me for marketing purposes that are placed when I visit their site to manage my domains.

  • sending fraudulent "renewal" notices to domain owners who use competing registrars. I'm sure you have heard about this. There was fine print on the back of the notice that indicated that sending in payment for "renewal" would transfer the registrar to Verisign (network solutions new owner).

    This is the use of the U.S. postal service to commit fraud, pure and simple. Because these letters were sent from one U.S. state to others, it is a U.S. Federal crime.

    I'm happy that the courts have ordered them to stop doing this in response to a lawsuit filed by one of the competing registrars, but I feel that criminal prosecution should be pursued by the Postal Inspector. I had intended to forward Verisign's letters to the Maine State Attorney General with a letter urging him to prosecute, but I'm sad to say I got too busy to deal with it and lost the several such letters my wife and I received from Verisign.

Finally, I had meant to transfer domains a long time ago, but the reason I am finally getting around to it:

  • Network Solutions has allowed several of my domains to expire without notifying me that I needed to pay for renewed service. This happened to two domains I use as well as one of my wife's domains. I received neither email nor snail mail billing notices; previously I used to receive both at least a month before payment was required.

    One of these, goingware.com, is the domain for my business, and where I receive almost all my email. I am a self-employed software consultant, and continued registration of goingware.com is vital to my family's livelihood.

    Yet I found out my registration had expired when I was unable to log in to my email server one day. That same day I got a call from a friend that all my email was bouncing because name lookup was failing. That kind of thing just has to stop.

You should be pleased to know that Network Solution's hijinks are resulting in their loss and your gain.

103 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!