Older blog entries for MichaelCrawford (starting at number 151)

New Article

I wrote a brief article to promote the Common Content catalog and the Creative Commons licenses. It's on the front page at Kuro5hin right now:

I admit the title is rather clumsily worded.

Are You in Favor of Copyright Reform?

I'm trying to incite the teeming masses of peer-to-peer music downloaders to take political action in this year's election in the US.

How can I state my case more effectively?

Thanks for any help you can offer.

In the past, asking for help with my writing this way has been tremendously helpful.

Stop Me Before I Write Again

I have a new article in the edit queue at Kuro5hin:

While the article in in moderation, the above link will only work for logged-in k5 members. When and if it's approved, the link will work for everyone.

I wrote it mainly to promote the Common Content catalog, which I think is not as well known as it deserved to be.

It's much shorter than my articles usually are. I assure you that you have nothing to fear from reading it.

Do You Read Romanian?

An incredibly helpful fellow named Ciprian Mihet has translated my music downloading article to Romanian:

Both the translation and the english original are under a Creative Commons license. I'm actively seeking help to translate it to other languages.

Trip to the Emergency Room

Early Friday afternoon I walked up to the Emergency Registration desk at the hospital and said "I need to talk to a psychiatrist. I have schizoaffective disorder. I don't think my medicine is helping anymore".

I didn't really think it was an emergency - yet. But I had been trying for a month to get an appointment at the local mental health clinic. Although they had accepted my referral, they had no estimate when my first appointment would be. When I called to ask if they could get me in soon, and said I wasn't doing so well, they said to go to the emergency room.

I had a hard time understanding how an emergency room visit could possibly make more efficient use of Canada's overburdened health system than somehow squeezing in a regular office visit for me, but go to the emergency room I did.

It was complicated by the fact that I don't have a medical card yet. They didn't quite know what the procedure was. I was prepared to have to pay but the hospital staff didn't have the first idea of how to charge money to a patient who wasn't covered by the Canadian medical system. I was appalled that they tried to charge me up front at first, for an emergency room visit.

In the end I paid $270 canadian after I was done with my visit. That's one reason I tried so hard to just get an office appointment. I was only willing to go to emergency when it was made clear that I wasn't going to get an appointment until after I figured the men with butterfly nets were going to have to come chasing after me.

After a four hour wait (fortunately I thought to bring a book to read) I spoke to an emergency physician for a few minutes. He was familiar with schizoaffective disorder, which I found very suprising. He was able to find a psychiatrist to come speak to me. I just had to wait another hour.

The psychiatrist I saw was very good. She spent a long time with me, especially considering that her first question was "So when did you first see a psychiatrist?" That was the summer of 1984. I spent about an hour giving her my history.

I've been having increasing paranoia and occasional visual hallucinations. I had started hallucinating again this spring, for the first time since 1994.

The paranoia has been steadily getting worse, and hallucinations more frequent. The reason I thought my medication wasn't helping me was that from 1994 through early 2001, I only needed two milligrams of risperdal each day and had no symptoms. From 2001 through the middle of this year I took three.

I went up to four for a little while, but dropped back to three because I thought I might be getting tardive dyskenesia, a form of brain damage that can occur when taking any of the antipsychotic drugs. It causes involuntary repetetive motions. What happens to me is that my mouth opens and closes repeatedly, and I have a hard time stopping it.

But I started taking four again, but after a few days got paranoid again. I tried taking five, but spent the whole next day in an absolute stupour. I wasn't sure it was safe to take five milligrams of risperdal.

The psychiatrist said that people don't become tolerant of risperdal. That is a common problem with some other psychotropic drugs, so I thought it might be a problem for risperdal. She said it takes at least a week to have its therapeutic effect, so taking an extra milligram wouldn't be expected to help right away.

In the end she decided to raise my dose to five milligrams, rather than try out a different drug as I had requested at first. But she said to split the dose, 3 mg at night and 2 mg in the morning, so I wouldn't be so sedated. I know from past experience that after taking risperdal for a few days the sedation stops happening and one doesn't notice anything anymore except that the symptoms aren't there.

I'm on my third day of the new dose. At first I felt very confused and sedated. But starting last night I felt better than I had for some time. The best way to describe it is that I felt clear-headed and grounded. I've felt that way most of today, except for a little sedation after I took my morning dose.

I don't want to stay at five milligrams because there is still the danger of tardive dyskinesia. Risperdal is also expensive, although it's a lot cheaper than getting admitted to the psych ward.

I've decided to take off work until January. Fortunately I have some money in the bank because I sold my house in Maine. Here in Canada we're renting.

The explanation for all this seems to be that the symptoms are induced by stress. This last year has been the hardest of my whole career. But I wouldn't have thought I would get symptomatic right now - I was under much more stress before we moved, trying to finish a difficult project, then trying to sell my house and move. But the p-doc and a therapist friend I discussed it with said that such stress can have delayed effects.

The book I brought to pass the time at the emergency room was How to Want What You Have. I had to wait so long that I was able to read most of the book while I was waiting, and I found it so comforting that I was concerned that at first the regular doctor and then the psychiatrist would think I was making up my claim that I was mentally ill. But they both took me pretty seriously. The psychiatrist repeatedly emphasized that I did the right thing to come to emergency. She said that was a lot better than having to spend time in the hospital.

Laptop Computer Recommendations?

Bonita is looking for a new windoze notebook computer to do web design with. She'll be doing some light photoshop and might get flash. She wants to run Windows 2000, it would be best if that were available as an installation option (sometimes available online, never in stores that I can find). If she ends up buying one with XP, we'll wipe the hard drive and install 2000 ourselves.

We need a model that we can purchase and get warranty service in Canada. While some notebook vendors will ship to canada from the US, few in the US will accept warranty returns from Canada.

Two specific questions I have: are the Xplio notebooks any good? They are sold by staples in Canada, but are built to order. Windows 2000 is available.

Secondly, what's the big deal with Centrino? I thought it was just a form of 802.11. But I see all these Centrino notebooks that have slower clockspeeds yet are more expensive than higher clockspeed pentium 4 machines.

A computer store salescreature told me that centrino had "less megahertz for longer battery life". I could see why that would extend battery life, but don't understand why they should be more expensive. Is it a different architecture that is more efficient? Can you point me to some benchmarks comparing pentium 4, AMD and Centrino processors?

Thanks for your help.

iRATE

The iRATE developers want to release 0.3 by Christmas. There are many complaints about the release version, which I understand are mostly fixed in CVS. But of course there are lots of little problems that always have to be ironed out for a release.

You can help out too if you like, by joining the irate-devel mailing list, and testing snapshot builds.

Although I've done a lot of cheerleading for iRATE, and some testing, I've never done any actual development. I thought it would be helpful if I started making snapshot builds for debian powerpc, as I don't think any of the other developers use that, but there are quite a few people who run debian and other linux distributions on Macs, IBM rs-6000's and a few other powerpc-based systems.

I got the irate client to build OK, but I need to build swt on powerpc. I need some help with that.

It's actually been several years since I've programmed in Java, and irate can be built native with gcj, which I just used for the first time tonight.

I'm going to also test the snapshot builds on Windows, Mac OS X and Slackware linux, or at least I will when I get the ethernet card I ordered for my Mac so I can share my net connection. It's not hard to find an ethernet card that will work under powerpc linux, but it does seem pretty tough to find one that will also work under Mac OS 9.1, which I occasionally still run on my ancient PowerMac 8500.

More Fun with Spreadsheets continued...

slamb, I think the words you were trying to find were "Read the Fine Manual" :-)

And yes, all the spreadsheets had the "Scatter" or "XY" plots if you looked hard enough. Quattro Pro 6 made it pretty tough, as it had a "Specialty" plot category that had a bunch of random kinds, including the XY plot. Gnumeric I think had it right, in that it defaulted to an XY plot, I think what most people would expect when charting two columns of data.

Although I could have used either Quattro Pro or Excel, I wanted to see what the latest Gnumeric would do. I took a stab at compiling it on Woody, but it had dozens of build dependencies, all kinds of Gnome 2 stuff, that would have been difficult to get working on Woody. So I took the plunge and updated to a Debian testing system.

And you know what? Gnumeric still formats dates in chart labels wrong. Gnumeric 1.2.1's chart looked just like the one from 1.0.8 in my previous diary entry, where the dates are shown as large integers rather than being formatted as recognizable dates. The numeric format of the cells the data comes from is ignored. I'll see if I can get 1.2.2 working on testing (maybe it's available in unstable) and if it still does this I'll file a bug.

But I was pleasantly surprised that Debian testing includes OpenOffice 1.1 so I gave that a try. And it did a pretty decent job of making a chart, so I guess that's what I'll use from now on. An advantage of OpenOffice over Gnumeric is that I can use the same application on Linux as Windows. Here's the results:

There is still a small problem with OpenOffice's chart though. On some of the X-axis labels the day is below the month, on others it's to the right. But I can live with that.

Writing

The chart shows the number of unique IP addresses to which my music downloading article has been served each day since I first posted it. I got the figures for each day of September to take a close look at the effect of the RIAA's lawsuits, which were filed on September 8. On September 9, the news came out that one of the suits was filed against a 12 year old girl, and interest in my article skyrocketed.

During the other months the figures are averaged over typically ten day periods, to cut down on the work of munching my server logs.

Here are more details on the article's statistics.

I ask in the article for help translating it, and there is a Romanian translation that should be just about done. It's on the web already but I won't post the link until I hear back from the translator that I didn't mess up his text when I marked up the HTML. He imported my HTML into Microsoft Word to do his translation, then I used AbiWord to translate the Word to XHTML, but AbiWord's markup is kind of verbose so I had to put a lot of work into simplifying it. Hopefully in the next couple days I can release it.

(The article has a Creative Commons license. Please copy it.)

I haven't been doing much writing lately since I've been playing the piano so much. Even though the piano takes up so much of my time, Bonita is happy with it because she has been urging me to find a way to spend time other than sitting at a computer.

Debian is Beyond My Comprehension

One reason I was willing to upgrade to Debian testing was that I hoped to get a later, and more stable version of Mozilla. Woody has Mozilla 1.0, which has several very annoying bugs that each happen to me several times a day.

Debian's policy is that "stable" means "stable", and the only alterations made to the stable distribution are to fix security holes. That means no bug fixes, even if the bugs happen to everyone, every day, cause frequent data loss and frustrate one to the point where one wants to shove one's boot through the monitor.

The way you can run somewhat current software on Debian is to run a testing system. This mostly works OK, but at the cost that sometimes your box will break when you do an update.

Imagine my dismay when I found that testing still has Mozilla 1.0. I was really incredulous about that.

There is a procedure called "pinning" that allows one to mix packages from different distributions. So I configured /etc/apt/preferences to fetch the "mozilla*" packages from unstable. And do you know what's available in unstable? Mozilla 1.4? 1.5? No, CVS snapshots.

I gave it a try anyway because I was so desperate to avoid these bugs that I tried to install the snapshots, but gave up and uninstalled them because they would suffer segment violations during installation.

Can we please have a middle ground, one where I can run a stable version of Mozilla that's actually expected to work?

There are people who build "backports" of testing and unstable packages, built with stable's dependencies. That's what I tried to do with Gnumeric, but it wouldn't have worked. And somewhere I found a web page with lots of such backports. But they were all for i386, and I run Debian on a PowerPC Macintosh.

I wouldn't have brought this up again, as I've bitched about it before, but Mozilla's window froze a couple times while I was trying to enter this diary entry. The first time I lost all my text and had to retype it. The second time I remembered Advogato's feature for avoiding data loss, and kept hitting the Preview button, so when it happened again I was able to recover it.

But most sites don't do that, and Mozilla craps out that way for me at least twenty times a day, so it must happen to other people.

I guess what I'm going to have to do is build it myself. I put a new hard drive in my Mac so at least I have the disk space for it. But Mozilla has a huge sourcebase, with which I'm completely unfamiliar, so I'm not looking forward to it.

6 Dec 2003 (updated 6 Dec 2003 at 22:54 UTC) »
Really lame spreadsheets

I was trying to use Quattro Pro 6 (sorry, said "WordPerfect" at first) for Windows to make a graph of some web server statistics by date. I prepared data for every day of september, but only for each ten or eleven day period of august, october and november.

When WordPerfect prepared the graph is placed each datapoint equidistant from each other. So with thirty datapoints for september, that month took up the bulk of the area of the graph. That's really stupid. What I was trying to do was to see the relationship between the date and the traffic and the length along the x-axis wasn't proportional to the date!

So I exported it to Excel, because Excel lets you have somewhat more control over how your graphs appear, and it did the same damn thing.

I'm about to transfer my file over to my Linux box and try Gnumeric, and if that doesn't work I'll use Gnuplot. I'll let you know how it goes.

One other thing that always bugged me about both Excel's and WordPerfect's graphs is that you can't plot error bars, which is important when analyzing scientific data such as I had to work with when I was a physics student. This simple omission makes the graphing in commercial spreadsheet programs basically useless for scientific purposes.

More on Spreadsheets

connolly, most people will notice when you address them in your diary. What I do is open the recentlog from time to time and use my browser's "find in page" to search for my name.

I tried Gnumeric, and I think it would work fine, but I was stymied because my Linux Macintosh has only a one-button mouse. It's gotten hard to find three-button ADB mice. Sometime soon I expect I'll install a USB/FireWire combo card and bring my ancient Mac into the 21st century - but I don't have one today.

There is some kind of hack to emulate the other two buttons with the keyboard, and I had it configured once, but then I reinstalled and now I don't remember how to set it up.

I managed to download OpenOffice, even though their servers are down this weekend for an update, by using Google to search for mirrors and looking at cached pages. I got OpenOffice for Windows to avoid the button problem.

But OpenOffice wants a later version of Java than what I have. Now, here's a puzzle for you: I challenge you to go to java.com, and by using a Linux box as the download host, install the JRE on a Windows box that's not connected to the internet.

I can transfer files to Windows. After downloading them on Linux, I unplug the ethernet from my cable modem, and plug it into my ethernet hub.

As far as I can tell, one cannot get what one needs to do this from java.com, which is where java.sun.com tells you to go at first. But poking around on java.sun.com I found the "standalone installer" which does what I want. The installer on java.com is actually a downloader, and won't install to a disconnected machine.

Now I gotta disconnect my Mac from the net. I'll be back.

(I'm still in search of an ethernet card that works in both Linux for PowerPC and Mac OS 9.1.)

OpenOffice Doesn't Work Either

OpenOffice 1.1.0's charting seems to be even lamer than either Quattro Pro's or Excel's. Besides spacing all the X-values at even intervals rather than proportionally to their values, it also positioned the x-axis labels so they were partially off the bottom of the graph, and unreadible.

I could understand the first try at a chart defaulting to something that's not right, but there ought to be a UI to let me customize it to what I want.

I'm pretty sure Gnuplot can do just what I want, but I work with these graphs often enough that it would really be nice to just have it in a spreadsheet.

Also, there doesn't seem to be any other spreadsheet that will import a Quattro Pro document. Quattro Pro can export, but will not export all the pages of a workbook unless you export a Lotus 1-2-3 ".wk3" file.

Excel will import a .wk3 file, but it doesn't do that great a job. But then I can save my whole workbook as a ".xls" Excel workbook which both OpenOffice and Gnumeric will open.

If I can find a spreadsheet I'm happy with I can fix my workbook up so it works right, but this multiple exporting and importing makes them kind of wonky.

What I'm going to do now is figure out how to emulate the second and third mouse button on my keyboard, and then give Gnumeric a try.

I also tried KDE's KSpread, but whenever I try to open my workbook (in whatever format) KSpread just crashes. This is KSpread 1.1.1 on Debian Woody for PowerPC.

If I can't get Gnumeric to do it for me, I'll use Gnuplot.

Here's how to emulate a three-button mouse on a Mac

Google is my friend.

echo 59 > /proc/sys/dev/mac_hid/mouse_button2_keycode
echo 60 > /proc/sys/dev/mac_hid/mouse_button3_keycode
echo 1 > /proc/sys/dev/mac_hid/mouse_button_emulation

This makes F1 the middle button and F2 the right button. Here's a list of keycodes.

And to think I've just avoided doing anything where I had to use the middle or right buttons for about a year. Copy & Paste has been pretty challenging.

Almost There

Gnumeric almost does it right. You can see the graph is more detailed just left of the middle, where I have the daily data for september:

This would be good enough just for me to look at my own stats with but not for presentation. The problem is the labels on the X-axis. Those numbers are supposed to be dates; the values shown are the internal representation of the dates (in days from some epoch I suppose) but they are not formatted as dates in the graph.

I did check to see that the column that had the dates in them had "date" selected as the numeric format, but that didn't effect the graph.

This is with Gnumeric 1.0.8 that is included in Debian Woody. Being Debian, it is of course out-of-date. I'll see if I can find a more up-to-date binary. That's a problem for Linux users who don't run x86 architectures, though. Either I'll have to get it from testing (which I don't like to do - sometimes installing a bunch of dependencies from testing will break my box) or I'll build it from source.

Rethinking Embedded Systems Development

I've been doing embedded systems development for a little over a year now. There has also been a little OS X and Windows driver development, to handle the host interfacing to the widgets I was working with.

It's been mostly FireWire and SCSI protocol and driver programming for storage devices (the packet-level part of the SCSI protocol is widely used these days over a wide range of physical cables; on FireWire one transports SCSI via the Serial Bus Protocol 2.)

I'm starting to wonder whether this has all been such a good idea. I need something to be different about my work, or I'm going to reach the point where I can't do it anymore.

I was getting to the point up until a couple days ago where I was getting ready to post a diary entry that was going to say "I'm ready to do any work at all that doesn't involve computers". But now I'm thinking maybe writing code would still be OK, I just need to be doing something different than what I'm doing.

Early in my career I quit my job doing tech support, and started applying for any job I could find that didn't involve computers. I applied to work on a loading dock and as a boat builder.

During an interview to be a mechanic at a bicycle shop, the shop owner told me that what I really should do is go back into computers and pay my dues. He felt that if I did so I would have a much more rewarding career than I would as a bicycle mechanic. I was really disappointed, but in the end, that's what I did, and I did have a rewarding career, that has lasted sixteen years so far. But now I'm back in the position where I think it would be really neat to be a manual laborer if it meant I didn't have to write code anymore.

I've been completely dead in the water for about two months now. For some time I've been doing "fixed-bid" contract work, meaning that I only get paid for completed work. For small jobs, I just get paid when I'm done. For big jobs, I get paid in increments when I reach certain milestones.

I completed a big project just before I moved, and got my last paycheck for it. Since then I've got nothing done, and haven't earned any paychecks either. I'm fortunate to have some savings otherwise I'd really be in a fix. It's probably for the best that I'm doing fixed-bid, because if I was working hourly I would certainly have gotten fired by now. Even so, my client really does need me to get this work done soon.

It's gotten to the point where trying to work feels like trying to push water uphill. On a good night, I spend a lot of time at Slashdot, Advogato and Kuro5hin, maybe listen to a little Radio Paradise. On a bad night, I sit staring at an empty source file window, with a feeling that starts out as a vague uneasiness but eventually moves into outright panic.

For a while now Bonita and I have been discussing how I need to get out of programming. Not many people work as actual coders for as long as I have. I'm pretty sure I'm much older than most of you (I'm 38). It's pretty rare to see an employment ad seeking a senior software engineer that wants more than seven years experience. Only once in my life have I ever seen an employment ad seeking a programmer with fifteen years experience.

Most coders will move into other computer industry jobs such as marketing, management, project management or sales by their mid-30's. I've never wanted to do anything but code - anything in the computer industry at least - because none of those jobs appeal to me. I don't expect I would be competent at them either.

Sometimes I think about going back to school. At first I was thinking about getting my PhD in physics. That was what I was aiming for when I was studying at Caltech twenty years ago. I wanted to become a professor so I could teach and do research. I actually was in grad school for a little while ten years ago. All the other grad students thought I was out of my mind to want to give up a career as a software engineer to become a physicist, but I was very happy to be in grad school.

I like to write, and I'm good at it. I've written here before about how I might like to write professionally. Sure, it's hard to make it as a writer, but I expect that if I persisted I could do it.

For a month now I've been playing piano again. I used to compose for the piano, back when I played regularly, but it's been ten years since I've really played enough that I could do that. But I've been steadily practicing two hours a day now, and getting good again, and have started improvising again. The way I'm able to compose is that I just improvise for a while each day, and every now and then a new song just jumps out at me.

So, as if physics and writing aren't unlikely enough careers, I've started to entertain the idea of being a musician and a composer. I think I could, if I studied long and hard enough, but even if the music I could write were to become popular, it would easily take ten years of study to get good enough that that would be a possibility. Even so, lately I've been thinking that I would prefer that to software engineering.

Did you know that Philip Glass didn't major in music when he was an undergraduate? Yet he is one of the most creative and forward-thinking composers of our time. His bachelor's degree is in mathematics and philosophy!

Last night Bonita noticed the despair that I was experiencing and spent some time discussing it with me, trying to get at the root of my problem. I didn't know what was wrong, just that I had been feeling sad all day. I didn't think I was sad about anything in particular, I just had spent hours thinking about all sorts of sad things. I spent a lot of time thinking about something sad that I'm going to post here in a future diary entry.

Somehow Bonita managed to worm out of me that I was contemplating a career in music, and hadn't quite managed to break the news to her. This caused her quite some concern.

I went on to remind her that when I left Caltech in 1984 I planned to become an artist, and intended to major in art when I transferred to UC Santa Cruz in 1985, but for some reason that is still not clear to me, I lost courage and continued to study physics. I eventually got my physics degree, but it took me from 1985 to 1993 to complete the last two years of study. I also took up the piano right when I dropped out of Caltech, but gave it up shortly after I left grad school in 1994.

Yes, she was distressed, but not as much as you might think. Bonita has a degree in marine biology from Memorial University of Newfoundland, and is just a few courses short of a second bachelor's degree in agricultural chemisty from Nova Scotia Agricultural College. But for several years now she has been studying art. She has some of her work online. In January she's going to start taking some classes at NSCAD University, formerly the Nova Scotia College of Art and Design.

I had encouraged her to quit her job at a biotech firm in California, and pursue her love of art, in part because I saw how talented she was, and how much she loved art, and in part because by doing so I could give her the chance I never had. I promised that I would provide for her during her study and until she could get her art career established. I fully expected that would take a long time, and that there was the risk she might never be a success.

So what Bonita told me was that if I wanted to become a musician, she would support that. She's known for quite some time now that my days as a programmer are numbered and has been trying to help me find a way to change careers. But she's not yet able to provide for the two of us, and I expect it would take even longer for me to become a professional musician than for her to become a professional artist.

What she asked me to do was to make a plan. I needed to find some way that I could eventually get what I want (whatever it might be, my ambition seems to change almost daily) in such a way that we are able to continue providing for ourselves.

She felt that if I had some credible plan in mind, and was working steadily to carry it out, then I would be able to tolerate continuing to write code for the time it took to pay off our debts, save up money and learn to play and compose for the piano like a pro.

Well, that made sense.

She suggested a compromise to what I've been doing lately. Recently I seem to always be able to find the time to practice my piano, but have a much harder time getting my work done. She suggested I alternate each day. One day I would devote myself to my music, the next to my work. I am a good enough programmer, and we live modestly enough that if I were able to work productively during the time I was at my desk, we would be able to get by with me working every other day.

I thought that would work but honestly all I could think of was how I would get to spend all day playing the piano without having to even sit at my desk.

But I decided that today, the first day of my plan, that I would work at my programming. I did that mostly to set Bonita's mind at ease. The last couple months of me pushing water uphill have not been easy on her nerves.

I'd been trying without any success to write a small Windows application that included a device driver. I decided I'd give up on the driver for now, because I wasn't getting anywhere on it, and just work on the user interface for a while.

And I'd been sitting at my desk hacking away at some C++ GUI code, actually getting a lot done, feeling flow for the first time since before I left Maine, when I said to myself:

Hey, this is pretty cool!

And it occurred to me, maybe it was a mistake that I ever went into embedded systems development. I still want to find something else to do, but I think if I have to work as a programmer, I'd rather be doing graphical user interface programming.

GUI is the main work I've done since 1990. It's only in the last year that I've done embedded. I did a little operating systems work in the mid-90's, but that was Mac OS system software, so what I was really doing was working on the core of a GUI system.

I have a problem though. I had a lot of good reasons to move from GUI to embedded, and all those reasons still apply.

Primary among them are my age and my style of programming. It is very uncommon to find GUI developers with fifteen years experience. On the other hand, age and experience are valued very highly by the sort of people who hire embedded developers. I started to think about embedded around the time I started getting told I was "overqualified" by potential employers, but then had an interview at an embedded systems manufacturer whose youngest programmer had twenty years experience.

My style of programming was a constant source of friction between my clients and myself the whole time I've been a consultant. People who pay to have GUI applications written want the work done quickly and cheaply, and are willing to tolerate poor performance and buggy code. If you don't believe this, consider for a moment the performance and quality of the products published by the market leader in GUI applications.

I write good code, but one thing I don't do is write it quickly. I take the time to write it well. My code is reliable and performant. I've worked hard throughout my career to improve the quality of my code. Unfortunately, I've never been one to implement a lot of functionality quickly or cheaply.

I've actually tried to cut corners and churn out crap code quickly, but somehow I'm not able to work that way. It's not like I can just type faster if I stop taking care to watch for mistakes. I'm not able to work at all if I'm not paying attention to detail.

So the other reason I went into embedded is that reliability and performance are valued by people who pay embedded programmers in a way that they aren't valued by those who pay GUI programmers. At best, poor quality will make an embedded product fail in the market. At worst, poor embedded software can get people killed.

Performance is more important in embedded work because the people who pay to have the software written are also paying to manufacture the computers the software runs on. If Microsoft had to sell you a brand new computer every time you bought a new word processor or spreadsheet, you can be sure that performance would be microsoft's top concern. It's cheaper to manufacture slow hardware, and to use less memory. Such hardware also consumes less power, yielding longer battery life and generating less heat. It's quite common these days for embedded programmers to write code for 50 Mhz processors with sixteen bit busses. There are still lots of applications for eight bit processors.

It has been my experience since I've been doing embedded work that my clients are happier with me. To a large extent that's because they support me in taking the time to get it right.

I had a hard time learning to do embedded work. There was a lot to learn. One target I programmed had 1700 BYTES of RAM. But I've been doing it for a year and to the extent I can focus effectively on my work I do well at it now.

But I think I've realized that I just don't like it. I was thinking for quite some time that I didn't like any sort of programming. But I don't think that's the case, I just don't like doing embedded work, or writing device drivers. I still get a thrill out of doing graphical user interface development.

So I'm in quite a quandary right now. Bonita wasn't too happy when I shared this with her. This last year was the most difficult of my entire career, in large part because I had a really hard time figuring out how to get things to work right. It's been my worst year financially since I've been working as a consultant. But she stood by me because she agreed with my reasoning as to why I should become an embedded systems developer.

When I said to her that maybe it's all been a big mistake, maybe I should instead have told her that I was having an affair, or had just enjoyed my first hit of crack cocaine. She was very upset about it.

I was shocked at her reaction. I had expected her to be overjoyed that I finally found a way I could work productively. But Bonita remembered very well all the reasons I chose embedded, and she remembered even better all the clients who made my life so miserable when I was writing GUI applications.

Despite the difficulties of the last year, one remarkable difference has been that all the clients I have had have been very good to me and have been happy with my work.

I'm not real sure what to do. I expect that if I tried, I could get GUI contracts again, but could I find clients who were willing to pay a premium for reliable, performant code?

The one solution I am able to think of is that one can do GUI and embedded programming at the same time. The market for that is actually booming right now, with new handheld computers appearing every day. Cell phones are becoming a significant platform for GUI applications.

That's actually more like what I had in mind when I decided to go into embedded. I have a good friend who does Palm programming, and he just loves it. The reason I ended up doing FireWire is that the first embedded contract I ever got was for a FireWire storage vendor, and once I had that work on my resume it was easy to get more FireWire work.

It's probably not best to have a particular career because one stumbled into it. I do think FireWire is pretty cool, and have enjoyed learning all about it. But maybe it's not really for me.

I appreciate any advice you may have for me.

Bonita wants me to wrap up for tonight. I'm very excited though. You know why? Because tomorrow I get to play piano all day. There have been some things I've been wanting to try, but have never been able to get to, because I play dozens of finger exercises every day, and by the time I get that done I'm out of time to do much else with my piano. I've been persisting with the exercises because I can tell they're helping me learn to play better.

In January I'm going to start taking piano lessons again.

But I'm not going to get very far is a pianist if I can't work as a programmer. It's hard to find anywhere to keep your piano when you're homeless.

Thank you for your attention.

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