I just connected my Nokia N95 to my 22 inch TFT (incl. speakers) and paired it with a bluetooth keyboard.

I’ve taken a picture with the N95, so it is missing in the installation (the mouse is only a mock-up…):

With applications like Putty, symtorrent and Opera mobile on this Symbian powered “mobile phone”, this may be a glance in the future of personal computing.

Yeah, another “Getting to work on openSUSE 10.3” post. Perhaps I should print me a t-shirt: “No, I will not fix your openSUSE” or “I helped Novell to actually make a linux distribution and all I got was this lousy t-shirt”

This time our package is “simply” not included (Remember this x point. I will tell you what happend right there immediately.) in the distribution…


I just decided to write another article about how openSUSE 10.3 finally sucks (will link it here, if done. THERE I will tell you, what happend at x😉 )

Enough ranting (calm down, calm down)…

If you want gscan2pdf on openSUSE 10.3 , you have to Install perl-Gtk2-Ex-PodViewer first.

This package is a dependency of gscan2pdf, which is neither in the main repository nor in the build service.

Download the


from the guru repository (We cannot install that directly on 10.3 .Noticed the 102 and the src😉 ).

Try to build it with

#> rpmbuild --rebuild perl-Gtk2-Ex-PodViewer-0.14-3.guru.suse102.src.rpm
Installing perl-Gtk2-Ex-PodViewer-0.14-3.guru.suse102.src.rpm
warning: InstallSourcePackage: Header V3 DSA signature: NOKEY, key ID 58857177
error: Failed build dependencies:
        perl-Gtk2 is needed by perl-Gtk2-Ex-PodViewer-0.14-3.guru.suse103.i586
        perl-Glib is needed by perl-Gtk2-Ex-PodViewer-0.14-3.guru.suse103.i586
        perl-IO-stringy is needed by perl-Gtk2-Ex-PodViewer-0.14-3.guru.suse103.i586
        perl-Pod-Simple is needed by perl-Gtk2-Ex-PodViewer-0.14-3.guru.suse103.i586

Install the four listed dependencies, if necessary (They should be all in Yast…). Then try again.

Now, install the new package. As root:

rpm -Uvh /usr/src/packages/RPMS/i586/perl-Gtk2-Ex-PodViewer-0.14-3.guru.suse103.i586.rpm

“U” means “upgrade or install” and “vh” configures the graphical progress bar of the rpm command.

Do the same for:


Finally, search gscan2pdf in the build service , install it and enjoy!

Rsnapshot is not working because of its default configuration in openSUSE 10.3 (See bugreport. Thanks Novell…).

First of all, the lchown perl package is missing. You can see this by turning the verbosity to 5 in the rsnapshot.conf and do a

rsnapshot configtest

Search for ‘lchown’ in the Build Service and install it.

Second, the first_sync option is set to 1 by default. This causes rsnapshot to do exactly nothing if executed.

Read the man page:

rsnapshot sync

When sync_first is enabled, rsnapshot must first be called with the sync argument, followed by the other usual cron entries. The sync should happen as the lowest, most frequent interval, and right before. For example[…]

So, disable the option or do as you are told in the manpage.

Next, (vixie-)cron is a bad idea to trigger the backups on a notebook/desktop. Since the openSUSE cron is only able to start jobs at a distinct time. If your machine is not running at this time, there will be no backup (For example, you trigger your yearly backup on the first of january at 21:30. Just wait another year, if you miss that appointment…).

The solution would be anacron, so let’s install … eh, did I told you, that openSUSE (10.3) seems to be the only distribution not including anacron (not even in the build service)? Another thanks to Novell (I declare today as the official “Novell thank you, you fucked up”-Day.)

Fortunately, fcron combines the featureas of anacron and vixie-cron. But, you may guess, also not included in openSUSE. But this time it is in the Build Service.

In two weeks, the time of openSUSE 10.3 is over (hooray to 11!). Maybe, I should write a post about how I love and hate this distribution at the same time.

Or maybe, I should ask James to do a SUSE video:

Choice of encryption method

Cipher Comic Strip

I’m running OpenWrt “Kamkaze” on my Asus WL-500 gP (266 MHz MIPS architecture with 32 MiB RAM). Since there is no WiFi support in kernel 2.6 yet, I’m stuck to kernel 2.4. If we want to encrypt a filesystem on this setup, we need a fast and sleek encryption method running on kernel 2.4 .

At the moment there are three different methods to encrypt a filesystem on Linux, which I consider as sensible: Truecrypt, dm-crypt (with luks) and loop-aes.

Only loop-aes meets our demands.

Building the latest OpenWrt from SVN

Before we install the loop-aes, some comments on building OpenWrt from SVN. The latest official release of OpenWrt “Kamikaze 7.09” doesn’t include loop-aes . Fortunately, the current SVN version DOES include a patched loop kernel module (“kmod-loop-aes”), but no patched userland tools. So, with the SVN version we have to go only half the way to an encrypted system by patching the userland tools.

Building your own OpenWrt is simple. Just create a new working directory and do a

svn co https://svn.openwrt.org/openwrt/trunk/

to download the current version.

You can configure your firmware graphically via

make menuconfig

and build your firmware via


That’s all. More information here: OpenWrt Buildroot

Installation of loop-aes

loop-aes requires a patched loop kernel module and patched “mount”, “umount”, “losetup”, “swapon” and “swapoff” binaries. As mentioned before, the SVN version already includes the patched kernel module (Install it via the feed script in trunk/scripts).

Patching these binaries is quite easy:

  1. First check in trunk/package/util-linux-ng/Makefile which version of util-linux-ng is included in the svn (mine:
  2. Then download the loop-aes version, which corresponds to that version (mine: loop-AES-v3.2b). There’s a file included: util-linux-ng-XXX.diff (mine: util-linux-ng-
  3. Copy it to trunk/package/util-linux-ng/patches and rename it to something like 002-util-linux-ng- depending on how many patches there are already.

Next, edit trunk/package/util-linux-ng/Makefile and replace all occurrences of “losetup”, “mount-utils” and “swap-utils” with “aeslosetup”, “aesmount-utils”, “aesswap-utils” (not in Build/Compile of course). We want to avoid conflicts with the original packages and distinguish them better from the original packages. (In fact, it is possible to clone the whole package and build a patched and unpatched version simultaneously.)

At last,

make menuconfig

Our new aes crew should now appear in the selection menu. Build the firmware, flash and enjoy!

There are plenty tutorials on how to proceed with loop-aes.
Thanks to nanl.de for showing me the loop-aes module in SVN!

Note: Alternatively, you can install a regular Kamikaze 7.09. Then you have to check out the 7.09 tagged sources and import the svn packages feed. After that, you are able to backport the packages according to this tutorial.

Peter Gabriel just started his new commercial music download service (Music Club) offering music in a lossless format (i.e. Apple lossless).

As a reaction the press writes articles about the benefits of lossless audio for audiophile know-it-alls (see Spiegel online in german -> “Besserhörer”), completely ignoring the real advantage of lossless audio in this business: Format independence for now and ever.

Lossless audio allows you to:

Evolution of music players

  • Convert it to a lossy format in a quality you like, in a format you have to use (for example on a mobile device).
  • Convert it to the next big format of the future.

Think about it: What happend to your VHS video collection?

You can rerip your CDs, but you will never ever be able to do that with your DRM infected WMA music collection. And you paid actual money for that crap!

I would be more than happy to feed a bunch of money to a online music service offering my kind of music in a lossless audio format (not Peter Gabriel…).

In the mean time, I will buy my CDs, rip them and store them away on the attic never touching them again. (Or I will search the free market.)

Inspired by these tv casting shows of the last years, I decided to make my own band. The final goal is to hit the charts in last.fm! To accomplish that, we will use a fantatic crowd of pyhtonian fanbots, ahm I mean fanboys!

Today, we will cast the candidates.

I’ve written a python script doing the following:

  • Fetch a random page from wikipedia to choose the band name
  • Use the last four words of a random quote for the album title
  • Generate tracks out of the wikitionary and wiki news (between 5 and 15) (resulting in highly politically motivated songs😉 )

Here are the first three candidates presented to the jury (You!) today:

Valensole UFO IncidentIs There To Defend?

1. Gritáis
2. Chinese protesters
3. Rudis
4. Big Brother star
5. Nepali goddess retires
6. Giant Lego

Demographics of KazakhstanLike…. You Know…. Night

1. Whalers upset Spirit
2. Larson
3. Reports claim French
4. “Stolenwealth” Games
5. 21
6. U.S. retains
7. California
8. Crossrail
9. Romanian artists auction off
10. Stopperons

MiloslavskyDeaths Is A Statistic

1. CNN hires
2. Sukupuolineutraali
3. General Petraeus: 30,000
4. Carping
5. Former Russian nuclear energy
6. Constitutional challenge
7. Zonary
8. Matricidal
9. Turkish and Greek fighter
10. France votes no
11. Bush plans
12. Akat
13. Four Royal Canadian Mounted

Try it on your own and find new candidates for the contest! Just post new bands in the comments and/or vote for your candidate. Here is the script:

import urllib
from xml.dom.minidom import parse
from random import *

WIKIPEDIAURL = 'http://en.wikipedia.org/wiki/Special:Random'
RNDQUOTESURL = 'http://weirdo.bur.st/rssrandomquotes/'
WIKITIONARYURL = 'http://en.wiktionary.org/wiki/Special:Random'
WIKINEWSURL = 'http://en.wikinews.org/wiki/Special:Random'
USERAGENT = 'Mozilla/5.0 (X11; U; Linux i686; de; rv: Gecko/20080203 SUSE/ Firefox/'

# we need a valid user agent for wikipedia
class MyURLopener(urllib.FancyURLopener):

class BandGenerator:
	def __init__( self ):

	def giveMeBand( self ):
		f = self.urlopener.open( WIKIPEDIAURL )
		print f.geturl()
		dom = parse( f )
		#get the article name
		band = dom.getElementsByTagName('h1')[0].childNodes[0].data
		# do cleanup (python has problems with gc and dom)
		return band

	def giveMeAlbum( self ):
		f = self.urlopener.open( RNDQUOTESURL )
		print f.geturl()
		dom = parse( f )
		title =  dom.getElementsByTagName('title')[1].childNodes[0].data

		## we will use the last four words as the album title
		title = title.rstrip('.\n').rsplit(' ', 4)[1:5]
		title = " ".join(title).title()
		return title

	def __fetchTrack1( self ):
		f = self.urlopener.open( WIKITIONARYURL )
		print f.geturl()
		dom = parse( f )
		# get the article name
		track = dom.getElementsByTagName('h1')[0].childNodes[0].data
		# do cleanup (python has problems with gc and dom)
		# capitalize the track
		return track.title()

	def __fetchTrack2( self ):
		f = self.urlopener.open( WIKINEWSURL )
		print f.geturl()
		dom = parse( f )
		# get the article name
		track = dom.getElementsByTagName('h1')[0].childNodes[0].data
		# do cleanup (python has problems with gc and dom)

		track = track.split(" ")
		r = randrange(len(track))
		# limit to 4 elements
		if r > 3:
			r = 3
		track = " ".join(track[:(r+1)])
		track = track.rstrip(',')
		return track

	def giveMeTrack( self ):
		fns = [self.__fetchTrack1, self.__fetchTrack2]
		# choose function
		fn = choice(fns)
		return fn()

g = BandGenerator()

band = g.giveMeBand()
album = g.giveMeAlbum()

# create between 5 and 15 tracks
ntracks = int(uniform(5,16))
tracks = []
for i in range(ntracks):

print band + " - " + album
for i in range(ntracks):
	print str(i+1) + ". " + tracks[i]

Google Linux

Google Linux

Since I started using Linux, I’m searching for terms like “nvidia driver linux”, “cd cover software linux”, “blalabla linux”. I were so accustomed to that behaviour, that I didn’t even realized the problem. Now I know the solution: