World of Goo

Today I tried the released Linux version of World of Goo. I tried the demo and after I got through the demo chapter I decided that I will buy this game.
See the World of Goo web page for more information.

The four reasons why I loved to buy this game is first of all it provides a Linux version, second it has no DRM, third it is a small development team and not part of one of the big publishers and the forth and maybe the most important point it is so much FUN to play.

I’m off playing.

UnukLCD

Last week I got the PicoLCD. There is an open source driver for using it with the LCDProc deamon. The LCDproc provides a service which allows applications to show some information on the display.
LCDproc provides an easy to use protocol for showing your own information on the display see the LCDproc Developer’s Guide. I wrote a small python script which shows the currently playing song of a running Music Player Daemon (mpd). Since the PicoLCD provides a few buttons I added some basic control buttons (play, pause, stop, next, previous).
I have different ideas to improve this scripts but I left it this ways, because now it is quite simple and should give a good starting point for every one interested in doing something similar with LCDProc.

You can get the source code from the following page:

Sync ReadOnly (syncro)

I have put together a small description of how to use my syncro script and uploaded the script including the config file to the web server. I have mentioned this script before (Ubuntu on Alix (aufs))

You can find the description and the download here:

Ubuntu on Alix (aufs)

I did some further work on getting Ubuntu on the Alix. I have tested the basic kernel on my second Alix board (2c3). It works so far without problems.
In addition I did some research how to improve the installation. First I thought I would like to have the root file system read only. This manly to reduce the write access to the flash disc. For this I would have to create a ram disc and map several directories to this ram disc since some directories need to be writable. After some research and looking at the Voyage Linux distribution I found an other solution. On the next version of Voyage Linux they will use aufs. I did some tests with aufs and I think this could be the solution I use. I took the script from Voyage Linux and did some small changes to the script for mapping some directories for writing to a memfs. The script used by Voyage Linux is quite nice it will sync back the changes at shutdown and this way no log information get lost on normal shutdown.
I will post the change script later, since I need to do some changes until I think it fits all my needs.

Ubunut on Alix 3c3

Today I got Ubuntu 8.10 Server Edition working on my Alix 3c3. It was actually quite easy to get done. There are only a few things you need to now and it will not work with the default kernel.

To get Ubuntu installed on the flash card I used qemu on my Linux machine. I used the Qemu Launcher application to configure the virtual machine for installation. For the install disk I directly used the flash disc. In my case this was /dev/sdb. It is necessary to launch the Qemu Launcher with super user privileges to get access to this device.
It is possible to start the qemu from the console as well. Here is the command to start the qemu as it was generated from the Qemu Launcher:

/usr/bin/qemu -boot c -m 256 -hda '/dev/sdb' -cdrom '/home/mweb/Desktop/ubuntu-8.10-rc-server-i386.iso' -net nic,vlan=0 -net user,vlan=0 -localtime

Generic Config file: http://user.enterpriselab.ch/~zdweber/config_basic

Within this it is easily possible to install the complete Ubuntu system as you would like to have it. After the installation we need to at least boot once into this system and install our custom kernel, since the default ubuntu kernel will not work on the Alix board. Do all other customization steps here to save you work on the Alix board it self. We should also change the grub config that it uses the device for the root directory instead of the UUID of the device. For some reason I dont know yet it does not work with the UUID.

I used the current stable kernel 2.6.27.4 but it might work with a newer kernels as well. I added two different config files to this post. The config_basic is the basic file I used it should work on other Alix boards as well but this is not tested yet, I will do this later. The config_alix3c3 has additional support for the sound card that is built into the Alix 3c3 board.

To create the kernel just extract the downloaded kernel and copy the config file into the kernel directory. Rename the config file to .config and now you are ready to build the debian package of the kernel. Just call it with make-kpkg. If you need more information about how to build a kernel on Ubuntu use google since there are enough resource out there that just explain this.

$ fakeroot make-kpkg kernel_image kernel-headers

This will build the kernel and headers package for this kernel. Copy it to the Alix and install it with dpkg.

Known Problems/Missing Features

  • Grub can’t find the flash disc (Instead of the UUID of the hard dsic enter the device name and it will work)
  • AppArmor does not work. This is because the kernel module is not build for our custom kernel. I just removed apparmor-utils since i don’t need it for my use case.
  • Read-Only file system. The current installation needs to have a writable root file system. Since we use a flash disc this is not the best solution. I would like to mount it ro and have a ram disk for the tmp files similar to Voyage linux.

Basic Kernel config
Alix 3c3 Kernel config

Spam Spam Spam

Maybe we have to see if we get a better spam protection for the blog on the Enterprise Lab. In the beginning i got about 1 spam message per month but now I get almost every day at least one. Since I moderate all the comments I usually just have to remove them, but this is still annoying.

Well lets see if the others get the same problem or if it is a problem i got my self with the popularity of certain posts. Since I only get spam to one post.

Updates on PAN

I did work on the PAN connection for the Nokia N810. As I described earlier ( Bluetooth PAN) I used maemo-pan on the Nokia and the setup as described in the mentioned tutorial on the Ubuntu desktop. It worked but I needed to set the desktop address of the computer within the Nokia by hand. Additionally the connection setup took quite some time since I always started the dhcp server new for each connection and it only worked for one PAN connection at a time.

I made two improvements to the old setup. First I added some functionality to the maemo-pan that it lets the user select the device to connect to. The second improvement I made on the Ubuntu desktop. Instead of starting the dhcp server on the newly create interface I create a bridge interface and add the new created interface to the bridged interfaces. This way I only need to start the dhcp server once for the bridge interface. This way it supports more then one PAN connection at once and it runs much more stable than before.

I wrote a small tutorial how to setup a Bluetooth PAN on Ubuntu with a bridge interface.

For the maemo-pan I sent a patch to the project.

Additional note the problem I got with Bluetooth on Ubuntu 8.04 beta is now with the release of Ubuntu 8.04 resolved. The pand binary is available again.

maemo’s scratchbox under Ubuntu Hardy Heron

Today I tried to install the maemo 4 sdk on my Ubuntu Hardy Heron. The first part installing the scratchbox worked with almost no problems. But the installation of the SDK it self did not work that easy. The first error I got was the following:

Inconsistency detected by ld.so: rtld.c: 1192: dl_main: Assertion ‘(void *) ph->p_vaddr == _rtld_local._dl_sysinfo_dso’ failed!

Lucky me I found a solution from Michael R. Head. It is important to set both values. The first helped me to get into the scratchbox but without setting the mmap_min_addr I could not fully install the applications in the ARMEL target. After I set the second parameter it worked without any further problems.

Execute the following two lines that are described in the solution from Michael R. Head and the installation will work.

echo 0 | sudo tee /proc/sys/vm/vdso_enabled

echo 4096 | sudo tee /proc/sys/vm/mmap_min_addr

Bluetooth PAN

Today I managed to get the personal area networking (PAN) working with a Nokia N810 and a Ubuntu Linux system. However it took me quite a while to figure out everything to get it working.

The first problem I had was that the Nokia N810 does not support the PAN Bluetooth profile by default only dial-up networking (DUN) is supported. The recently released maemo-pan application adds support for PAN to the N810.
The problem I got with maemo-pan is that I could not register my computer as a phone and because of this the maemo-pan application did not find my workstation. After reading the source code I figured out that I just need to set the appropriate value in GConf to get it connecting. It is necessary that the two devices are paired before that they can connect without any further authentication.
With the following call to the gconftool-2 it is possible to set the HW-Address of the Bluetooth adapter of the desktop. This needs to be called on the N810.

gconftool-2 -s /system/osso/connectivity/BT/preferred --t string "XX"

Replace the ‘XX’ above with the hardware address of the desktop. To check that the configuration is set correctly you can call the gconftool-2 with the following parameters:

gconftool-2 -g /system/osso/connectivity/BT/preferred

The next problem I encountered was that I used Ubuntu 8.04beta. Where I figured out that there are some problems with the bluez-utils. Actually the pand executable is missing. I installed the bluez-utils from the PPA from Elliot Murphy. In this package the pand binaries are available and working.

I followed the howto Bluetooth PAND debian etch which did work almost. It did work to get a connection but I got the following error message in the syslog after some data where transmitted.

NETDEV WATCHDOG: bnep0: transmit timed out

If this happens I need to restart the connection and everything will work again, for a small amount of data. Since I tested these within VMWare I thought I might just try it on a real machine. Surprisingly it just worked without any problem. This is yet an other example if you get any problem with a USB device within VMWare just try the device on a real machine since it is possible that it might work without problems. It might work better if I would use VMWare 6 and no more VMWare 5.5 since there where some improvements within the USB support.

What is still missing now is a tool on the N810 to select the Bluetooth partner to connect to that offers PAN. This way it would not be necessary to select the PAN device as a phone or set it by hand as the device to connect to. I will see if I get the time to do that.

.net PDFViewer Component

Today I wanted to Integrate a PDFViewer component into my own .net (C++/CLI) application. In the beginning I hoped to find an opensource component for this. There are several opensource library’s for creating PDF’s with .net but none of them provided a PDFViewer component. There are several commercial solutions available but since they usually provided much more than I needed I was not really interested. On Linux or with other GUI toolkits (GTK, QT4 or Java) there are opensource alternatives available for the viewer but not for .net.

After a while I found a description that it is possible to integrate the Adobe Reader via ActiveX. Armin sent me a short C# example how to do it. Sadly I could not find the necessary dll’s. After some search for this dll’s I found the documentation page of Adobe where they provide examples for the usage of the Adobe Reader within a C# application. After compiling this application I found the needed dll’s in the output directories of this project and then I could set up my application just fine.

The only problem with the examples where that they where unnecessary complicated. I reduced the example to a minimum needed and created a small example application. The example including a short description can be found in the enterpriselab wiki:

Some more interesting links I found during my research:

Next Page »