Sunday, December 23, 2007

Compaq Presario C500 and Kubuntu wireless networking fun

These instructions on the Ubuntu KNetworkmanager page got my Compaq Presario C500's Broadcom BCM 94311 MCG wlan interface back up and running after I fu-fiddled around with it this afternoon. I made the mistake of clicking the "Manual Configuration" option in KNetworkmanager, after which I lost all wireless connection, and couldn't find my way back out of the wireless woods:
  1. Made a backup of the file /etc/network/interfaces
  2. Delete all configuration settings in the file except the lo interface

    auto lo
    iface lo inet loopback
    address 127.0.0.1
    netmask 255.0.0.0

  3. saved the file then typed /etc/init.d/networking restart
  4. After enabling the laptop's wireless networking hard-button, the wired network reappeared in Networkmanager's Connection Status
  5. Also followed the instructions to enable the connection to survive suspend or hibernate, and bypass the keyring password at every login

Tuesday, December 18, 2007

Setting up a Canon Pixma MP530 on Kubuntu 7.10 (Gutsy)

I started tinkering with Rails again on Vista. Boy, is Mongrel ever slow. That's what prompted me to test-drive Kubuntu in the first place. OK, let's try it again. Download the Gutsy image, repartition, reinstall... wow, it Just Works. After a minor bit of fiddling to get the sound card working, I'm up and running on Kubuntu again. Except the printing thing. Complicating the matter, the printer, a Canon Pixma MP530, is shared out from a whitebox PC running Windows XP Home.

After a bit of googling, this is what I did:

1. Following a tip on the OpenPrinting database MP530 page pointing to Brady Hunsaker's advice I downloaded the .rpm MP500 driver files from Canon's FTP site.
2. Installed alien (what a cool name, not to be confused with alien-arena) then I converted the .rpm's to .deb's and installed them.
3. Brady says create symlinks to old library names... but he doesn't explicitly say _where_, for the sake of beginners like me. After a few minutes of noobiness, I realized the symlinks should be in the same directory as the library files to which they point (`/usr/lib/`, not in the printer driver directory `/usr/share/cups/model`).
4. As a test, I plugged the printer directly into a USB port on my laptop then fired up the CUPS server on the default URL http://localhost:631/. No luck, CUPS couldn't see the printer, even after I power-cycled it.
5. I noticed one of the device options is "Windows printer via SAMBA". Hrm...
6. Followed the instructions on Debian and Windows Shared Printing mini-HOWTO to verify that my lappie can connect to the Winbox via smbclient as `smbclient -I WIN.BOX.IP.ADDRESS -L WINBOXNAME -N`.
7. Plugged the MP530 back into the Winbox, then started going through the new printer install, this time for "Windows printer via SAMBA":
1. Add new printer
2. Fill in the name, etc.
3. Device for printer: select Windows printer via SAMBA
4. URI: `smb://WINDOWS.PC.IP.ADDRESS/HOSTNAME/PRINTERNAME`
5. Browse to the PPD file in /usr/share/cups/model/canonmp500.ppd
6. When prompted, enter your Linux username and password (like sudo)
7. Configure and enjoy the printer!

I successfully test-printed a couple of pages duplexed from a PDF, then printed a couple of images to 4x6 photo paper from the cassette tray. Looks like the MP500 driver works just great! Cool!

Monday, December 17, 2007

Double-clicking to select text fails in jEdit on Kubuntu Gutsy Gibbon (7.10)

After a failed attempt to upgrade Feisty, I wiped my Kubuntu partition and reinstalled Gutsy from scratch on my Compaq Presario C506ca. All went well - I managed to get the sound working (can't recall the tweak right now), got Ruby, Rails 2.0 and jEdit installed. Then I discovered I had to double-click real fast to select words or lines of text in jEdit. A little googling around led me at last to this post Bug #55270 in xorg (Ubuntu): “Double-click timeout is not applied to X”, which explained the problem and best of all had a fix: add *multiClickTime: 400 to your .Xdefaults or .Xresources file (not sure which one applies to which environment, but .Xdefaults worked for me).

Wednesday, December 12, 2007

stupid ruby trick #1

Here's why I like dynamic languages. I have a template (function) in an XSLT application that I invoke with the number of columns in an output table. The template then returns a list of integer values separated by carets "^".

Each integer is the width of a column as a percentage of the table width. The ideal width for each column depends on the size of the column header label and text in each row, which is a bit of a subjective fiddle, so I can't really automate setting the proportion of each column, at least not without doing some advanced parsing of the table data.

Of course, all the integers for a given number of columns are supposed to add up to 100 percent, and the list should have only as many integers as there are columns in the table. For tables with 5 or 6 columns, it's pretty easy to eyeball the sum, and make sure there's the right number of values, e.g. "10^20^20^30^20". When the tables get up to 14 or 15 columns, manually adding up all those column widths to 100 for the right number of columns becomes a PITB. Time for a little scripting!

So I whipped up this little one-liner in irb to do the math for me:


C:\USAFIPD\Tools\Reports>irb
>> n = "4^10^10^10^6^6^6^5^6^6^6^5^6^5^6^3"
=> "4^10^10^10^6^6^6^5^6^6^6^5^6^5^6^3"
>> eval(n.gsub("^","+"))
=> 100
>> puts "sum: " + eval(n.gsub("^","+")) + " cols: " + n.split("^").length
TypeError: can''t convert Fixnum into String
from (irb):3:in ''+''
from (irb):3
>> puts "sum: " + eval(n.gsub("^","+")).to_s + " cols: " + n.split("^").length.to_s
sum: 100 cols: 16
=> nil
>>


I made a couple of fumbles and educated guesses, based on my experience with Javascript and Perl, e.g. that eval(n.gsub(...)) would add up the digits. Still, I didn't have to refer to the Pickaxe Book at all!

I'll stick that into a .rb file for future use, passing in the list of column widths as an arg (once I remember how to get it from ARGV [or is it ARGS?!]). Gee, maybe I could put the body in a loop that keeps prompting me if the sum is not 100, so I can keep fiddling the string until it's right... hm...