Older blog entries for goingware (starting at number 114)

Do You Have a Word Resume?

I have an HTML resume online, and near the top-left, hilit in a green box is a link to my plain-text resume.

When I email an application for a job or contract, I paste the plain text resume into the body of the email. The top of the plain-text resume gives the URL of my HTML resume in the event they want a formatted version.

But quite often some brainless recruiter responds with a request that I send a Word resume. I always respond by resending my text resume and explaining why I don't use word.

Actually the reason I stopped was that it got to be a pain to always keep three versions updated. The next reason was word macro viruses - I knew that anyone with a clue wouldn't accept word resumes, and in fact many companies will not accept word resumes from unknown people.

Tonight I read RMS' page We Can Put an End to Word Attachments. I thought it very well written. So I put a link to it in that green box on my HTML resume. Someone scanning around my resume looking for a link to the .doc version is sure to find it.

Do you know what a "sapper" is?

It's a guy with a shovel who digs at the base of a castle wall. During a siege, a sapper can bring a castle wall crashing down just by digging.

Just one more shovelful.

If everyone did just one little new thing each day to sap microsoft's walls, it would come crashing down in just a couple years.

Ever Faithful,

Mike

1 Sep 2002 (updated 1 Sep 2002 at 08:18 UTC) »

The author of this Usenet post has entirely too much time on his hands.

Massively Multithreaded Spamming

I got the following spam at one of my addresses earlier this year. I use Evolution's filters to sort all the spam into one mailbox in a basic way, but check it from time to time to make sure there's no real mail there. I only noticed this just now:

If you want to send mass Email, you will need some SMTP servers, but now many SMTP servers do not allow you use them , they are not open, then how can we find open SMTP servers?

Speed Smtp Finder will help you!

Speed Smtp Finder can speed search the SMTP servers .It can use hundreds of threads/connections to search,The more connections, the more ip addresses will be verified at the same time. When you put 100 connections, it is the same thing as 100 computers searching ip addresses.

It is very easy to use.You can just click 'start' to start search , click 'save ip' to save good smtp server ip address. Then is all!

The program supports Socks5 proxy protocol, so you can use it within a Local Area Network (LAN), too !

The program can Auto save good ip address( open smtp servers )!

Click Here To Download The Trial Version , The Full Version Only Costs $ 29.90 !

I'd be careful about clicking that link, heaven only knows what will land on your hard drive. Just so you know what you're clicking, the link is:

ftp://emailscan:vw7y3a@emailscan.51.net/public_html/SSF.exe

Now, someone explain to me, I really want to understand. I'm trying hard.

Why is it that the teenage authors of viruses, warez and crackz are put into prison while the purveyors of Speed SMTP Finder so far escape prosecution? Perhaps this is related to the reasons Microsoft has not been found liable for propagating Outlook, Internet Explorer and Internet Information Server, which together have been responsible for tens of billions of dollars in economic damage. Oh I forgot word and excel.

Maybe someone could study the above application (if it's not a r00tk1t) and add support to it in the teergrube?

Here's the full headers to the inquiry I received:

Return-Path: <@mail.qzptt.zj.cn:jack_hunbury@didymaster.net>
Received: from mail.qzptt.zj.cn (mail.qzptt.zj.cn [202.96.113.39]) by
        dragnet.seagull.net (8.12.1) with SMTP id g08ChrFY009687 sender
        <@mail.qzptt.zj.cn:jack_hunbury@didymaster.net> for
        <crawford@goingware.com>; Tue, 8 Jan 2002 04:43:54 -0800
Message-Id: <200201081243.g08ChrFY009687@dragnet.seagull.net>
Received: from html([61.175.53.90]) by mail.qzptt.zj.cn(JetMail 2.5.3.0)
        with SMTP id jm833c3b0e27; Tue,  8 Jan 2002 12:42:23 -0000
From: jack_hunbury@didymaster.net
To: dmcfet@islandnet.com
Subject: Smtp Servers
Date: Tue, 8 Jan 2002 20:43:46
X-Mailer-Version: 20020107
X-From: <@mail.qzptt.zj.cn:jack_hunbury@didymaster.net>
X-Recipient: crawford@goingware.com
Mime-Version: 1.0
Content-Type: text/html; charset="DEFAULT_CHARSET"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2919.6700
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700
Status:   
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.

Whee!

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.

Crash!

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:

#!/bin/sh
#/usr/local/bin/keep-syncing
while true
do
    sync
    sleep 3
done

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 - )

cd

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.

105 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!