Blinkflash

Free software hack discovery of the day: Blinkflash, the unofficial winkflash commandline client.

Competition in the web-based photo printing business is heating up, and Winkflash is the best priced I’ve found so far. With an introductory coupon code, 4×6 prints are only 6 cents each; and normally they are 12 cents each, with $0.99 flat rate shipping. We just made our first order, so we’ll see how the quality is, but these days most of these services seem to provide comparable results.

The main problem is that the two bulk upload systems winkflash provides—a Java applet and an Internet Explorer “drag and drop” control—don’t work under GNU/Linux. So you’re stuck uploading photos one by one with a web form.

Enter Blinkflash—now you can upload your photos right from the command line, with Unix-ish efficiency. Blinkflash just submits the photos to the web form upload system, but it saves an awful lot of time.

Hopefully Winkflash doesn’t mind this program—it can only generate more revenue for them. I suppose they might have trademark concerns, but I don’t think that is fatal.

I think I’ll package it for Debian and make a few tweaks. For one thing, it only works with the UK version of Winkflash, but that can be fixed with an extra command line switch. Also, you have to enter your username and password on the command line—there should be a way to store that in a .rc file. But it’s in fairly legible python (isn’t all python code legible?), so I think I should be able to take care of these things quickly.

Open Source Summit

I’ll be attending an open source “summit” this Friday at Babson College in Wellesley (in my capacity as “lawyer”). The door gift is a video entitled “A Developer’s Introduction to Copyright and Open Source: Why a Lawyer is a Developer’s Friend.”

If anyone reading this will be there, keep an eye out for me—you can recognize me by my hackergotchi. I’d be happy to do keysignings, particularly with any Debian developers. Drop me a note if you’ll be there.

Thinkpad X40 Discoveries

A couple of extremely useful recent discoveries on my IBM Thinkpad X40:

  • /proc/acpi/ibm, provided by the ibm-acpi package. You can control all sorts of Thinkpad-specific behaviors in here—including my favorite, which is the automatic display switching when you open and close the lid or dock/undock. You can turn off automatic display switching with:

     echo auto_disable > /proc/acpi/ibm/video 

    You can also turn the light keyboard light on and off with:

     echo on > /proc/acpi/ibm/light echo off > /proc/acpi/ibm/light 

    Etc. Go IBM!

  • Display corruption: this brings me to my biggest problem running GNU/Linux on the Thinkpad X40—display corruption. When you switch from internal LCD to external CRT, or sleep and resume, or close/open the lid (with the automatic switch behavior described above), the display moves down 15-20 pixels and the top lines are corrupted garbage. I’d post a screenshot, but of course the screen doesn’t realize it’s corrupted, so it would have to be a digital photo. In any case, I just discovered this experimental driver to replace i810_drv.o· which makes the problem go away entirely. Just drop it in over the i810_drv.o in /usr/X11R6/lib/modules/drivers/ (bad behavior for Debian—will be overwritten by an upgrade of course). Hopefully this driver will make its way into the mainline X drivers and eventually back into Debian. This makes using my Thinkpad at least 20% less annoying.

Now if only someone would write a driver for the internal SD card reader (apparently no one has gotten it to work·), I think I would have 100% usage of my laptop’s features.

Randomsort

I often need to randomly sort a file. I’m not aware of any standard bash or GNU command that does this, so I just wrote this very short script. There may be an even shorter/faster/more efficient way to do this, but I thought I’d post this as it might be helpful to a Linux newbie trying to accomplish the same task. Just put this in a file—e.g., “randomsort”; make it executable; and then pipe whatever you want to randomize into it (cat file_to_be_randomized | randomsort or randomsort file_to_be_randomized), and voila, you’re done.

 #!/usr/bin/perl my @array = <>; while (@array) { my $element = int(rand(@array)); print $array[$element]; delete $array[$element]; } 

Feel free to comment if you’ve got an easier solution.

Novell Public Service Announcement

Novell Public Service Announcement. Cute, but requires Flash. Why not just make it a downloadable movie file?

GNU/Linux Training

I’ve been considering trying to offer a GNU/Linux course at a local Adult Education Center. The Boston Center for Adult Education, the Cambridge Center for Adult Education, and the Brookline Center for Adult Education all offer dozens of computer courses, but only for legacy operating systems and applications. Not a single course focusing on open source software.

I imagine a few obstacles. First, would any of these places even let me set up a Linux lab? I can’t imagine they’d be too willing to have all of their hard drives wiped (or repartitioned) and replaced with new, unfamiliar software. My experience is that Linux is more threatening to system administrators the less familiar they are with it. The class could probably be taught with a “live” CD distribution like Knoppix or Ubuntu Live, but this would mean I couldn’t demonstrate an actual, real live installation, which is often the part where people get stuck.

Second, who would take this course? This is one of those cases where you can’t even lead a horse to water (much less make him drink)! I would want to tailor the course to a target audience, but I have trouble guessing if the audience would be: (1) no one (2) curious home desktop Windows users (3) technical people with no familiarity with Linux, or (4) beginner Linux users who are looking to be able to solve problems on their own better… or maybe some other audience entirely? Of course, the way the course is advertised would to some extent determine the audience, but I’d like to find the most ripe target audience.

Third, how do you teach a computer course, anyway? I’ve never had a demonstration-based computer training that I found very useful. In my experience, I learn everything by doing—and by doing I don’t mean repeating the actions I see an instructor doing. (“Now click on ‘Gnome Control Coenter’…”) It seems to me that learning about software is such an individual experience—how do you effectively scale it up to 5-15 people so that no one is left behind, no one is bored, and everyone comes away feeling much empowered? And how do you model the critical “trial and error” stages that everyone must go through to really grasp something?

It occurs to me that maybe the best way to teach a software course might not involve much actual demonstration at all, instead the trick is to teach people a generalized method for approaching problems so that they have the tools they need to find answers when problems arise.

For example, on linux-disciples, a small community-of-interest mailing list I administer, someone recently asked “how to get online”. It wasn’t clear at all what layer was the problem; I responded:

The trick with this sort of problem—and really 99.9% of linux problems—is drilling down to the problem area. One of the problems I consistently see with newer users is that they feel helpless because they don’t know at which layer the problem is arising.

So there are a few questions:

(1) Does your computer see your network card?
(2) Does your network card see the wireless signal, and associate with the wireless router?
(3) Does your network card get an IP address from the wireless router?
(4) Does the wireless router see the “Ethernet modem” (I assume you mean cable modem)?
(5) Does the cable modem see the Internet?

And then continued to walk through each of these items with some suggestions for how to figure out if that was the problem. I think training people to (1) figure out what questions they need to ask, and (2) how to go through the questions one-by-one and get a definite answer as to whether the system works at that level, would be the best way to teach this kind of course.

Where Did “Open With” Go?

Living at the bleeding (well, leading) edge of open source development can be quite disconcerting as a desktop user. For example, in some recent nautilus upgrade, the “open with” option for folders just disappeared. I used this to queue up folders of music in xmms. Moreover, the “open with application…” option for files no longer gives a nice dialogue where you can define applications for file extensions (or specific files)—now it just prompts for a command to run. Where did it all go?

I think my blog has been too “consumer protection” focused lately—see my recent entries on WLI Reservation Rewards (now up to 25 comments!) and U-Haul for example. I’m afraid I’m becoming a one trick pony, so I’m going to limit my consumer complaints for a while, even though I’ve got a nice one stewing about Verizon. Steve says I’m actually a three trick pony: Linux, IP law, and consumer scams. Maybe he’s right.

Linux Information

I use Debian GNU/Linux unstable (sid) distribution.

This is information I wish I could have found on Google. Perhaps it will be of use to you.

  • CUPS Client-Error-Forbidden
    I kept getting the “client-error-forbidden” error when attempting to cancel print jobs through the CUPS web interface when the job had been submitted by someone else; in /var/log/cups/error_log I would see error messages like ‘cancel_job: “” not authorized to delete job id 659 owned by “anonymous”!’. The solution was simple; I had to add AuthClass System and AuthType Basic to /etc/cupsd.conf under . That is, you should have at least the following in your cupsd.conf:


    AuthClass System
    AuthType Basic
    Allow from 127.0.0.1

    Previously I had no AuthClass line and thus could only cancel print jobs originating from the system running the server. I consider this to be a bug, and filed a report on it, although the cups maintainer insists it is necessary for security (check out my bug report for more detail).
    I wrote a tiny little patch (download for cupsys 1.1.14, or download for cupsys 1.1.20) that allows you to specify AuthType None for jobs. You cannot set AuthType None without this patch. Note that this will make your system insecure inasmuch as anyone can see anyone else’s jobs if you provide this option. You can also download Debian packages (for woody, sarge, and sid) and RPM (Red Hat) Packages (untested) of cupsys recompiled with the option to turn off job authentication. If you prefer, add the following line to your /etc/apt/sources.list to use apt-get to upgrade to my cups packages (unstable, testing, or stable):

     deb http://adam.rosi-kessel.org/debian unstable main 

    Note that you will need to modify your cupsd.conf if you also want unauthenticated users to be able to cancel, hold, and release jobs. Here is an example.
    (I am currently getting about 25-35 unique visits a day from people searching on this problem; let me know if my fix worked for you or if I should be giving additional information!)
    Update 8/10/04: This patch has finally been applied to the Debian package and the default cupsd.conf file fixed to not give the “client-error-forbidden” error by default. I’m not sure if this update will make it into the next version of Debian stable (Sarge), but it is currently in unstable.
    Update 12/31/04: A SuSE 9.0 user suggests the following solution under SuSE. First, set up a CUPS admin account and password using:

    sudo lppasswd -g sys -a root

    Then, modify /etc/cups/cupsd.conf to read:

     AuthType BasicDigest AuthClass Group AuthGroupName sys Order Deny,Allow Deny From All Allow From 127.0.0.1 
  • SMC 2632W V3 under Linux
    There are details scattered all over the web about how to get this card to work. Part of the confusion is that each version of the card uses a different chipset (SMC 2632 V1, V2, and V3). If you have the V2 or the V3 you need to use the atmelwlan driver. The proper module is pcmf502rd (pcmf502r is for the V2 card). Also, the key factor for me was building a kernel with i82365 compatible bridge support enabled (CONFIG_I82365=y) as well as, obviously, PCMCIA and CardBus support (both in kernel—not the separate PCMCIA kernel modules). First, you build the kernel, install and boot into it, then run the configuration and install scripts for the atmel drivers (make config; make all; make install). Finally, you need to create the file /etc/pcmcia/smc.conf with the following contents:
     device "pcmf502r" class "network" module "pcmf502rd" card "SMC 2632W V2 11 Mbps Wireless PCMCIA Card" manfid 0x01bf, 0xb301 bind "pcmf502rd" 

    Hopefully this will work for you. It did for me kernel 2.4.22 and Debian Unstable. Once I had this setup, it “just works.”

  • Gaim with Encryption
    Would you like to have encrypted instant messenger conversations? Gaim-Encryption use OpenSSL to provide transparent RSA encryption as a Gaim plugin. You have to recompile the program, though. For your convenience, here is a Debian package of the latest Gaim with the encryption plugin built in. Alternatively, add this line to your /etc/apt/sources.list file and you can upgrade to Gaim with encryption:

    deb http://adam.rosi-kessel.org/adam/debian unstable main

  • glabels and Avery 5376 labels
    Having trouble printing with glabels 0.4.6 and Avery 5376 labels? After dozens of attempts, I’ve decided that the definitions file is wrong. You need to edit /usr/share/glabels/predefined-labels.template (as root) and change the layout line to:

    I’ve reported this suggestion to glabels, we’ll see if it gets incorporated.

  • Gdk-WARNING: Missing charsets in FontSet
    Do you ever get the Gdk-WARNING **: Missing charsets in FontSet creation ISO8859-1 error? Several postings to e-mail lists got me no help on this. It turns out, for me, it was simple: a theme had installed itself in ~/.gtkrc that was looking for a font that wasn’t there. Rename your ~/.gtkrc and see if you still get the error.
    Incidentally, I get an awful lot of hits from people searching for this error. If this fixed your problem, let me know, and if it didn’t, let me know what did and I will post it here!
  • GNU/Linux on an OmniBook
    • If you run GNU/Linux on an HP OmniBook 500, you can probably find all the information you’re looking for on the GNU/Linux on HP Omnibook Laptops site. Although the site isn’t terribly up to date, the mailing list and archive are invaluable resources.
    • I also recently installed Debian Woody GNU/Linux on an HP Omnibook XE4100. As far as I know, there are no webpages devoted exclusively to GNU/Linux on the XE4100, but there are some about the XE4500, a similar model (one for Red Hat and one for Debian). The proper driver for XF86Config-4 is “savage”, and sound requires the “via86cxxx_audio” module (under kernel 4.2). CD-ROM and network worked right out of the box. I haven’t gotten a chance to try the modem.
    • XF86Config-4 file for HP OmniBook 500 with External Gateway 2000 1572 DG Monitor.
      I use this file when my laptop is docked. I’m not sure that the timings are perfect, but it works, and there seems to be a great dearth of information about there about this monitor.
  • MaxBlast/BIOS Issues
    Having trouble with a MaxBlast hard drive on an old system with an obsolete BIOS that needs its own bootloader? I found switching to grub from LILO did the trick for me. I’ll post more details about this, which also involved the Windows NT (Windows 2000) boot loader as well.
  • Destroyed Partition Table
    Did you just destroy your partition table, perhaps because you ran dd over /dev/hda rather than /dev/fd0? And your system is still up and running, in fact you’re reading this web-page, but know when you reboot, you’ll be toast? Well, good! I have a cautionary tale for you about how to avoid this situation, but also an easy way to recover if you follow the enclosed directions.
  • Emusic, Zinf, and Segfaults
    Are you an emusic subscriber unable to use the recommended player, zinf (“Zinf Is Not FreeA*p”) for batch downloading? Emusic recommends zinf for Linux users, but unfortunately zinf segfaults when loaded with an “emp” file. I wrote a shell script hack to fix this (the segfault can be avoided by renaming the .emp to .rmp, but then discovered fetchrmp by Doran Barton. So I’ve modified that script to give some additional options: place downloaded files in a hierarchy by genre, album, and artist, and also play music when downloaded. The modified script is called fetchemusic and you can download it here. Note that you’ll need the the Perl XML-EasyOBJ module for this to work, which is not included in Debian (you’ll also need modules LWP::Simple, Getopt::Long, File::Path, and File::Copy, which are all in Debian. The emp segmentation fault has been around for a while, it was reported to Debian in October 2002. Let me know if you’ve had this problem, if you have any other solutions, or if my script is useful to you!
    (Update 6/3/03: Unfortunately, Emusic has switched to an encrypted file format, so this script will no longer work! I’m leaving it here in case it ever becomes useful again.)
    (Update 10/1/03: Someone has written a very nice perl script that works with the new encrypted EMP file format, called decrypt-emp. Get it now!)
  • French vs. North American Wireless Channels (or, why can’t I connect to my Access Point with my Xircom CWE-1120-FR?)
    I’ve written a few times about my wireless woes. I couldn’t for the life of me figure out why my Xircom CWE-1120 card couldn’t connect to my Access Point. As it turns out, the card was set to the French Channel Set, which is different from the North American Channel Set, except on Channels 10 and 11. So I set my Access Point to Channel 10, and now I can finally access my network. There is, allegedly, a DOS command line tool that allows you to reprogram the EEPROM on Cisco cards to switch the channel set to North American, but I was unable to locate it. In fact, Intel (who purchased Xircom, which produced the card) was very wary of the whole topic. I suspect it might be illegal to have/use this tool, since it might permit you to set your card to a mode that violates FCC regulations. Intel was actually pretty spooked that I even had the cards (which I purchased legitimately in the United States, thinking they were North American cards). Thanks to Dan Lanciani on the airo-linux-gen80211 list for finally pointing this out to me.
  • Volume Problems on a Toshiba P25-S477 Laptop
    I’ve been trying to set up GNU/Linux (remotely) on my brother’s Toshiba p25-s477 (one of a seemingly endless number of obscurely named Toshiba laptops). Almost everything worked fine, except the sound was almost inaudible, and substantially distorted with external amplified speakers. It turns out I needed to go into the alsamixer (ncurses GUI) program and set “External Amp Power Down” to “Mute.” This is far from intuitive: first, that “external amp power down” would be “on” by default, and second, that you need to “mute” this setting to have “power down” turned “off.” But that’s how it works. (solution posted by someone in the aesthetically weird tlinux-users mailing list.)
  • Functional Java Packages for Debian Sid Mozilla
    I’ve been looking for functional Debian Java packages that work with latest Mozilla in sid. I tried downloading several Java binaries from sun and elsewhere and either it didn’t register in Mozilla or crashed immediately. I finally discovered José Fonseca’s excellent Java packages that actually work. Add the following to your /etc/apt/sources.list to get these packages:

    deb http://jrfonseca.dyndns.org/debian ./

  • Procmail Detritus Filters
    Here’s a good procmail recipe that should catch a lot of viral email—both actual viruses, and bogus “we caught a virus coming from your account” messages. Note that you need to increase from the default line buffer length to have this all packed into one expression:

    LINEBUF=3000
    :0
    * ((^Subject: (Virus infection notice|New Network Security Upgrade|Newest Net Update|Newest Internet Upgrade|Newest Internet Security Patch|Internet Security Pack|New Internet Security Patch|Latest Critical Pack|Latest Net Upgrade|Latest Network Critical Update|(Latest|Current|Newest|New) (Microsoft|Net(work)?|Internet) (Security|Critical) (Update|Patch|Pack)|Current Microsoft Critical Pack|Newest Critical Pack|Latest Net Security Pack|Current Net Critical (Pack|Patch)|Latest Network Critical Pack|Abort Report|A virus has been detected in a document you authored.|RAV Antivirus:|BitDefender found an infected object|Virus Detected by Network Associates, Inc. Webshield|—— Virus Detected ——|Virus detected|Virus Alert|InterScan NT Alert|Virus found in the message|Message quarantined|VIRUS ALERT!|MDaemon Warning – Virus Found|Warning: E-mail viruses detected|ScanMail Message: To Sender virus found|VIRUS IN YOUR MAIL|Norton AntiVirus detected|VIRUS .* IN YOUR MAIL|Antigen found VIRUS|Filter incident|V.rus figyelmeztetés! Virus warning!|Symantec AVF detected|Returned due to virus;|Anti-Virus Notification|BANNED FILENAME|File blocked – ScanMail for Lotus|NAV detected a virus|RAV AntiVirus scan|VIRUS .+ IN MAIL FROM YOU|Virus Notification:|Virus found in a message you sent|Virus found in sent message|VIRUS EN SU CORREO|Warning: antivirus system report|M..Daemon Notification — Attachment Removed|Information – Antivirus|Symantec AntiVirus detected a violation|WARNING: YOU WERE SENT A VIRUS|SAV detected a violation in a document|MailMarshal has detected a suspect attachment|A virus was detected in your mail|Recipient Virus-alert|Virus Found in message|E-?mail viruses detected|Undelivered mail: VIRUS FOUND|Quarantined Mail: virus from|Failed to clean virus|Virusveszely! Virus warning!|Virus in mail from you.|Possible virus found in mess..age you sent|AntiVir ALERT|Centrale Anti-Virus melding|Vexira ALERT|You sent potentially unsafe content|ID.*thanks ScanMail has detected a virus!|\{Virus\?\}))|(^X-BLTSYMAVREINSERT|^X-Virus-Scan-Result: Repaired|^X-AtHome-MailScanner: Found to be infected|^X-Scanned: Symantec Antivirus Scan – Virus found|^X-Sender: NetMail AntiVirus Agent|^X-yoursite-MailScanner: Found to be infected|^X-ELTE-VirusStatus: was_infected)|(^To:.*MS Network Security))
    virus

    And here’s a simple way to filter spamassassin mail into two folders, one which is “very certainly” spam and one which is “probably” spam:

    :0
    * ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*
    verycertainspam

    :0
    * ^Subject:.*\*\*\*\*SPAM\*\*\*\*
    probablyspam

  • Firefox 0.9 remote newtab syntax
    When I open a link from another application (gnome-terminal or evolution, for example), I would like it to open in a new tab in Firefox, so I had a script which I called newmoz:

    firefox -remote “openURL($1,new-tab)”

    This is my default web browser. With Firefox 0.9, the syntax has changed. You now need:

    firefox -a firefox -remote “openurl($1,new-tab)”

    I believe this has something to do with the confusion of the possibility of several related Mozilla applications running all at once, although I’m not entirely convinced. To make it really snazzy, try:

    firefox -a firefox -remote “openurl($1,new-tab)” || firefox $1

    This way, if firefox isn’t already running, it will still work.

  • Email yourself after a long task
    This is a really obvious one, but I only recently thought of it. Due to several recent failed hard drives, I’ve been moving a lot of data around from one drive to another, some through NFS, and some over my cable modem. Moving 200 gigabytes, even within a LAN, takes a long time—even longer if you throttle it so as not to congest the network too much. I would find myself checking back on the process every few hours, even though I knew it probably wasn’t done. So why not append a mail command after a long process? E.g.:

    rsync -Pa / storage.system.somewhere:backup ; echo done | mail adam

    Since I’m always checking email, I’ll find out as soon as it’s done, and waste less time continually checking back on the process, especially when the transfer might take three or four days.

  • ssh timeout error/connection reset by peer with rdiff-backup and D-Link DI-604 router
    Backing up bostoncoop.net over a cable modem takes a long time. If something goes wrong, rdiff-backup has to roll back the previous backup and start over. As best I can tell, rdiff-backup first makes the connection, then starts the roll back, but doesn’t send or receive any data during the roll back. On my system, the roll back can take longer than the timeout period for my DI-604 router—the consequence being that the connection is reset before the backup can start and rdiff-backup fails out.

    There’s an easy fix, which should come in useful to anyone with a router that is too vigilant about timing out ssh connections (for example, if you ssh to get your email and often leave the window alone for an hour at a time). Add the following to your .ssh/config:

    serveraliveinterval 300
    serveralivecountmax 10

    This will insure that ssh will occasional send an ACK type request every 300 seconds so that the connection doesn’t die.

  • Fixed font in gnome-terminal
    I’ve wanted to use gnome-terminal for a long time, primarily because of the tabbed terminal feature (many terminals in one window) and because of the URL recognition (open a URL by right clicking on it). I also like being able to paste into the window with the keyboard.

    There was always one problem, though. The font. I know some people like the new fixed-width GNOME fonts, but I don’t. I just wanted plain old fixed, which I use with xterm (10×20). But that font never showed up in the list of available fonts.

    I finally found the solution in /etc/fonts/local.conf—namely, the following lines:

       

    Just uncomment the path, run fc-cache as root, and you should see fixed in the output of fc-list.
    I’m not sure how a naive user would ever figure this out, but then again, maybe a naive user wouldn’t care that much about having fixed font in gnome-terminal. I also don’t understand why we wouldn’t users to have access to bitmapped fonts by default—why not just set the default font to something the GNOME people like, but have the other choice in there to start?

  • Reading Annoying HTML Mail in Mutt
    I’ve tried several solutions for reading broken HTML mail in mutt, including my own custom Python hack, addMIMETextToHTMLEmail (this was actually the first Python program I ever wrote). Reasonably nice mail clients will send a plaintext part in addition to the HTML mail for us textophilic email users, but the dominant Microsoft Hotmail and Microsoft Exchange send HTML-only mail with no plaintext part. I wonder if they do this because they expect anybody worth writing to these days is using Microsoft Outlook or Microsoft Hotmail.

    I think I’ve recently discovered the best solution, since my addMIMETextToHTMLEmail script doesn’t always work properly and is probably unnecessarily complex:

    • Download and install demoroniser. You may need to tweak it slightly, since it expects perl to be in /bin/perl.
    • Install html2text (Debian package, separate source available from Martin Bayer).
    • Add to ~/.mailcap:
       text/html; /home/adam/bin/demoroniser.pl -q -w0 '%s' | /usr/bin/html2text -width 90 -style pretty; copiousoutput; description=HTML Text 

      You may prefer a wider output; the person who suggested this to me uses 158.

    • Edit ~/.muttrc and add:
       set implicit_autoview=yes 
    • You should now be able to view HTML-only emails in mutt without having any extra steps.

Buffalo Technology Does Not Suck

Just got off the phone with Buffalo Technology tech support. They most definitely do not suck.

This morning, my house’s WiFi just stopped working entirely. I have a pretty new Buffalo Airstation WBR2-G54, which I bought because cnet seemed to like it, and because it comes with a repeater that extends the wireless range (and creates a new wired access point) simply by powering it up. I was sick of slow media transfer over 802.11b, since I use WiFi to play my music collection everywhere in the house. (I do have pangs of guilt at not buying a router with open source firmware, however, like the Linksys WRT54G).

After trying the standard tricks (resetting the router, different clients, etc.), I decided to call tech support. First plus: Buffalo has free 24/7 tech support for all customers.

The tech support guy I got was clearly clued in. He could tell right away that he didn’t need to ask me if the router was turned on. He also figured out pretty quickly that I run Debian, which is also the distribution that he was learning. I love the feeling of connecting with another Debian user, particularly a tech support person who you know must spend his entire day talking to clueless users—it’s like you have a secret handshake and you can skip all the bullshit.

Anyway, the problem turned out to be relatively simple: I just needed to change the wireless channel. It hadn’t occurred to me because nothing had changed recently in my home. According to the clued-in tech support guy, though, interference can come from quite far away sufficient to make a particular frequency totally unuseable. There is a large condo development going in across the street (probably about 300 feet from my router) and he said he had encountered problems with construction interfering with WiFi several times.

So I still think U-Haul Sucks, but I am firmly convinced that Buffalo does not.

(I’m also wondering if I should worry about interference that is so powerful as to knock out my whole wireless network coming from so far away).

Gnucash Days

I just had one of those gnucash days.

Every couple of weeks, I decide to sit down for an hour or two to catch up on my personal accounting. Suddenly, the sun has set, my legs have atrophied, and I realize I’ve forgotten to have lunch and dinner. Does this happen to anyone else?

Ostensibly, tracking personal finances should be a relatively simple matter for someone like myself without substantial assets or investments. But gnucash (or any other accounting program, I suppose) makes it difficult to “fudge” any numbers—if you started the week with $27.61 in your wallet and ended with $19.05, you need to say where that money went. I do have “unknown income” and “unknown expenses” categories, but they really bug me so I try to keep the totals down to a minimum.

The bigger problems are reconciling bank transfers, mortgages and loans (interest and principle), etc., when my financial institutions don’t always provide the best online tracking and reporting. For example, my bank has a “current balance” through web access, but that balance might be ahead of what the ledger shows (i.e., there are transactions reflected in “current balance” but not on the ledger)—and the “current balance” itself can be a day or two behind schedule.

I also wish gnucash were just a little bit better. It really feels like it’s been stuck for a couple of years now while all the other applications I use regularly (Firefox, OpenOffice.org, Gnome generally) have gone through major revision, and are genuinely fun to use.

In August 2003, the gnucash team issued a call for help. I admit I did not rise to the occasion, but I did expect more developers to respond. Gnucash seems to me to be an ideal open source project to attract hackers—almost everyone needs to use some kind of personal finance package eventually, and there are innumerable “scratch-an-itch” type clever solutions that could be implemented (automating web transactions with financial institutions, for example).

But Gnucash is brittle. The user interface is often awkward, and it’s awfully easy to lose work you’ve done. For example, clicking on “close” on a report makes the report just plain disappear, but clicking on “close” while looking at an account just closes that ledger. If you get into the custom of clicking “close,” you’ll lose the report you just created. And if you click “yes” when exiting you’ll lose all the work you’ve done in the session if you haven’t saved. I realize this is typically how word processors work, but I think many of us have different intuitive expectations from a finance program.

Here’s a solution to one problem I’ve encountered repeatedly, just to make this blog entry at least somewhat useful: if you move your account files to another computer or path, you’ll lose all your reports. They’re still there in ~/.gnucash/books, but they don’t go with the data files. If you move the data file *back*, you still won’t have your reports, because gnucash will have “forgotten” them.

If you look in ~/.gnucash/books, you’ll see a file corresponding to the path of each data set you have, with %2F substituted for /. Copy the file there to the corresponding name of your new data file.

Now edit ~/.gnome/GnuCash and find the section that corresponds to your old data file, and create a new section with all the same data except the title ( [MDI : ]). That should do it.

If someone knows a simpler way to do this, please let me know. Also if anyone has any inspiring ideas about what might move the gnucash project forward, I’d be interested in hearing ideas.