Older blog entries for goingware (starting at number 121)

18 Sep 2002 (updated 18 Sep 2002 at 09:53 UTC) »
Bush to Press Congress to Authorize War

According to the United States Constitution, the President is the Commander-in-Chief of the military, but only Congress may declare war. It's never been too clear whether the President had the authority to use military force if war is not actually declared. For a while George W. Bush was considering invading Iraq without asking for Congress' permission, but the resulting outcry caused him to change his mind and promise that he would seek Congress' permission before any invasion.

Well, now he's asking for it. In Bush to Court Congress on Iraq, the Associated Press says:

President Bush summoned congressional leaders to a White House breakfast meeting Wednesday as aides worked on legislation allowing him to use "all appropriate means" to force Iraq to dismantle its weapons programs.

Bush previously threatened to invade if Iraq didn't invite back the weapons inspectors unconditionally. When, to his surprise, Iraq conceded, Bush claimed it was just a clever ploy and continued with his plans for war:

President Bush wasn't backing down from his tough speech to the U.N. General Assembly last Thursday threatening action against Iraq if it did not allow the inspectors back. He urged the Security Council not to be "fooled" by Iraq's about-face, and his administration disclosed plans for moving B-2 bombers closer to Baghdad, preparing for possible war to remove President Saddam Hussein.

Why does Bush want war? Because the mid-term congressional elections are coming up soon, and the economy, which looked hopeful for a while, is now in a wreck because of the "accounting irregularities" at such bankrupt companies as Enron, WorldCom and Adelphia, the same kind of accounting irregularities that Bush and Vice President Cheney indulged in at their texas oil companies before they got elected.

In addition, Bush was elected by a minority of the voters due to the strange way Presidential "electoral votes" are allocated among the U.S. States. His approval rating was very low before the September 11th attack, and with the war in Afghanistan winding down and receding from the public consiousness, he needs something new to distract the minds of the peasantry from so he and his cronies can continue to loot the public coffers.

How legitimate is Bush' Presidency? In a dissenting opinion in the Bush vs. Gore case, Judge Stevens wrote:

The endorsement of that position by the majority of this Court can only lend credence to the most cynical appraisal of the work of judges throughout the land. It is confidence in the men and women who administer the judicial system that is the true backbone of the rule of law. Time will one day heal the wound to that confidence that will be inflicted by today's decision. One thing however, is certain. Although we may never know with complete certainty the identity of the winner of this year's Presidential election, the identity of the loser is perfectly clear. It is the Nation's confidence in the judge as an impartial guardian of the rule of law.

I think anyone who claims that the Supreme Court decided the Bush vs. Gore case impartially is deluded.

What's the punch line? We may already be at war! The prevous rules of engagement for the enforcement of the no-fly zone over Iraq only allowed pilots to shoot back if they were attacked first. The Pentagon just announced they had issued new rules of engagement authorizing pilots to attack without provocation. Pilots have been ordered to attack command and communication facilities that are part of Iraq's air defense.

I think that's an obvious provocation to goad Iraq into war. Also attacking the air defenses has been the Pentagon's first step in making war on a country, at least since the first Persian Gulf War.

If you are an American citizen, please write to both your Senators and your House Representative to ask them to oppose the use of military force in Iraq. The life of even one Iraqi is too dear a price to pay to keep President Bush in power. If you don't know who your Congressional representatives are, or you need their addresses, put your zip code into the search box at www.congress.org.

Don't waste your time sending them email or using those convenient web forms. Congress gets spammed so much that they don't pay attention to email. If you're in a hurry, call their offices and speak to a staff member.

If you're not an American citizen, please write to the government officials in your own country and ask them to oppose the U.S. war in Iraq. This is especially important if your country has a seat on the U.N. Security Council, as Bush is attempting to use the Security Council to legitimize his war. Any of the permanent council members - Britain, Russia, China, France or (heh) the U.S. may veto a Security Council resolution. There are also a number of other countries that hold temporary seats on the council and could outvote the permanent members if they agreed to help Bush out.

If you're wondering how a country like America could have gotten to be this way, you haven't read George Orwell's 1984. Remember:

War is Peace

Slavery is Freedom

Ignorance is Knowledge

If you're afraid to speak out in these troubled times, I urge you to read Make a Bonfire of Your Reputations.

Thank you for your attention.

Mike

Embedded Programming

I'm greatly enjoying my first contract doing embedded systems programming. So far it's everything I hoped it would be, and nothing that I feared.

I'm fortunate that the hardware I'm working with is well documented. I know that's often not the case. Also the existing source code, which I'm modifying, is well written.

I'm sorry but it's very closed-source. I'm not even certain I should say what chip I'm working on, except that it has an embedded ARM core.

It's been a challenge. Nothing worked right to start with. I had a real scare at first that turned out to be a problem with delivering adequate power to the eval board I am working with - the thing sort of worked but was acting really brain-damaged, so I feared I had damaged the hardware somehow.

Then I couldn't get the source to build, and when I could get it to build, the resulting firmware would just hang the chip. But finally I got it to work and I am able to make modifications to the firmware and see the results happen in the behaviour of the thing.

An unfortunate problem is that I have only primitive debugging support. There is a bank of 8 LED's and I can turn each one on and off individually. That's it! The eval board comes with a serial port and the firmware source has an API for sending messages out, but unfortunately that doesn't work.

So that's tonight's project, getting the full debugging support to work. I got the vendor's support guy to send me the datasheet for the UART and now I'm going to be blinking LED's on and off until I figure out what the problem is. There is still some possibility that the board is damaged.

I have an unfortunate problem in that I don't posses any kind of electronic test equipment. The best I could come up with was a simple RS-232 breakout box. I've just been browsing Jameco looking for test equipment to buy. I will probably start with a good multimeter and a logic probe.

I want to get a digital storage oscilloscope ($$$) and a logic analyzer. A logic analyzer is like an oscilloscope but with lots of traces, and it only measures binary logic levels rather than continuous voltages.

The ultimate embedded debugging tool is an In Circuit Emulator (ICE), which plugs into mircroprocessor slot and acts just like a real microprocessor except that you can set all kinds of weird breakpoints, like breaking when a particular value is read or written, and you can get a trace of the data and address values for the last little while.

Unfortunately it wouldn't help me for this job because the microprocessor sits entirely within an I/O chip! The data and address lines of the ARM CPU do not come outside the chip.

My initial project is a very simple modification to the existing code. But my next project will be to write a great deal of new code to have the chip serve a completely different purpose. Likely it will take up so much space in the flash rom that there will be no space for the serial port debug.

What I plan to do for much of it, at least the parts that do not depend on real-time performance, is write simulation testbeds that will run as normal user programs on Linux.

Timely Quotations

My friend Andy sent these to me yesterday...

"Beware the leader who bangs the drums of war in order to whip the citizenry into a patriotic fervor, for patriotism is indeed a double-edged sword. It both emboldens the blood, just as it narrows the mind. And when the drums of war have reached a fever pitch and the blood boils with hate and the mind has closed, the leader will have no need in seizing the rights of the citizenry. Rather, the citizenry, infused with fear and blinded by patriotism, will offer up all of their rights unto the leader and gladly so.

How do I know? For this is what I have done. And I am Caesar."
-- Julius Caesar

People can always be brought to the bidding of the leaders. Tell them they are being attacked and denounce the pacifists for lack of patriotism.
-- Hermann Goering

There ought to be limits to freedom.
-- George W. Bush

And.......

we are each one of us responsible for every war because of the aggressiveness of our own lives, because of our nationalism, our selfishness, our gods, our prejudices, our ideals, all of which divide us.
-- J. Krishnamurti, Freedom from the Known

How to Do Foreign Currencies in GnuCash?

I finally tried out GnuCash (1.6.6, from Debian Woody) today and I must say I think it is very nice. But for the life of me I cannot get foreign currency transactions to work.

If I can do transactions in both Canadian and U.S. currency it would be a lifesaver. Up until now I've been doing my U.S. transactions in Quicken for Windoze and my Canadian transactions in a spreadsheet.

We live in the U.S., but my wife is Canadian and we also have a Canadian checking account and some Canadian bills.

I've tried without success to enter the following two transactions:

  • I wired USD$785 from my U.S. bank to my Canadian bank. When it arrived it was credited to my Canadian account with an exchange rate of 1.5345
  • I withdrew USD$40 in cash from a U.S. ATM machine from my Canadian bank. In their web banking, the Canadian bank said they gave me an exchange rate of 1.584.

I've pored over the instructions in the GnuCash manual many times, but for the life of me I cannot get it to come out right. Always there is some account that is off, sometimes by hundreds of dollars.

I hate Quicken, I really do. I'd like to delete it from my Windoze partition and use PGP to cryptographically scramble the freespace on my drive, then burn the CD.

But before I do, I need to figure out GnuCash. I've posted to a couple mailing lists, but no one has responded so far. Is there a more detailed explanation than the manual anywhere to be found?

Thanks.

Happy Birthday Mom!

It's September 11th. And what does that mean to me? Today is my mother's birthday, and my aunt Peggy's too, as they are identical twins.

Happy birthday Mom, and Happy Birthday Aunt Peggy.

Is there a Search Engine Ranking Monitor?

I am looking for a tool which will allow me to monitor how a bunch of my pages rank in the results at various search engines when the engines are queried with any of the phrases from a given list.

I'd be astounded if such a tool didn't exist but I looked around some and couldn't find one, at least not as Free Software.

What I would like to ultimately do is have a graph that's updated once a week or so with lines for each of the search queries that go up and down on the graph as a page moves back and forth in the rankings. If I can log the rankings to a text file I could make the graph with one of the available data analysis tools.

You could get the ranking either by scraping the HTML output by a search engine or by using Google's API. So if I just monitored Google it should be pretty easy to do this.

In fact the basic components are readily available as you can see if you search Freshmeat for "google", for example the AltaVista and Google Web Parser System which will put the results of a search into an associative array.

If there isn't such a tool I will write one myself but I thought I should ask around first. Either post a response in your diary or tell me at crawford@goingware.com and I'll say what I find in a future diary entry.

Thanks.

Websites

I asked my favorite hosting service, Seagull Networks, if they could support database hosting, and it turned out they had just started providing it. So I moved ByteSwap.net from Hostway to Seagull.

I wasn't actually using Hostway's database services yet but I have plans to.

I have no complaints about Hostway except that it felt pretty corporate and impersonal. Whenever I write to the support address for Seagull, I get a personal response from Paul Celestin, the guy who owns the place, sometimes at unusual hours of the night.

I was looking through my logs just now to see what search terms people were using to find the site. This works because most search engines encode your search terms in the URL for the search result page. This is known the GET method. There is a limit to the amount of text that can be in a URL, larger amounts of form data have to be submitted with the POST method.

Anyway I was very pleased to find that a Google search for cross-platform programming turns up my first article on Byteswap.net in its first page of search results.

How people struggle to get placement at the top of the search results! All you need to do is put up content that's both unique and valuable to the people you want to come to your site! On the average I get 5,000 unique visitors a month to the whole GoingWare.com website, and for the most part it's because I have these programming tips there. If I post a new article on one of my sites and post the URL in a few places, traffic will double for about a month, and in the long run will increase a significant amount from what the average used to be.

I guess I should get off my butt and write more articles. I have lots of them planned out in my head but it's hard to find the time to write them. I try to write well, it takes me anywhere from three to ten days to write one of the articles that I have done.

I've hosted various websites with seagull for about five years, and he provides free hosting for www.wordservices.org in return for a small banner. When I get around to it I'm going to advertise seagull from all my websites because I like Paul that much.

Seagull provides secure shell access, allows you to use CGI's you write yourself, even in a compiled language like C or C++, along with having the GNU development tools installed. (Some hosting services only allow shell or perl scripts, and many only allow you to use CGI's they provide, you can't upload your own.)

I'm not sure if he provides java servlet support or not though. The servers all run Slackware. He also offers hosting where you are root on the machine and it's not shared.

Interested in OS X Development?

Some years ago, Paul used to produce CD's of (classic) Mac OS source code and shareware utilities. The CD series was called Apprentice. I first got to know Paul when he put my screensavers and the Word Services SDK on it.

With Mac OS X generating such interest, Paul has been interested in bringing back the Apprentice CD. He asked me to compile the CD's for him. One difference is that much of the material on the Cd will be developed just for the CD, and written by yours truly. There will also be open source source code that I collect from wherever I can find it, as well as some shareware.

Instead of selling the CD's directly, Paul is proposing to create something he will call the OS X Developer's Guild, a community site just for OS X programmers. Members will get the CD I compile, there will be a job board, discussion forums, and because Paul has his own hosting service, hosting service will also be included in the membership.

So far Paul is just trying to find out if there is enough interest to pursue the OS X Developer's Guild. If you're interested, fill in the form at the web page I link above. I will get lots of fun and interesting work to do.

Where is the Individual Software Process?

A few months ago I came across a web page that was about something that I'm pretty sure was called the "Individual Software Process".

I didn't have the time to read it, and I thought I bookmarked it, but I can't find it anymore. Neither Google nor Altavista finds the page.

I did find a PDF file that talks about Individual Software Process improvement in Europe, but that's a different thing.

I'm not looking for Watts Humphrey's Personal Software Process. That's a different methodology, although they are both meant for individual programmers to follow.

I have Humphrey's book on PSP, but I didn't get into it when I first tried to read it. I thought this other guy's web page sounded more like something I would want to do in my work.

But I can't find the page. Anyone here know where it might be?

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.

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