Shallow Thoughts : : Apr
Akkana's Musings on Open Source Computing and Technology, Science, and Nature.
Thu, 23 Apr 2009
Latest Linux Planet article: How to write a "blobify" GIMP plug-in
in Python to make text look three-dimensional.
Creating
a Fancy 3D-Effect GIMP Plugin in Python.
Tags: gimp, writing, python
[
11:46 Apr 23, 2009
More writing |
permalink to this entry |
]
Sat, 18 Apr 2009
Long ago I wrote about
getting
my multi-flash card reader to work using udev rules.
This always evokes horrified exclaimations from people in the
Ubuntu project -- "You shouldn't need to do that!" But there are
several reasons for wanting special udev rules for multi-card readers.
You might want your SD card to show up in the same place every time
(is it /dev/sdb1 or /dev/sdc1 today?); or you might be trying to
reduce polling to cut down your CPU and battery use.
But my older article referred to a script that no longer exists, and as
I recently had to update my udev rules on a fairly fresh Intrepid install,
I needed something more up-to-date and less dependent on Ubuntu's
specific udev scripts (which change frequently).
I found a wonderful forum article,
Create your
own udev rules to control removable devices,
that explains exactly how to find out the names of your devices
and make rules for them.
Another excellent article with essentially the same information is
Linux Format's
Connect your devices with udev.
Start by guessing at the current device name: for example, in this
particular session, my SD card reader showed up on /dev/sdd.
Find out the corresponding /block device name for it, like this:
udevinfo -q path -n /dev/sdd
Update: In Ubuntu jaunty, udevinfo is gone.
But you can substitute udevadm info
for udevinfo,
with the same flags.
In my case, the SD reader was /block/sdd. Now pass that into
udevinfo -a, like so:
udevinfo -a -p /block/sdd
and look for a few items that you can use to identify that
slot uniquely. If you can find a make or model, that's ideal.
For my card reader, I chose
KERNEL=="sdd"
SUBSYSTEMS=="scsi"
ATTRS{model}=="CardReader SD "
Note that SUBSYSTEM was scsi: usb-storage devices (handled by the scsi
system) sometimes show up as usb and sometimes as scsi.
Now you're ready to create some udev rules. In your favorite text
editor, create a new file named
/etc/udev/rules.d/59-multicard-reader.rules
.
You can name it whatever you want, but make sure the number
at the beginning is lower than the number of the udev rule
that would otherwise create the device's name -- in this case,
60-persistent-storage.rules.
Now write your udev rule. Include the identifying lines you picked out
from udevinfo -a:
KERNEL=="sd[a-g]", SUBSYSTEMS=="scsi", ATTRS{vendor}=="USB2.0 ", ATTRS{model}=="CardReader SD ", NAME{all_partitions}="card-sd", group=plugdev
A few things to notice. First, I used KERNEL=="sd[a-g]"
instead of just sdd, in case the devices might some day show up in
a different order.
The NAME field can be whatever you choose.
NAME{all_partitions}="card-sd"
will make the device show
up as /dev/card-sd, so to mount the first partition I'll use /dev/card-sd1.
The {all_partitions}
part tells the kernel to create
partitions like /dev/card-sd1 even if there's no SD card inserted
in the slot when you boot. Otherwise, you have to run
touch /dev/card-sd
after inserting a card to get
the device created -- or run a daemon like hald-addons-storage
that polls the device a few times every second checking to see if
anything has been inserted (as Ubuntu normally prefers to do).
GROUP="plugdev"
ensures the devices will be owned by
the group named "plugdev". This isn't particularly important since
you'll probably be mounting the cards using /etc/fstab lines or
some sort of automount daemon.
Pause and reflect sadly on the confusing coincidence of "scsi disk"
and "secure digital" both having the same abbreviation, so that
you need context to tell what each of these "sd"s means.
Test your new udev line by restarting udev:
/etc/init.d/udev restart
and see if your new device is there in /dev. If it is, you're all set!
Now you can add the rest of the devices from your multicard reader:
go back to the udevinfo steps and find out what each device is
called, then add a line for each of them.
Tags: ubuntu, udev, linux
[
16:45 Apr 18, 2009
More linux |
permalink to this entry |
]
Wed, 15 Apr 2009
Someone on a mailing list was trying to figure out what app brought up
a particular Gnome window, so she could run it on a machine that
didn't have the Gnome desktop menus or panel.
Sounded like an interesting puzzle.
I found a couple of ways, neither of them totally reliable.
They both use xprop.
A lot of apps set something called WM_COMMAND to the original
command that was run. So
xprop | grep COMMAND
and then click on the window you're interested in, and it
gives you something ugly like
WM_COMMAND(STRING) = { "xterm", "-geometry", "80x69+0+0" }
That doesn't seem to work for more modern apps (at least, xchat
and firefox don't set WM_COMMAND) so for those, try this:
xprop | grep PID
For apps that support NET_WM_PID, that gives you the process id, e.g.
_NET_WM_PID(CARDINAL) = 4095
and then you can
ps aux | grep 4095
Neither method is perfect, and there are a few apps that won't respond
to either one. But most will yield to at least one of these approaches.
Tags: X11
[
15:32 Apr 15, 2009
More linux |
permalink to this entry |
]
Mon, 13 Apr 2009
I'm taking a CSS class, hoping to get a more solid understanding of
these CSS parameters I tweak and why they do or don't work, and
one of the exercises involved using the CSS font family "cursive".
Which, on my Firefox, displayed in MS Comic Sans. That doesn't look
very cursive to me!
To test what you're seeing now for cursive and fantasy, use the
W3C
font-family test page ... or these might work (though they might
not survive RSS feeds to other sites):
This is a Cursive font
... ...
This is a Fantasy font
Being a font junkie, I have plenty of nice cursive fonts installed.
The question was how to tell Firefox about them, since its font
dialog (unlike the old Seamonkey/Mozilla suite's) doesn't
make any allowance for setting them, nor do the categories show up
in about:config.
Method 1: Firefox prefs
The answer was in this
Mozillazine
thread. Edit user.js in your Firefox profile
and add lines like:
// Set cursive and fantasy fonts
user_pref("font.name.cursive.x-western", "Allegro");
user_pref("font.name.fantasy.x-western", "Dragonwick");
(of course, use fonts you have installed, not necessarily Allegro
and Dragonwick).
The bug (marked WONTFIX) requesting Firefox offer this in the
Preferences window is
bug 196405,
and related
bug 61883.
Method 2: fontconfig
But wait! Soon after I figured out how to set the font family for
Firefox, I noticed that the font was still MS Comic Sans in other
browsers -- konqueror, midori, opera. It occurred to me that that
Comic Sans cursive was probably coming from fontconfig settings,
and it should be possible to change fontconfig's defaults
for these categories.
And indeed it was, and fairly simple, too. Just make a file named
.fonts.conf
in your home directory and add this to it:
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<alias>
<family>cursive</family>
<prefer>
<family>Allegro</family>
</prefer>
</alias>
<alias>
<family>fantasy</family>
<prefer>
<family>BoomerangItalic</family>
</prefer>
</alias>
</fontconfig>
Again, substitute your own fonts ... but beware. The hard part of
this exercise turned out to be that some fonts worked and some
didn't, following no rhyme or reason. My first five choices for a
fantasy font weren't picked up by fontconfig, but finally I found a
few that were. It isn't related to whether they have spaces in the
font name; it isn't where they're installed (I was using only fonts in
~/.fonts); I have no idea why some fonts work in ~/.fonts.conf and
others don't.
It's rather tedious to test, since the only way to test it is to
exit and re-start firefox. I've never found a font viewer that
will display the fonts visible to fontconfig or pango; you have to
start up some full-fledged application like firefox or gimp, and
gimp doesn't see categories like cursive or fantasy.
In the end I did find fonts that worked in firefox.
But ironically, although the system-level fix seems like a better
way to go, my font changes still don't show up in other browsers.
In opera, cursive shows up in bold block letters,
while its fantasy is MS Comic Sans.
Konqeror and Midori don't handle cursive and fantasy at all,
showing them as plain sans-serif.
And in IE6 running under wine, cursive still shows up as MS
Comic Sans ... while fantasy displays in Greek letters.
Tags: mozilla, firefox, fonts, css
[
21:30 Apr 13, 2009
More tech/web |
permalink to this entry |
]
Thu, 09 Apr 2009
Latest Linux Planet article: Part 1 of a two-parter on
Writing
GIMP scripts in Python.
As usual, there's a
Digg
link too.
Tags: gimp, writing, python
[
22:21 Apr 09, 2009
More writing |
permalink to this entry |
]
Wed, 08 Apr 2009
I was curious whether Linux could read the CPU temperature on Dave's
new Mac Mini. I normally read the temperature with something like
this:
cat /proc/acpi/thermal_zone/ATF0/temperature
(the ATF0 part varies from machine to machine).
Though this doesn't work on all machines -- on my AMD desktop
it always returns the same number, which, I'm told, means that
the BIOS probably has some code that looks something like this:
if (OS == "Win95" || OS == "Win98") {
return get_win9x_temp();
}
else if (OS == "WinNT" || OS == "WinXP" || OS == "Vista") {
return get_nt_temp();
}
else {
return 40;
}
Anyway, I wondered whether the Mac would have that problem
(with different OS names, of course).
There wasn't anything in /proc/acpi/thermal_zone on the Mac,
but /proc is deprecated and we're all supposed to be moving to /sys,
right? But nobody writes about the new way to get the temperature
from /sys; most people are still using the old /proc way.
Took some digging, but I found it:
cat /sys/class/thermal/thermal_zone0/temp
It's in thousandths of a degree C now, rather than straight degrees C.
And on the Mini? Nope, it's not there either. If Dave needs the
temperature he needs to stick to OS X, or else figure out lm_sensors.
Update: Matthew Garrett has an excellent blog article on
the OS entries
reported to ACPI. Apparently Linux since 2.6.29 has claimed to
be "Microsoft Windows NT" to avoid just the sort of problem I
mentioned. Though that leaves me confused about why my desktop
machine always reports 40C.
Thanks to JanC for pointing me to that article!
Tags: linux, acpi, kernel, tips
[
21:54 Apr 08, 2009
More linux/kernel |
permalink to this entry |
]
Tue, 07 Apr 2009
Today's award concerns clarity of error messages.
My desktop machine has been getting flakier for a week or two.
Strange messages at boot, CDROM drive unable to burn reliably or
verify after burning, and finally it culminated in a morning where
it wouldn't boot at all. Turned out (after much experimentation)
to be not one but two bad IDE cables -- and these were the
snazzy expensive heavy-duty cables, not the cheap ribbon cables,
in a box that hadn't been opened for months. Weird.
Anyway, since I had the system disk out anyway (to recover data from
it) I left it out, migrated my data to the newer, bigger disk and
installed a new Ubuntu Intrepid.
Been meaning to do that anyway -- running two disks just adds to the
noise, heat and power usage and doesn't really add that much speed.
It took a couple of hours to get the system working the way I want it
-- installing things I need, like tcsh, vim, emacs, plucker, vlc, sox
etc. and cleaning up some of the longstanding Ubuntu udev and kernel
configuration bugs that keep various hardware from working.
I thought I had everything ready when I noticed I wasn't getting
any sound alerts, so I tried playing a sample .wav file, and got
a rather unusual error:
(clavius)- play sample.wav
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
ALSA lib conf.c:3513:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:3513:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:3513:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:3985:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2196:(snd_pcm_open_noupdate) Unknown PCM default
play soxio: Can't open output file `default': cannot open audio device
What does that mean?
Well, it turns out what it means is ... my user wasn't in the
"audio" group, so I didn't have write permission on the sound device.
I added myself to "audio" in /etc/groups and sound worked fine in my
next session.
Now, I've seen some fairly obscure error messages in my time,
but this one may just win my all-time obscurity award. 9 lines and 744
characters to say "Can't open $device."
And with all that, it still managed
to omit the one piece of information that might have been helpful:
the name of the device it was trying to open (so that an ls -l
would have told me the problem right away).
Impressive!
Tags: linux, alsa, user interface, humor
[
14:23 Apr 07, 2009
More tech |
permalink to this entry |
]
Sun, 05 Apr 2009
(after attempting to install Ubuntu onto it)
I'm not a Mac person, but Dave hit this a few days ago on a brand
shiny new Mac Mini and it was somewhat traumatic. Since none of the
pages we found were helpful, here's my contribution to the googosphere.
Ubuntu through Intrepid (supposedly this will be fixed in Jaunty;
we didn't test it) have a major bug in their installer which will
render Macs unable to boot -- even off a CD.
(I should mention that the problem isn't limited to Ubuntu --
I did see a few Fedora discussions while I was googling.)
What happens is that in the grub install stage, gparted writes the
partition table (even if you didn't repartition) to the disk in a format
that's incompatible with the Mac boot loader.
For the gory details, it's
Bug
222126: Partition Table is cleared during install on Intel Macs.
There's some discussion in a couple of Ubuntu forums threads:
8.04 won't boot
and
Intel Macs with Hardy 'no bootable devices'
and all of them point to an open source Mac app called
rEFIt (yes, it's supposed
to be capitalized like that). But Dave had already tried to install
rEFIt, he thought, unsuccessfully (it turned out it was installed but
wasn't showing its menu properly, perhaps due to an issue of his Apple
keyboard not properly passing keys through the USB KVM at boot time.
Ah, the Apple world!)
Anyway, none of the usual tricks like holding Alt or C during boot
were working, even when he took the KVM out of the loop. After much
despair and teeth gnashing, though, he finally hit on the solution:
Cmd-Option-P-R during boot to reset the Parameter RAM back
to factory defaults.
We still aren't clear how the Ubuntu installer managed to change the
Parameter RAM. But a couple of iterations of Cmd-Option-P-R cleared
up the Mini's boot problem and made it able to boot from CD again,
and even made rEFIt start showing its menu properly.
There's one more step: once you get the machine straightened out
enough to show the rEFIt menu, you have to right-arrow into rEFIt's
partition manager, hit return, and hit return when it asks whether to
synchronize the partitions. That will reformat the incorrect
gparted-format partition table so the Mac can use it.
(And with any luck, that is the last time that I will EVER have
to type rEFIt!)
(Though a better way, if you could go back and do it over again, is
to click the Advanced button on the last screen of the Ubuntu live
installer, or else use the alternate installer instead. Either way
gives you the option of writing grub to the root partition where
you installed Ubuntu, rather than to the MBR, leaving you much less
horked. You'll still need to rewrite the partitions with rEFIt (grumble,
I knew I wasn't quite through typing that!) but you might avoid the
Parameter RAM scare of not being able to boot at all.)
That's the story as I understand it. I hope this helps someone else
who hits this problem.
Tags: ubuntu, mac
[
23:49 Apr 05, 2009
More linux/install |
permalink to this entry |
]
Wed, 01 Apr 2009
This is a reprinting of an article I wrote for my monthly planet column
in the
SJAA Ephemeris:
Is Pluto a planet, or not?
Maybe you caught the news last month that Illinois,
birthplace of Clyde Tombaugh, has declared Pluto a planet.
It joins New Mexico, Tombaugh's longtime home, which made a
similar declaration two years ago.
When I first heard about the New Mexico resolution, I was told that they
had declared that Pluto would be a planet within the state's
boundaries.
That made me a bit curious: would Pluto even fit inside New Mexico?
I looked it up: Pluto has a diameter of 2300km, while New Mexico is
about 550km in longitude and a bit more in latitude. Not even close
(see Figure 1). Too bad -- I liked the image of Pluto and Charon coming to
visit and hang out with friends. Though at Pluto's orbital velocity (it
takes it just under 248 years to complete its 18 billion kilometer
orbit, meaning an average speed of 23 million km/year or 63,000
km/day)
and its current distance of about 32 AU (4.8 billion km), it whould
take it about 207 years to get here.
But it turns out that's not what the resolution said anyway.
Both states' resolutions said roughly the same thing:
BE IT RESOLVED BY THE LEGISLATURE OF THE STATE OF NEW MEXICO that, as
Pluto passes overhead through New Mexico's excellent night skies, it
be declared a planet and that March 13, 2007 be declared "Pluto Planet
Day" at the legislature.
RESOLVED, BY THE SENATE OF THE NINETY-SIXTH GENERAL ASSEMBLY OF THE
STATE OF ILLINOIS, that as Pluto passes overhead through Illinois'
night skies, that it be reestablished with full planetary status, and
that March 13, 2009 be declared "Pluto Day" in the State of Illinois
in honor of the date its discovery was announced in 1930.
So the law applies to anyone (though it's probably not enforceable
outside state boundaries) -- but only when Pluto is overhead
in New Mexico or Illinois.
But wait -- does Pluto ever actually pass overhead in those states?
New Mexico stretches from 31.2 to about 37 degrees latitude,
while Illinois spans 36.9 to 42.4.
Right now Pluto is in Sagittarius, with a declination of -17° 41';
there's no way anyone in the US is going to see it directly overhead
this year. Worse, it's on its way even farther south. It won't
cross into the northern hemisphere until the beginning of 2111.
But how far north will it go?
My first thought was to add Pluto's inclination -- 17.15 degrees,
very high compared to other planets -- to the 23 degrees of the
ecliptic to get 40.4°. Way far north -- no problem in either
state! But unfortunately it's not as simple as that.
It turns out that when Pluto
gets to its maximum north inclination, it's in Bootes (bet you didn't
know Bootes was a constellation of the zodiac, did you? It's that
17° inclination that puts Pluto just past the Virgo border).
That'll happen in February of 2228.
But in the Virgo/Bootes region, the ecliptic is 8° south of the
equator, not 23° north. So we don't get to add 23 and 17; in fact,
Pluto's declination will only be about 7.3° north. That's no help!
To find the time when Pluto gets as far north as it's going to get,
you have to combine the declination of the ecliptic and the angle of
Pluto above the ecliptic. The online JPL HORIZONS simulator is very
helpful for running data like that over long periods -- much easier
than plugging dates into a planetarium program. HORIZONS told
me that Pluto's maximum northern declination, 23.5°, will happen in
spring of 2193.
Unfortunately, 23.5° isn't far enough north to be overhead even from
Las Cruces, NM. So Pluto, sadly, will never be overhead from either
New Mexico or Illinois, and thus by the text of the two measures, it
will never be a planet.
With that in mind, I'm asking you to support my campaign to persuade
the governments of Ecuador and Hawaii to pass resolutions similar to
the New Mexico and Illinois ones. Please give generously -- and hurry,
because we need your support before April 1!
Tags: science, astronomy, pluto, humor, writing
[
20:09 Apr 01, 2009
More science/astro |
permalink to this entry |
]