Blog entries published in 2008
Feeds: RSS | Atom

Squeezecenter Performance on QNAP TS-109 II

Published: 2008-12-14 19:11 UTC. Tags: turbostation squeezebox

As promised in Yesterdays post, here are some data on the performance of Squeezecenter on an QNAP TS-109 II running Debian Lenny.

Picture of QNAP TS-109 II

My idea when buying the QNAP was to use it as a low-power alternative to keeping my workstation switched on all the time for access to my music collection from the Squeezebox.

Low power processors have a drawback, though - you don't get that much processing power out of them. Running Squeezecenter on it turned out to work.. but not very fast.

Memory Consumption

The QNAP TS-109 II has 256Mb of memory. That's good, because squeezecenter alone consumes about 70Mb of virtual memory, och which 60 is resident. The MySQL server started by squeezecenter will consume another 97M virtual/20Mb resident. Part of the virtual memory used by MySQL is probably mmap:ed files, and that doesn't really count.

With only squeezecenter and the standard set of daemons such as syslogd and dhcpd running, and NFS server in the kernel, it seems like there's not much swap usage, so the amount of available memory is not extremely low. Don't try the 128Mb version of the QNAP, though, that will be painstakingly slow because much more swap will be required.

Web Interface Performance

The web interface is rather slow. You have to wait several seconds before things appear, and it also seems like the CPU consumption increases significantly while using the web interface.

One strange thing is that the CPU consumption of the perl process is very high, while the CPU consumption of the MySQL process is very low. One has to wonder if the SQL database is used in an optimal way. Letting the database do most of the work is often the best way to achieve good performance. Doing a lot of processing after the data has been read from the database is a bad way. But, I have not studied the database operations in detail, this is just guesswork from my side.

Changing from the default skin to the Classic skin did help, but it's still slow.

Using the Squeezebox to search for music

Picture of idle Squeezecenter v3

Using the remote to search for music via the squeezebox has good performance. Starting playback sometimes has a slight delay, which I think in most cases is because of transcoding..

Transcoding Ogg Vorbis files

The firmware for the Squeezebox has support for decoding Ogg Vorbis files, but unfortunately it doesn't seem to work well at all. It can't read about half of my Ogg Vorbis files. Even newly ripped files are troublesome, and if I rip CD and code it into Ogg Vorbis, some of the files will work in the Squeezebox, some will not.

Since I do have a lot of Ogg Vorbis files, the solution is to have Squeezecenter transcode the Ogg data to another format that the Squeezebox understands, before sending it over the network. This process is called transcoding.

I first tried to transcode into FLAC, but that was too CPU-intensive for the QNAP TS-109 II to handle - probably because two compressed formats were involved.

Transcoding from Ogg to AIFF does seem to work rather well - there is still a slight delay before you can hear the music after pressing play on the remote.

An interesting experiment would be to use the integer-only Ogg decoder, Tremor. That might speed things up because as far as I understand, floating point performance is not that good on the ARM architecture.


Running Squeezecenter on the QNAP TS-109 II does work, but it's a bit slow. Part of the problem is that Squeezecenter is rather bloated, functionality-wise.

It's a pity the only documentation on the protocol used between squeezecenter and squeezebox is the Perl source code.


Running Squeezecenter on QNAP TS-109 II

Published: 2008-12-13 21:18 UTC. Tags: hardware turbostation squeezebox

I have now managed to get Squeezecenter running on my QNAP TS-109 II. Squeezecenter is the server a Squeezebox network music player connects to in order to get hold of its music.

Picture of QNAP TS-109 II

Since the QNAP TS-109 II is running on the ARMEL architecture, installation was a little bit tricky.

Squeezecenter is written in Perl. Let me state early that Perl is not my favourite programming language.

I installed the Debian package of Squeezecenter 7.3 available Slimdevices web. The package's architecture is all, which is not true - it contains Perl XS code compiled for i386 and amd64. This code won't run on ARMEL.

The Squeezecenter package also ships lot's and lot's of third party Perl modules, but they don't work on Perl 5.10 because of module version conflicts. I run Debian Lenny on the QNAP, and guess which Perl version is shipped with Lenny... Yep, Perl 5.10.

I found an excellent forum post by "bugfixer" at the squeezebox forums explaining how to get Squeezecenter running on Perl 5.10. Much of the information in this blogpost comes from that post.

The shipped perl modules are all available as Debian packages - with one exception - the libjson-xs-perl package in Debian lacks the file /usr/lib/perl5/JSON/XS/, so I had to copy that one from the version shipped with squeezecenter.

The squeezecenter Debian package also has a large amount of dependencis not listed in the package's metadata. And to add to the misery, it requires the perl package Encode::Detect, which is not even available as Debian package.

To avoid having to keep track of this mess, I created a puppet class which installs all dependencies, installs squeezecenter, and then removes all files which cause trouble. With that work done, I can reinstall squeezecenter and be pretty sure it will work. I did an upgrade of squeezenter today by downloading the new squeezecenter debian package, installing it, then ran puppet to move away all the offending perl classes - worked as a charm!

So, if you want a list of all packages required and all files that must be moved, refer to the source for my squeezecenter puppet class. That list will be kept more up to that than if I would list the info on this blog post.

I'll be back with some info on the performance when running Squeezecenter on the QNAP. I can say already that it's not blazingly fast..


Weird Django Bug

Published: 2008-12-04 17:36 UTC. Tags: software django

I think I hit Django bug #6681 yesterday. It's the kind of bug that triggers only if three completely different conditions are met at the same time, where at least one of them depends on timing. In this case:

  • The Apache process must be recently started.
  • The first request hitting the Apache process must be for a page that requires reST rendering.
  • The reST must have a section that triggers the default interpreted role.

For reference, the exception was:

AttributeError: Values instance has no attribute 'default_reference_context'

QNAP TS-109 II - First Impressions

Published: 2008-12-02 20:06 UTC. Tags: linux review ipv6 turbostation

I bought a second hand Squeezebox the other day. The Squeezebox must read its files from a server running Squeezecenter, and since I don't want my workstation running all day (it's consuming energy. I'm trying to be environmentally friendly when I can), I had to find a low-power alternative.

I have been thinking about getting some kind of server running at home for a while. There are other things I want it to do as well:

  • Keep a SixXS IPv6 tunnel up, and route an IPv6 subnet for home.
  • Be able to Wake-on-LAN my main workstation.
  • Get better network throughput than from my stupid 3com NAT box.
  • Etc, etc..

After some consideration, I bought a QNAP TS-109 II. It has a 500MHz ARM processor, 256Mb of RAM and consumes 14Watts of energy when active, 6,6W when not. That's quite OK. I bought a WD Caviar Green 500Gb hard drive for it. That drive is supposed to be quiet and energy efficient.

Another killer fact about the QNAP is that the upcoming Debian Lenny will have official support for all TurboStation models from QNAP. It's even listed as a press release on QNAP's webpage. The installation link from the press release doesn't seem to work anymore, though. The Debian on QNAP TS-109 pages are very helpful, though.

The QNAP + hard drive arrived today, and I unpacked and assembled the two (very easy), plugged it in, found its IP address from the list of DHCP entries in my NAT box, and tried to connect to it via a web browser on both port 80 and port 8080.

Unfortunately, I was met by a message in several languages basically telling me that "This box is not initialized, do what the manual says". And the manual says that you need a Windows computer to initialize the TS-109.


I don't own a Windows computer!

Fortunately, my girlfriend has an XP box which I could use to run the "QNAP Finder" to install the QNAP. Still, I find this irritating. There's support for Mac as well, but I don't have any Mac neither.

I'm sure there's some way of initializing the device without Windows, but that might require lot's of knowledge on the RPC protocol used to talk to the device. Presumably, it's some kind of RPC over HTTP, as the only ports the device has open at initial startup is 80 and 8080.

Navigating around in the menus for a while, I was not surprised to see that running Debian on the machine would be the best option for me. Specifically:

  • There's no support for NFS on the TS-109 II. You need the TS-109 II Pro for that.
  • There's no network routing support in the standard firmware, and that's not surprising - this is a NAS box afterall. But with Linux and it's VLAN support and iptables, it should work well. We'll see about that... :-)
  • The configuration can't be easily handled via Puppet when running the standard firmware. That's something I do for other servers I manage.

Anyway, I think I'll be happy with this box. I might add an external eSATA enclosure later to provide backup of the stuff I keep on the QNAP. We'll see. Backing up stuff to Amazon S3 is another option.


Personnummer för inrikes SJ-resor? Nej tack!

Published: 2008-11-29 21:40 UTC. Tags: in-swedish

Leif Nixon skriver i sin blogg Tankar från rooten om hur vi kommit ett steg närmare sovjet eftersom SJ ska börja kräva legitimation för inriker resor.

Förutom att jag liksom Nixon är irriterad över att SJ genom sin monopolställning kan bestämma sin egen prispolitik och hitta på allsköns dumheter ostraffat, så funderar jag också över integritetsaspekten, och över hur de har tänkt att hantera personer utan svensk legitimation?

Om vi tar integritetsaspekten först, så undrar jag om SJ verkligen har tänkt igenom vad som kan hända om information om människors resemönster kommer på vift. Med biljetterna kopplade till personnummer kan man helt plötsligt följa enskilda personers resemönster - vill vi verkligen det?

SJ kommer säkert att påstå att personnumren naturligtvis är skyddade och att bara auktoriserad personal får läsa dem. Men samtidigt måste samtliga konduktörer kunna läsa ut personnumret vid varje enskild resa. Personal på kundtjänst måste förmodligen kunna söka på personnummer för att kunna hantera ärenden.

Vill du verkligen att alla konduktörer ska känna till din ålder? Vill du att de ska känna till ditt kön? Var du är född? Vill du att de ska kunna slå upp din hemadress?

Låt oss anta att du lever gömd och under hot, och att de du gömmer dig för känner till ditt personnummer. Alltid finns det nått rötägg på SJ som kan mutas att hämta ut information om att du som gömmer dig kommer att resa mellan Burträsk och Överkalix med ankomst 21:11 den 5/5 2009, du sitter i vagn 5 plats 17. Bra va?

Om vi lämnar integritetsaspekten, och i stället funderar över det rent praktiska, så undrar jag om SJ är medveten om att det är supersvårt att få en svensk legitimation om man är utlänning och bor i Sverige. Ska man inte få åka tåg om man är från Kanada och jobbar i Sverige?

Jag kommer också att vara besvärlig och vägra visa legitimation på tåget. Personnumren ska användas med måtta!


Enabling IPv6 in Dovecot and Postfix

Published: 2008-11-29 20:20 UTC. Tags: linux network ipv6

I realized after some testing that neither Postfix (my MTA), nor Dovecot listened to IPv6 by default. In both cases, enabling IPv6 was easy.

(This is where I found out that my algorithm for getting parts of an entry and showing it on the front page doesn't work that well.. so therefore, this text has been added, as it works as a workaround).


Set the inet_protocols parameter in /etc/postfix/


The default value is ipv4.


Set the listen parameter in /etc/dovecot/dovecot.conf:


At least on Linux, this will make Dovecot listen to both IPv4 and IPv6. Setting the value of listen to *, will make it listen only to IPv4.


My apache server happily picked up the presence of an IPv6 interface after a restart. This is probably due to the fact that I have a the following in my Apache configuration:

0 comments. - now via IPv6

Published: 2008-11-29 19:19 UTC. Tags: world wide web network ipv6

I have been intrigued by IPv6 for a long time. The worldwide challenge of smoothly switching from IPv4 to IPv6 without end-users noting the switch is fascinating.

Getting IPv6 adresses for clients or servers where the IPv4 network provider doesn't provide IPv6 natively is very easy - there are several tunnel brokers. I have two tunnels at SixXS - one to get IPv6 at home, and one to get IPv6 to my Slicehost machine (the one serving you this blog post). DNS AAAA entries have been added, so with IPv6 support on your client, you can now reach via IPv6.

However, IPv4 is still required for access, because the slicehost DNS servers that I'm using are reachable via IPv4 only.

To ensure a high nerd factor of, I have also modified django to add a footer to the end of all pages with a happy message if you're running IPv6 :-).


Migrating Plone Sites to Django

Published: 2008-11-01 20:50 UTC. Tags: software plone django noplone

As mentioned earlier on this blog, I have converted this site from Plone to Django.

The conversion included migrating most of the data from the Plone instance's ZODB (Zope Object Database) into Django's ORM.

The hard part of that process is to get the data out of ZODB as the format depends completely on which Plone products you have been using. You need to check the schema for each product for which you want to extract data to get the field names, and you need to write code for extracting the data from each type of content type and add a new object in Django's ORM, translating data from one format to another in some cases.

In my case, I wrote a script that takes care of:

  • Document and Folder objects from Plone's standard contenttypes.
  • Blog entries in a Quills blog.

The script will traverse all Document, Folder and Blog entries and extract their data, adding instances of Django models from two custom Django products I have written.

A second script will then read the data from Django's database and modify the URLs in <img> tags, downloading the images from the Plone site via HTTP to a directory which will be configured as MEDIA_ROOT in Django. The script does the same for <a> tags that refer to images, .tar.gz files, etc. that also were stored in the ZODB of the Plone instance.

Each site that wants to do a conversion from Plone to Django will have to write their own script, as the set of products used in the Plone instance is site-specific, and the set of applications used in Django is also site-specific. However, I have made my conversion scripts available via subversion in the hope that they can serve as an example.

To access the scripts, either check them out with your subversion client. Example:

git clone git://

The scripts are in the plone2django_migration subdirectory.

You can also browse them here:


Inline links in reStructured Text

Published: 2008-11-01 20:26 UTC. Tags: software

I've been using reStructured Text for documentation purposes for a couple of years, but I have never read the full specification, only the quick reference, and I probably read that rather.. quick. So quick indeed that I have always been irritated because I couldn't find how to write hyperlinks without having to list them at the end of the document.

But today I found it. So here it is, for my future reference:

Add a `hyperlink to reST <>`_

That's the quick-n-dirty variant. Here's the perhaps more readable, but more cumbersome approach that I've been using until now:

Add a `hyperlink to reST`_

.. _hyperlink to reST:

Bus Stop Vandalism

Published: 2008-11-01 12:00 UTC. Tags: humor

It seems those little kiddies just can't stop vandalising the bus stops in Linköping. Here's one example I caught on camera the other day:

ViewVC Django Integration

Published: 2008-10-25 20:14 UTC. Tags: open source software django version_control

I've written a Django product which helps integrating ViewVC in a Django Site.


Västra Cykelaffären i Linköping - bra!

Published: 2008-10-19 08:00 UTC. Tags: in-swedish review

Pendlingscykeln (jag cyklar 13km om dagen till och från jobbet) behövde fixas lite med. Bromsarna var slut och växlarna behövde justeras.

Förr, när jag bodde hemma i träsket, där jag hade tillgång till min pappas garage, hade jag nog gjort det själv, men som lägenhetsboende med delat garage så är det inte riktigt samma grej, och definitivt inte lika praktiskt.

Jag frågade efter cykelreparatörsrekommendationer i LysKOM, och fick bland annat svaret att Västra Cykelaffären skulle vara bra, så jag provade den.

Mycket bra bemötande, gav ett kompetent intryck. Fixade justeringen till nästa dag, och tog 230:- för arbetet (materialkostnad oräknad) vilket jag tycker är fullt rimligt. Dit går jag gärna igen!

Både han och jag var överens om att min Nishiki som är nått år gammal egentligen inte alls borde vara så sliten som den är, med rostiga skruvar, rostigt sadelfäste, sliten krans och kedja och en pakethållare som tappat sin svarta färg. Man borde väl egentligen reklamera.


Luxury Problems

Published: 2008-10-18 11:26 UTC. Tags: humor
  • My 20" 1600x1200 LCD at home feels very small, because I've got 24"+19" at work (dual screen setups ROCKS when programming!)
  • The lever for regulating the slope of my home office chair is on the opposite side compared to the one of office office chair.

A new Toy

Published: 2008-10-14 16:51 UTC. Tags: software

The Logistics Nerd

Published: 2008-09-29 11:21 UTC. Tags: humor

My girlfriend has been studying logistics the past 2½ years. This is beginning to get noticeable. Today I asked her to send me a shopping list for some dinner ingredients via e-mail.

The subject of the e-mail is material requirement plan...

Sheep humor ...



Published: 2008-09-26 17:13 UTC. Tags: general

Var och hämtade 13 bitar sushi på Nori Sushibar idag.

Ofantligt gott och minst sagt beroendeframkallande!


Fårmidabel humor

Published: 2008-09-23 19:31 UTC. Tags: humor in-swedish

Jag och sambon går promenad. Vi passerar en fårhage.

  • Sambon: Tror du de kör Fårmel Ett?
  • Jag: Nej, Formula Fård.
  • Sambon: Vad får du allt ifrån?
  • Jag: Vet inte. Snygg fårm på den där jackan.

Really sheep humor.

Påminner lite om ett skämt min vän Robert kom på en gång.

  • Vad heter fårens konung?
  • ??
  • Fårao.

Feed Fixed. Site Todo.

Published: 2008-09-22 19:00 UTC. Tags: django

Yesterday evening was one of those frantic hacker moments when you really really want to get the piece of software you've been working on for a while up and running, even if it's getting really late and you know you have to get up early the next morning. The broken feed, showing pseudo-HTML to the user, was one effect of that. Has now been fixed by use of the safe filter tag.

One interesting thing is that Google Reader thought all my entries were new, even though I made sure the timestamps in the RSS were identical. Might have had to do with the change of the GUID-values in the feed, from a $£@¡$£!! plone probably archetypes-hexadecimal thingie into the KISS solution - the URL to the entry. Planet Lysator seems to have behaved correctly, displaying only the new entry.

Lot's of stuff still on the todo for this site, for example:

  • Better Navigation.
  • Catchier frontpage.
  • Photo album integrated with rest of site, to make it easy to link to photos from other kinds of content. A Photo feed, perhaps?
  • Make code for site available to the world.
  • A blog entry on how I converted from Plone to Django. Make conversion code available to the world - Done.
  • Some kind of more or less automatic moderation of comments, I've already received some spammy ones.
  • Preview in edit-mode when writing blog and CMS/content entries in reST.
  • A blog entry on why I've switched from Plone to Django..

All of this have to wait for another day, because now is time to sleep.


Bye Bye Plone, Hello Django!

Published: 2008-09-21 20:18 UTC. Tags: plone django noplone

This is the first post on the rewritten, now running a set of django apps instead of Plone. Yay!

Now let's hope everything works as I want them to. More info follows.


Post-Vacation Coding

Published: 2008-08-12 16:57 UTC. Tags: software humor

I came back to work yesterday after four weeks of vacation. Not doing much coding during such a long period of time has its effects. Here's the first line of a shell script I wrote yesterday afternoon:



Published: 2008-08-05 19:06 UTC. Tags: general in-swedish

I måndags satt jag i en kanot halvfull med regnvatten iförd vadarstövlar, tre lager kläder innanför regnstället och ytterst en flytväst. Kanoten befann sig mellan två rader av i en dyig sjöbotten nedbankade pålar och jag ägnade mig åt att med hjälp av bland annat en i tre platspåsar insvept sladdlös skruvdragare borra hål i och montera reglar mellan nämnda pålar. Regnet öste ned, uppifrån, bakifrån, framifrån, från sidan och dessutom skvätte det in i ansiktet på mig när regnet träffade reglarna och studsade därifrån in under kepsen. Dessutom blåste det. Jättemycket.

Redan ett par timmar tidigare hade jag noterat att höger vadarstövel hade ett hål, så min högra fot var sjöblöt.

Vad som var värre var att jag någonstans där insåg att jag dessutom hade roligt, och med den insikten följde också insikten att jag definitivt passerat gränsen för grov galenskap :-).


Plötsliga parkettgolv

Published: 2008-07-23 10:53 UTC. Tags: general in-swedish

Parkettgolv?Vi håller på och bygger en brygga till släktens sommarhus. Det blir en kombinerad pål- och flytbrygga, och om jag orkar kanske jag skriver nått mer om det senare - det är mycket att tänka på.. och mycket att handla!

I fredags var jag och min far på Byggmax i Jönköping för att handla bland annat reglar, balkskor och spik. Vi plockade på oss det vi skulle ha och så betalade jag. Kostade ungefär 7000. Jag tänkte inte så mycket på det då jag vet att bryggan är budgeterad till ungefär 30000.

På vägen därifrån tog jag upp kvittot och tittade igenom det, och blev mycket förvånad då det visar sig att jag enligt kvittot handlat 7 förpackningar parkettgolv á 760 SEK, inte 7 förpackningar ankarspik á 47 SEK... det blev till att snabbt vända och få den saken åtgärdad vilket förvisso gick lätt förutom att kassören inte ens frågade om jag ville ha pengarna insatta på kortet utan i stället gav mig nästan 5000 i kontanter. Jag tycker inte om kontanter.

Av detta lär jag mig att jag bör hålla lite koll på vad saker kostar när jag betalar..


Upgrading Wordpress from 2.0.6 -> 2.5 - not a smooth experience

Published: 2008-05-13 18:40 UTC. Tags: software wordpress

My girlfriend runs a wordpress-powered blog. Yesterday, she decided to upgrade it from 2.0.6 to 2.5. A good decision given the fact that the old version had a known security vulnerability.

Most of the upgrade went fine, but it left her with a mysterious trouble - blog entries, links etc. could all be edited, but trying to edit existing and published pages rendered an error message, "You are not allowed to edit this page."

After some serious head-scratching, I found this post that led to this forum post, that gave a rather mysterious hint on what needed to be done to fix the problem. It turns out that the upgrade had failed to update the row with option_name = wp_user_roles in the wp_options table.

So, the following SQL statement fixed the problem for me:

UPDATE wp_options set option_value = 'a:5:{s:13:"administrator";a:2:{s:4:"name";s:13:"Administrator";s:12:"capabilities";a:47:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;}}s:6:"editor";a:2:{s:4:"name";s:6:"Editor";s:12:"capabilities";a:34:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;}}s:6:"author";a:2:{s:4:"name";s:6:"Author";s:12:"capabilities";a:10:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:22:"delete_published_posts";b:1;}}s:11:"contributor";a:2:{s:4:"name";s:11:"Contributor";s:12:"capabilities";a:5:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;}}s:10:"subscriber";a:2:{s:4:"name";s:10:"Subscriber";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}' where option_name = 'wp_user_roles';

Your mileage may vary. Don't do this at home if you don't know what you're doing, kids.

Now I'll have to go and do something about a serious itch on my left leg caused by having to read so much PHP code.


Between Jobs

Published: 2008-05-12 18:24 UTC. Tags: general

After five years at Cendio, it's time for a change. From 2008-07-01 I'll be working at Opera Software, with the Opera Mini browser.


Plone and 256Mb - forget that

Published: 2008-05-05 18:00 UTC. Tags: plone

Quoting myself from the other day:

''It actually seems like Plone 2.5 can run on a machine with only 256Mb of memory with acceptable performance as long as the CPU is fast.''

Very wrong for my instance. At least if there is anything else running on the machine, in this case a mail server (Postfix+Dovecot). Sloooow..

Resized my slice from 256M to 512M. Seems to work better now.


OpenLDAP - loglevel none

Published: 2008-05-05 10:37 UTC. Tags: LDAP

For a long time, I have wanted to know which loglevel to set in OpenLDAP's slapd.conf to get just errors in the log. For many years, I have obviously been too quick in reading the manual page slapd.conf(5).

The answer is loglevel none, which I find less than obvious..

Today, I also learned that if the LDAP Users and Groups module in Webmin says No structuralObjectClass operational attribute, that may mean that you're trying to add an object with two structural object classes set.


Site moved to new host

Published: 2008-05-02 17:04 UTC. Tags: general

I just moved this site to a new host, for two reasons - the first being that it is boring to keep physical hardware running, so I'm now running on a Xen slice I rent from Slicehost. The second reason is to be announced soon..

It actually seems like Plone 2.5 can run on a machine with only 256Mb of memory with acceptable performance as long as the CPU is fast.

Please tell me if you find something that doesn't work as intended.


Review: Antec P182 with Seasonic S12

Published: 2008-03-16 00:20 UTC. Tags: hardware review

A while ago, I decided to buy a new computer. I had three main requirements:

  • It had to be faster than my previous computer. As the old one was more than three years old, this requirement would not be hard to fulfil :-).
  • It had to be quiet. Very important!
  • It had to be reasonably power efficient. I try to keep my energy consumption down.

I've tested various ways of getting a quiet computer over the years, the most famous one being the beautiful red box described here. This time, I did however go for a more standard solution that involved less red paint..


After some research on quiet computer cases and power supplies, I ordered the following stuff.

Case Antec P182
Power supply
Seasonic S12-II, 380W
MSI K9AG Neo2 Digital
2x SAMSUNG HD321KJ in a Software RAID1 configuration
AMD Athlon X2 BE-2400 45W BOXED
2x 1GB DDR2 800MHz

The Antec P182

The first thing I noticed about this case when I collected it at the post office was that it is very heavy. Another thing I noticed when taking it out of its cardboard box was that when you knock on one of the sides of it, there's much less sound than when knocking on the side of a standard case. This comes from the fact that the sides are covered in plastic instead of being just steel, and I think it contributes much to keeping the computer quiet, as vibrations are less likely to travel through the sides of the case.

Opening up the case

Antec P182 left sideOpening up the case, a rather interesting construction is revealed. In the picture to the left, I've removed the lower drive bay, which normally sits in the area marked A. The power supply is mounted in the area marked B.

What is very interesting is that Antec has chosen to divide the flow of air into two distinct flow paths. There is the lower airpath where air flows from the front, through an air filter that can be easily removed for cleaning, then through the lower drive bay, via a 12cm fan that can be individually controlled via a speed controller attached to a small cable, and then finally through the power supply.

Then there's the upper airpath where air flows from the front, through a second washable air filter, into the upper part of the box exiting through one of two 12cm individually controllable 12cm fans. The two top fans are controlled by external fan switches at the back of the case, which allows adjustments of speed without opening the case. For my configuration, I run the back fan at its lowest speed. I have not connected the top fan at all.

Separating the air that flows through the power supply from the air in the rest of the box ensures that the power supply's fan doesn't have to run at top speed to move air that is hot because the processor or graphics card is producing heat.  This is a problem seen in many other cases - even when there's a quiet 12cm fan in the case that can move the hot air out of the box, the power supply fan runs at high speed because its heat sensor feels the hot air that passes through the PSU and acts accordingly, causing unnecessary noise. With the P182's solution, this doesn't happen - the power supply's heat sensor only detects the heat generated by the harddrives and the power supply itself.

The area marked with C is a special plastic slider that ensures that as little air as possible travels between the upper and the lower air paths, while still allowing cables to be run from the power supply up to the motherboard and other parts requiring power, and also down to the lower drive bay to power the hard drives.

The right side of the case

Antec P182 right sideOn the other side of the case, we see another neat feature - cable ties to keep cables running from the power supply to the motherboard secured.

Attention to detail

Antec P182, lower drive bayThere's a lot of smart solutions in this box. Here's one example - the ring used to pull out the lower and upper drive bays have a small plastic snap that keeps it down when not used - avoiding any chance of it vibrating causing noise!


Overall, I'm extremely happy with this case. It's high quality, and it's very very quiet! If you're willing to pay for quality, I definitely recommend this case.

Seasonic S12-II

The Antec P182 is sold without power supply unit (PSU). That gives the owner flexibility in finding a PSU that fits with the requirements.

Seasonic S12For my new computer, I choose a 380W Seasonic S12-II based on recommendations in a local forum. There are many power supplies specifying that the fan is temperature controlled, but in reality, many PSUs have really crappy fan controllers that keep the fan at higher speed than necessary, causing noise.

Like the Antec P182, the S12 has an aura of quality. It has a nice black finish, and the outgoing cables are neatly organized.

The PSU claims that it is very power efficient, which means that a lot of the energy going into the PSU actually comes out. This is not the case with cheap PSU's, where a lot of energy is wasted in the conversion from high voltage AC to 12 and 5V DC. The energy wasted generates heat, which has to be ventilated. So, an efficient PSU not only saves your electric bill, it also makes your computer more quiet! Seasonic S12, smart connector
Here's a really nice feature - the 12V standard connectors for connecting for example old harddrives, DVD readers, etc, are of a special make that are much easier to disconnect.


Seasonic S12-II is a PSU I can recommend.

You learn something new every day. Today, I learnt some OpenOffice

Published: 2008-02-25 21:40 UTC. Tags: software

Today, I found out that different paragraph styles in OpenOffice can have different languages, which is the reason why the Tools->Options->Language->Languages setting flips back when you change it. You need to modify the language in the popup that appears when you press F11. Right-click on a paragraph style and choose Modify, then go to the Font tab. There it is!

This link is useful.


Dear SonyEricsson...

Published: 2008-02-24 21:55 UTC. Tags: hardware

Dear SonyEricsson.

May I please suggest that you test your applications, for example the SMS and Phonebook applications, with a realistic amount of data added to their databases. This will lead to less frustrations among your customers because they won't have to wait for ages each time they want to read an SMS or find a contact in their phonebook. , It may even lead to customers buying another SonyEricsson the next time they need a new phone!

Best Regards,
\EF - Unhappy user of SonyEricsson m600i.

See also: Sony Ericsson M600i - First Impressions, last?