<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0">

    <channel>

        <title>Blog</title>
        <link>http://bblank.thinkmo.de/blog</link>
        <description></description>

        <generator>basesyndication</generator>
        <!-- TODO
        <lastBuildDate>Mon, 30 Sep 2002 11:00:00 GMT</lastBuildDate>
        <copyright>Copyright 1997-2002 Dave Winer</copyright>
        <docs>http://backend.userland.com/rss</docs>
        <category domain="Syndic8">1765</category>
        <managingEditor>dave@userland.com</managingEditor>
        <webMaster>dave@userland.com</webMaster>
        -->

        <!-- TODO: Should there be an individual image associatable with each
        Weblog object?  I think so... -->
        <image>
            <title>Blog</title>
            <url>http://bblank.thinkmo.de/logo.png</url>
            <link>http://bblank.thinkmo.de/blog</link>
        </image>

        
            <item>
                <title>Booting Debian via AoE (ATA over Ethernet) and PXE</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2012/04/07/booting-debian-via-aoe-and-pxe</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2012/04/07/booting-debian-via-aoe-and-pxe</link>
                <description>&lt;p&gt;AoE is one of the protocols supported by Linux to access storage via network.
It uses plain Ethernet for communication and includes a discovery mechanism to find all available targets.
I use it to provide disk space to VMs running on different machines.&lt;/p&gt;
&lt;p&gt;Next step is to boot via AoE.
It is no real problem to use AoE in running systems.
However with some help it is even possible to actually boot disk-less machines via AoE.
The PXE implementation iPXE provides the AoE support to actually boot from.
I will describe the necessary parts.&lt;/p&gt;
&lt;div class="section" id="setup-vblade"&gt;
&lt;h3&gt;Setup vblade&lt;/h3&gt;
&lt;p&gt;The AoE target used it vblade.&lt;/p&gt;
&lt;p&gt;vblade needs access to raw sockets.
As I prefer to not have run anything as root if it is not necessary,
I use filesystem capabilities to allow it access to the network.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
setcap cap_net_raw+ep /usr/sbin/vblade
&lt;/pre&gt;
&lt;p&gt;vblade gets the mac address of the initiator, the shelf and slot number, the network device and the block device.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
/usr/sbin/vblade -m $mac 0 0 eth0 $dev
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="setup-a-tftp-server-and-ipxe"&gt;
&lt;h3&gt;Setup a tftp server and iPXE&lt;/h3&gt;
&lt;pre class="literal-block"&gt;
apt-get install atftpd ipxe
ln -s /usr/lib/ipxe/undionly.kpxe /var/lib/tftpboot
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="setup-isc-dhcpd"&gt;
&lt;h3&gt;Setup ISC dhcpd&lt;/h3&gt;
&lt;p&gt;The dhcp server needs to be configured.
It needs to hand out two distinct parameter sets.
The first is used to chain-load iPXE into the normal PXE stack.
The second is for iPXE and sets the root path to the AoE device.
They are selected on the iPXE marker in the request.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
if exists user-class and option user-class = &amp;quot;iPXE&amp;quot; {
  filename &amp;quot;&amp;quot;;
  option root-path &amp;quot;aoe:e0.0&amp;quot;;
} else {
  filename &amp;quot;undionly.kpxe&amp;quot;;
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="support-aoe-via-initramfs-tools"&gt;
&lt;h3&gt;Support AoE via initramfs-tools&lt;/h3&gt;
&lt;p&gt;The initramfs needs to initialize AoE support.
It needs to enable the network device used for communication with the AoE server and wait until it is up.
After that it needs to load the aoe module and run aoe-discover.
We should have all devices now.&lt;/p&gt;
&lt;p&gt;The root device can now be used like any other normal device.
After the AoE device is initialized, it can be found via UUID and all the other ways.
So no further modifications are necessary over the usage of local disks.
The initramfs finds the device as usual and boots from it.&lt;/p&gt;
&lt;p&gt;The initramfs support is still a prototyp, but seems to work.
For initramfs-tools it needs a hook to include all necessary stuff in the initramfs and a script to actually do the work.
Both are shown here.&lt;/p&gt;
&lt;p&gt;/etc/initramfs-tools/hooks/aoe:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
#!/bin/sh

case $1 in
prereqs)
  echo &amp;quot;udev&amp;quot;
  exit 0
  ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /sbin/aoe-discover

manual_add_modules aoe
&lt;/pre&gt;
&lt;p&gt;/etc/initramfs-tools/scripts/local-top/aoe:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
#!/bin/sh

case $1 in
prereqs)
  echo &amp;quot;udev&amp;quot;
  exit 0
  ;;
esac

ifconfig eth0 up
sleep 10
modprobe aoe
aoe-discover
udevadm settle --timeout=30
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="problems"&gt;
&lt;h3&gt;Problems&lt;/h3&gt;
&lt;p&gt;Not all parts of this works 100%.
Some parts works not for all hardware.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;My old notebook is not able to run Linux with this setup.
grub loads the kernel via AoE and nothing comes later.&lt;/li&gt;
&lt;li&gt;The network may need more time. Especially in large environments with spanning tree enabled, it may need half a minute until any packets will flow.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of the problems can be addressed later.
Some can't.&lt;/p&gt;
&lt;/div&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>debian</category>
                
                
                    <category>linux</category>
                

                <pubDate>Sat, 07 Apr 2012 12:35:00 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>Magic Lantern on EOS 500D</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2011/12/20/magic-lantern-on-eos-500d</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2011/12/20/magic-lantern-on-eos-500d</link>
                <description>&lt;p&gt;&lt;a class="reference external" href="http://magiclantern.wikia.com/wiki/Magic_Lantern_Firmware_Wiki"&gt;Magic Lantern&lt;/a&gt; is a firmware extension for several video capable Canon DSLR cameras.
The (not longer) current release 11.11.11 of the &lt;a class="reference external" href="http://magiclantern.wikia.com/wiki/Unified"&gt;unified branch&lt;/a&gt; works on 500D and most newer models except 5D Mk2.&lt;/p&gt;
&lt;p&gt;The installation on my 500D was pretty easy.
The camera needs the correct firmware installed (1.1.1),
otherwise Magic Lantern will refuse to run.
It needs one modification to the camera,
a debugging setting to load the system from a SD card.
The software is then loaded from a specially prepared SD-card every time the camera boots.&lt;/p&gt;
&lt;p&gt;Magic Lantern includes a lot of nice extensions for video and liveview mode.
My favorites are histogram overlay, edge detection and exposure display.
The histogram overlay shows the histogram in different modes (RGB, luma) of the currently displayed view.
Edge detection can be used to find the focus via the liveview output.
However a lot more features are available.&lt;/p&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>photo</category>
                

                <pubDate>Tue, 20 Dec 2011 16:45:00 +0100</pubDate>

                
            </item>
        
        
            <item>
                <title>Linux 3.0 and Xen</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2011/06/23/linux-3.0-and-xen</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2011/06/23/linux-3.0-and-xen</link>
                <description>&lt;p&gt;It took a long time to get all the parts of the Xen support into the Linux kernel.
While rudimentary Dom0-support was available since 2.6.38, support for device backends were missing.
It was possible to replace this backend with a userspace implementation included in qemu, but I never tested that.&lt;/p&gt;
&lt;p&gt;With Linux 3.0, both the traditional block backend and the network backend are available.
They are already enabled in the current 3.0-rc3/-rc4 packages in experimental,
so the packages can be used as Dom0 and run guests.
Right now the backend modules are not loaded, so this still needs some work.
Neither the init scripts loads them, because the names where in flux the last time I laid hand on it,
nor does the kernel themself expose enough information to load them via udev.
I think using udev to load the modules is the way to go.&lt;/p&gt;
&lt;p&gt;This step marks the end of a five year journey.
Around 2.6.16 the Xen people started to stay really close to Linux upstream.
With the 2.6.18 releas this stopped and the tree was pushed in different states into Debian Etch and RHEL 5.
After that, Xen upstream ceased work on newer versions completely,
only changes to the now old 2.6.18 tree where done.
SuSE started a forward port of the old code base to newer kernel versions and Debian Lenny released with such a patched 2.6.26.
Around that time, minimal support for DomU on i386 using paravirt showed up and Lenny had two different kernels with Xen support.
Since 2.6.28 this support was mature and works rather flawless since.
Somehow after that, a new port of the Dom0 support, now using paravirt, showed up.
This tree based on 2.6.32 is released with Debian Squeeze.
After several more rounds of redefining and polishing it is now mostly merged into the core kernel.&lt;/p&gt;
&lt;p&gt;I don't know what the future brings.
We have two virtualization systems supported by Linux now.
The first is KVM that converts the kernel into a hypervisor and runs systems with help of the hardware virtualization.
The later one is Xen that runs under a standalone hypervisor and supports both para- and hardware virtualization.
Both works, KVM is easier to use and even works on current System z hardware.
It can be used by any user with hopefully enough margin of security between them.
Xen's home is more suited for servers, where you don't have users at all.
Both have advantages and disadvantages, so everyone have to decide what he needs, there is no &amp;quot;one size fits all&amp;quot;.&lt;/p&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>xen</category>
                
                
                    <category>debian</category>
                

                <pubDate>Thu, 23 Jun 2011 18:35:00 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>New software: python-dvdvideo</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2010/08/29/new-software-python-dvdvideo</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2010/08/29/new-software-python-dvdvideo</link>
                <description>&lt;p&gt;After a long time, I decided to write again.
I decided to start with software I wrote for my own usage that could be usefull for other people.
I'll start with python-dvdvideo, a DVD-Video reader written in Python 3, and the reference tool dvd-video-backup-image, a generic DVD-Video dumper.
Lets see, if this blog will see more postings in the future.&lt;/p&gt;
&lt;div class="section" id="intention"&gt;
&lt;h3&gt;Intention&lt;/h3&gt;
&lt;p&gt;I started to write this software, because libdvdread was often unable to decipher my newly purchased video DVDs.
libdvdread expects a rather valid structure of the filesystem and other metadata on the disk.
It will forcefully bail out on several error conditions.
So I often ended patching libdvdread to make dvdbackup able to read the new disks.&lt;/p&gt;
&lt;p&gt;Usually there are two ways to create backups of such DVDs, as files or complete images.
Dumping them as files have large problems if there are certain defects in the filesystem, like some space is referenced in several titlesets.
I have a disk that produces 25GiB of output during such a dump.
So the less problematic way to do that is to dump the complete image.
That is the way I used in the tool I built on top of this.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="parts"&gt;
&lt;h3&gt;Parts&lt;/h3&gt;
&lt;p&gt;The software is devided into several parts.
First a small UDF reader.
On top of this comes a DVD video reader.
It makes use of libdvdcss wrapper.
All of this is used to implement a small tool to dump whole images.
I will describe this parts here.&lt;/p&gt;
&lt;div class="section" id="udf-reader"&gt;
&lt;h4&gt;UDF reader&lt;/h4&gt;
&lt;p&gt;The UDF reader implements a minimal set of features.
I implemented only the stuff I found as needed and used in the available DVDs.
This reader allows to read the lowlevel UDF, used as base of all video DVDs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="dvd-video-reader"&gt;
&lt;h4&gt;DVD video reader&lt;/h4&gt;
&lt;p&gt;The dvd video reader uses the UDF reader to get the necessary information from the disk.
Again this reader is quiet smallish.
It only trusts the UDF for the starts of titlesets and expects that anything else is listed in the info files.
This allows to read even discs with broken filesystems, which are really common.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="libdvdcss-wrapper"&gt;
&lt;h4&gt;libdvdcss wrapper&lt;/h4&gt;
&lt;p&gt;The libdvdcss wrapper is implemented using ctypes.
The ctypes library allows easy access to functions defines in shared object.
The library allows calling of the functions and maps arguments and return values to the Python datatypes.
This wrapper allows me to read also encrypted DVDs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="image-dumper"&gt;
&lt;h4&gt;Image dumper&lt;/h4&gt;
&lt;p&gt;This tool allows to dump a encrypted video DVD into a file.
It tries to detect encrypted (video/vob files) and unencrypted (info files, otherwise used space) parts of the disk.
This way it is able to dump anything, as long as it can read the filesystem and info files.
However, some discs contains overlapping areas, which can't be that easily deguised.&lt;/p&gt;
&lt;p&gt;The tool includes a small conflict resolver that handles overlapping parts.
It uses a set of rules to allow some types to coexist and some to be modified.
On of the rules relabels things included in an info files but also a title vob as always unencrypted.
With this resolver, most of the problems can be handled and we get a playable result.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="license-and-distribution"&gt;
&lt;h3&gt;License and distribution&lt;/h3&gt;
&lt;p&gt;This package is licensed GPL 3 or later.
It is for new distributed via &lt;a class="reference external" href="git://git.debian.org/users/waldi/python-dvdvideo.git"&gt;Alioth&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This tool allows me to dump all video DVDs I got my hands on in the last time.
It allows me to watch the videos on my notebook that have no optical disc reader on its own.
Maybe someone may need such a tool also.&lt;/p&gt;
&lt;/div&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>dvd</category>
                
                
                    <category>debian</category>
                
                
                    <category>software</category>
                

                <pubDate>Sun, 29 Aug 2010 19:20:44 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>USA-Urlaub: 5. Tag (Mt. Tabor)</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2009/09/29/usa-urlaub-5.-tag</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2009/09/29/usa-urlaub-5.-tag</link>
                <description>&lt;p&gt;Heute habe ich erst mal ein Auto besorgt und dann die neue Unterkunft für die nächsten Tage gesucht.&lt;/p&gt;
&lt;p&gt;Irgendwie hatte ich danach nich gerade viel Lust, also bin ich mal auf den nächsten Vulkankrater, den &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Mount_Tabor"&gt;Mount Tabor&lt;/a&gt;, gelaufen. Dieser ist ein bewaldeter Hügel mitten in der Stadt und wohl auch ein beliebtes Ziel der Radfahrer.&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="/fotos/usa-urlaub/mount-tabor/img_0965.jpg/image_view_fullscreen"&gt;&lt;img alt="/fotos/usa-urlaub/mount-tabor/img_0695.jpg/image_mini" src="/fotos/usa-urlaub/mount-tabor/img_0695.jpg/image_mini" /&gt;&lt;/a&gt;
&lt;p class="caption"&gt;Harvey W. Scott&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;An ein paar Stellen sieht man ziemlich weit.&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="/fotos/usa-urlaub/mount-tabor/img_0968.jpg/image_view_fullscreen"&gt;&lt;img alt="/fotos/usa-urlaub/mount-tabor/img_0698.jpg/image_mini" src="/fotos/usa-urlaub/mount-tabor/img_0698.jpg/image_mini" /&gt;&lt;/a&gt;
&lt;p class="caption"&gt;Downtown vom Mount Tabor&lt;/p&gt;
&lt;/div&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="/fotos/usa-urlaub/mount-tabor/img_0969.jpg/image_view_fullscreen"&gt;&lt;img alt="/fotos/usa-urlaub/mount-tabor/img_0699.jpg/image_mini" src="/fotos/usa-urlaub/mount-tabor/img_0699.jpg/image_mini" /&gt;&lt;/a&gt;
&lt;p class="caption"&gt;Mount Hood&lt;/p&gt;
&lt;/div&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>portland</category>
                
                
                    <category>usa</category>
                

                <pubDate>Tue, 29 Sep 2009 19:20:44 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>USA-Urlaub: 1. Tag (Konferenz)</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2009/09/29/usa-urlaub-1.-tag</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2009/09/29/usa-urlaub-1.-tag</link>
                <description>&lt;p&gt;Die komplett unpassend gestellte inner Uhr hat mich um 0400 aus dem Schlaf gerissen. Meinem Kollegen im Zimmer ging es genau so. Es war also etwas kollektives Dösen angesagt. Der Sonnenaufgang bescherte uns das folgende Bild.&lt;/p&gt;
&lt;div class="figure align-right"&gt;
&lt;a class="reference external image-reference" href="/fotos/usa-urlaub/konferenz/img_0681.jpg/image_view_fullscreen"&gt;&lt;img alt="/fotos/usa-urlaub/konferenz/img_0681.jpg/image_mini" src="/fotos/usa-urlaub/konferenz/img_0681.jpg/image_mini" /&gt;&lt;/a&gt;
&lt;p class="caption"&gt;Sonnenaufgang in Portland mit Mount Hood&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Bis auf die zu laute Klimaanlage war das dann eine ganz normale Konferenz. Es gab BoFs und Vorträge zu allen möglichen Themen. Der erste BoF war einer der wichtigsten, es ging um Linux Packaging in den Distributionen und wie man das ein wenig besser vernetzen kann.&lt;/p&gt;
&lt;p&gt;Abends gab es einen Empfang zusammen mit den Besuchern der LinuxCon in einem Meeresfrüchterestaurant. Das Essen war super und die Unterhaltungen auch. Ich durfte jemandem dann noch erklären, was es mit dem Oktoberfest auf sich hat.&lt;/p&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>usa</category>
                

                <pubDate>Tue, 29 Sep 2009 18:30:00 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>USA-Urlaub: Erste Eindrücke</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2009/09/24/usa-urlaub-erste-eindrucke</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2009/09/24/usa-urlaub-erste-eindrucke</link>
                <description>&lt;p&gt;Ich habe die Möglichkeit erhalten, die &lt;a class="reference external" href="http://linuxplumbersconf.org/2009/"&gt;Linux Plumbers Conf&lt;/a&gt; in Portland, Oregon, Vereinigte Staaten zu besuchen. Ich lasse mir dann natürlich nicht die Möglichkeit entgehen, noch etwas Urlaub in dem mir bis jetzt nur aus Erzählungen bekannten Umfeld zu machen.&lt;/p&gt;
&lt;p&gt;Mein Flug ging über Atlanta und ein paar Sachen fallen mir dann schon dort auf.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Alles ist groß. Schon der Weg vom Gate zur Passkontrolle sind ein paar hundert Meter. Und bis zum Gate an welchem mein Anschlussflug geht, bin ich noch mal über 10 Minuten unterwegs, inklusive einer Fahrt mit einer automatischen Bahn.&lt;/li&gt;
&lt;li&gt;Die Amis scheinen eine Aversion gegen Treppen zu haben. Im ganzen Flughafen Atlanta ist mir gerade mal eine Treppe begegnet. Sonst gab es noch welche an den Notausgängen oder sie waren nur für Mitarbeiter. In Portland gab es dann keine einzige. Es gibt nur Aufzüge und Rolltreppen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Um 2200 Uhr (0700 Uhr nach der inneren Uhr) war ich dann im Hotel und konnte dann endlich etwas schlafen.&lt;/p&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>usa</category>
                

                <pubDate>Thu, 24 Sep 2009 20:22:57 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>Almighty root</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2009/04/04/almighty-root</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2009/04/04/almighty-root</link>
                <description>&lt;p&gt;I was asked to take a look at a machine where &lt;tt class="docutils literal"&gt;aptitude&lt;/tt&gt; don't even want to do the upgrade to etch.
A first inspection shows some weird repositories in the source.list file and many daemons noone ever should use on that machine.
I was able to do the upgrade with &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;apt-get&lt;/span&gt;&lt;/tt&gt; then.&lt;/p&gt;
&lt;p&gt;After some time I got asked over modifications in &lt;tt class="docutils literal"&gt;/etc/exports&lt;/tt&gt;.
It basically included the following content:&lt;a class="footnote-reference" href="#id2" id="id1"&gt;[1]&lt;/a&gt;&lt;/p&gt;
&lt;pre class="literal-block"&gt;
/     *(rw,async,no_root_squash)
/home *(rw,async,no_root_squash,nohide)
/usr  *(rw,async,no_root_squash,nohide)
/var  *(rw,async,no_root_squash,nohide)
&lt;/pre&gt;
&lt;table class="docutils footnote" frame="void" id="id2" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="#id1"&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;For those who don't speak NFS: This exports the specified filesystems (&lt;tt class="docutils literal"&gt;/&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;/home&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;/usr&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;/var&lt;/tt&gt;) to everyone, and accepts whatever the client system say.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The machine was taked out of service immediately.
We'll have no chance to answer the question whether this was silliness or intend.&lt;/p&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>debian</category>
                

                <pubDate>Sat, 04 Apr 2009 19:44:14 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>Die Strasse, eine Farbwahl</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2009/04/02/die-strasse-eine-farbwahl</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2009/04/02/die-strasse-eine-farbwahl</link>
                <description>&lt;p&gt;Auf anraten der besten Augenoptikerin bin ich inzwischen glücklicher Besitzer einer Sonnenbrille.
Ausserdem war heute ein schön warmer und sonniger Tag, genau das richtige Wetter um das Motorrad aus dem Winterschlaf zu holen.
Nach etwas gutem Zureden erwachte das Motorrad zu neuem Leben und mit angemessener Schutzkleidung und der abgedunkelten Sicht ging es los.&lt;/p&gt;
&lt;p&gt;Nach einer Weile fiel mir ein Auto mit einer komischen Lakierung auf; es sah aus wie ein Effektlack aus Purpur und Türkis, ähnlich der Wertangabe auf den hohen Euroscheinen.
Nachdem immer mehr Autos diesen Effekt zeigten wurde ich unsicher und nach der nächsten Kurve fing auch die Strasse an in allen Farben zu leuchten.
Mit geöffnetem Visier sah man alles zwar etwas dunkler, aber in der korrekten Farbwahl.
Kaum war es wieder geschlossen zeigt sich die Umgebung und auch der Himmel in allen Spektralfarben.&lt;/p&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>motorrad</category>
                
                
                    <category>brille</category>
                

                <pubDate>Thu, 02 Apr 2009 14:00:14 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>Create version in Genericsetup metadata.xml from setup.py</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2009/03/09/create-version-in-genericsetup-metadata.xml-from-setup.py</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2009/03/09/create-version-in-genericsetup-metadata.xml-from-setup.py</link>
                <description>&lt;p&gt;Today I asked if it is possible to do automatic updates of the version in metadata.xml from the (possible mangled) version from setup.py. Nothing popped up, so I wrote an extension of setuptools which does this.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
import os.path
from distutils import log
from setuptools.command.egg_info import egg_info as _egg_info

class egg_info(_egg_info):
    def run(self):
        _egg_info.run(self)

        version = self.distribution.metadata.version

        for package in self.distribution.packages:
            path = os.path.join(*(package.split('.') + ['profiles', 'default']))
            if os.path.isdir(path):
                metadata_out = os.path.join(path, 'metadata.xml')
                metadata_in = os.path.join(path, 'metadata.xml.in')
                if os.path.exists(metadata_in):
                    log.info('writing %s', metadata_out)
                    d = open(metadata_in, 'r').read().replace('&amp;#64;VERSION&amp;#64;', version)
                    open(metadata_out, 'w').write(d)

setup(
    cmdclass = {'egg_info': egg_info},
    [...]
)
&lt;/pre&gt;
&lt;p&gt;The version is listed with a placeholder in the input file called metadata.xml.in and is replaced during a normal develop call as done by buildout.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
&amp;lt;metadata&amp;gt;
    &amp;lt;version&amp;gt;&amp;#64;VERSION&amp;#64;&amp;lt;/version&amp;gt;
&amp;lt;/metadata&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;:
This is evil. metadata.xml should list the the config/profile version, not the code version.&lt;/p&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>plone</category>
                

                <pubDate>Mon, 09 Mar 2009 00:25:00 +0100</pubDate>

                
            </item>
        
        
            <item>
                <title>Einem geschenkten Gaul schaut man nicht ins Maul</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2008/11/16/einem-geschenkten-gaul-schaut-man-nicht-ins-maul</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2008/11/16/einem-geschenkten-gaul-schaut-man-nicht-ins-maul</link>
                <description>&lt;p&gt;Dieses Sprichwort werde ich heute mal großzügig missachten und über das leider relativ nutzlose Geschenk berichten.&lt;/p&gt;
&lt;p&gt;Es begab sich, das &lt;a class="reference external" href="http://www.pollin.de/"&gt;Pollin Electronic&lt;/a&gt; an diesem Wochenend mal wieder die halbjährige Hausmesse stattfinden lies.
Als extra Schmankerl sollte es ein &amp;quot;gratis&amp;quot; Mobiltelefon für jeden Besucher geben.
Dieses entpuppte sich als ein &lt;a class="reference external" href="http://de.lge.com/products/model/detail/mobiltelefone_kp100.jhtml"&gt;LG KP100&lt;/a&gt;, einem nach dem ersten Eindruck brauchbaren Gerät ohne Kamera und sonstigem Schnickschnack, von Vodafon in Verbindung mit einer CallYa-Karte, welche auch sofort auf den Besucher registriert wurde.&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nach dem Auspacken und etwas mit Strom versorgen sollte es ausprobiert werden.
Also die erstbeste - natürlich nicht von Vodafon - SIM-Karte ausgesucht und reingesteckt.
Mehr als ein &amp;quot;mit dir mag ich nicht reden&amp;quot; und der Wahl zwischen Notruf und Unlock wollte es sich mit dieser Karte allerdings nicht entlocken lassen; der leidige &lt;a class="reference external" href="http://de.wikipedia.org/wiki/SIM-Lock"&gt;SIM-Lock&lt;/a&gt; hatte also zugeschlagen.&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Damit ist der Plan dieses Gerät als Zweittelefon für Umgebungen in denen Kameras unerwünscht sind oder falls gerade mal ausversehen der Akku leer ist zunichte gemacht und ich frage mich was ich mit dem Telefon und der zwangsweise auf mich registrierten Karte anstellen soll, für mich haben diese so keinen Wert und sind ein Fall für den Entsorger.&lt;/p&gt;
&lt;p&gt;Laut der Aufschrift hat die Karte ein Guthaben von 10EUR und sollte für 19,95EUR verkauft werden.
Da das Telefon gelockt ist muss ich davon ausgehen das es mehr Wert ist als dieser Preis, da die Subventionen ja immer als Grund herhalten mussten.&lt;/p&gt;
&lt;p&gt;Aktueller Zustand: Telefon ist gelockt; ich bin sauer.
Jemand der sauer ist wird nicht unbedingt gerne Kunde, wenn nicht unbedingt nötig und da das ganze verschenkt wurde gibt es ja nicht gerade den &amp;quot;Zwang&amp;quot; in Form eines Preisschildes das jetzt zu verwenden.
Hypothetischer Zustand: Telefon ist nicht gelockt, ich bin nicht sauer.
Jemand für den der eine Teil des Geschenks, das Telefon selber, nützlich ist, überlegt sich eher ob der andere Teil, die CallYa-Karte, auch nützlich sein könnte.&lt;/p&gt;
&lt;p&gt;Vodafon kostet diese Aktion für jeden nicht gewonnenen Kunden den Einfauspreis für das Telefon und die vielleicht noch mit dem Kartenguthaben erzeugten Kosten.
Nur durch das erlangen von Neukunden kann daraus Profit geschlagen werden.&lt;/p&gt;
&lt;p&gt;Ich habe den Sinn dieses SIM-Locks nie verstanden.
Was soll hier vor wem beschützt werden?
Das was sind wohl die Subventionen die in die Telefone fliessen.
Beschützt werden müssen diese wohl vor dem Kunden, da dieser sich ein neues Telefon kaufen muss wenn er woanders hingehen will anstatt es einfach mitzunehmen.&lt;/p&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>mobilephone</category>
                

                <pubDate>Sun, 16 Nov 2008 00:17:51 +0100</pubDate>

                
            </item>
        
        
            <item>
                <title>Ubuntu, Ubuntu</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2008/10/10/ubuntu-ubuntu</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2008/10/10/ubuntu-ubuntu</link>
                <description>&lt;p&gt;I was forced to try Ubuntu Hardy in the new university pool.
The setup includes one Linux server dedicated for the pool, one Windows AD for Kerberos authentication, one Windows fileserver with user data and 20 clients.
The clients are new HP machines with a Radeon Xpress 200 card.&lt;/p&gt;
&lt;p&gt;First problem was nasty, the X server turned the display black and then crashed, leaving an unusable console behind.
Even a blacklist of the &lt;tt class="docutils literal"&gt;radeon&lt;/tt&gt; module does not work.
Somehow the Xorg radeon driver loads the module on its own, ignoring the modprobe blacklist.
Only a hard blacklist using &lt;tt class="docutils literal"&gt;install radoen /bin/false&lt;/tt&gt; in the modprobe config was able to prevent this.
Lets hope that the endeavors to remove much priviledges from the X server goes good.&lt;/p&gt;
&lt;p&gt;For the homes two setups was tested:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Homes on the Windows server via cifs, mounted via pam_mount using NTLM password.&lt;/li&gt;
&lt;li&gt;Homes on the Linux server via nfs version 3.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first one just produced an error that some Gnome component was unable to lock &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;~/.ICEauthority&lt;/span&gt;&lt;/tt&gt;.
This could be worked around in the Xsession.
Otherwise it was usable to slow, which may be a problem with the Windows server.&lt;/p&gt;
&lt;p&gt;The later, plus a reinstallation with fglrx, produced first unresponsive OpenOffice.org windows and then a complete unusable Gnome desktop.
I would not completely vote against a problem with fglrx or even a broken installation, but the amount of problems exceeded the threshold.&lt;/p&gt;
&lt;p&gt;Now we will try Lenny and see if this also happens there.
Especially home via nfs is not that uncommon that we can let it broken in a release.&lt;/p&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>debian</category>
                
                
                    <category>ubuntu</category>
                

                <pubDate>Fri, 10 Oct 2008 15:20:00 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>Xen update</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2008/09/28/xen-update</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2008/09/28/xen-update</link>
                <description>&lt;p&gt;I found a machine which is not so ancient and did some tests with Xen on it.&lt;/p&gt;
&lt;div class="section" id="kernels"&gt;
&lt;h3&gt;Kernels&lt;/h3&gt;
&lt;p&gt;First was some tests with different Linux kernels and hypervisors (3.2 and 3.3).
I have to say the overall compatibility got better.
As unpriviledged domain (DomU) only one of the kernels failed, the one from Etch (2.6.18-6-xen-686) on the x86_64 hypervisor because of missing setup code.&lt;/p&gt;
&lt;p&gt;For the operation as priviledged domain (Dom0) it looks not so good.
The 2.6.18 from Xen 3.1 works mostly, the Lenny-targeted 2.6.26 is a little bit picky about the hardware and seems to work better in the 64bit variant, the 2.6.18 from 3.3 is old but rock-stable.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="stub-domain"&gt;
&lt;h3&gt;Stub domain&lt;/h3&gt;
&lt;p&gt;Xen 3.3 adds the possibility to move a the qemu which provides the emulated hardware for full virtualized domains in its own (paravirtualized) domain.
The documentation is not really complete and the whole thing rather fragile.
Error messages from the emulation domain are swallowed and depending on the config it also likes to crash.&lt;/p&gt;
&lt;p&gt;It wants a new service, a filesystem backend, which is implemented in a root process in the dom0, even if it is not needed for operation.
This service is not configurable, exports anything in /exports and allows writing, the code have similar quality then qemu.&lt;/p&gt;
&lt;/div&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>xen</category>
                
                
                    <category>debian</category>
                
                
                    <category>linux</category>
                

                <pubDate>Sun, 28 Sep 2008 23:08:34 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>Smallest UTF32 to UTF8 converter</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2008/09/13/smallest-utf32-to-utf8-converter</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2008/09/13/smallest-utf32-to-utf8-converter</link>
                <description>&lt;p&gt;I found some weird opcodes in the s390 instruction set &lt;a class="reference external" href="/blog/2006/09/18/s390-assembler"&gt;some time ago&lt;/a&gt;.
I finally want to use it as I have access to such a machine.
The result is rather slim:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
.globl cu41
        .type   cu41, &amp;#64;function
cu41:
.L2:
        cu41    %r2,%r4
        ipm     %r1
        srl     %r1,28
        chi     %r1,3
        je      .L2
        ltr     %r1,%r1
        je      .L3
        lcr     %r1,%r1
        lgfr    %r3,%r1
.L3:
        lgr     %r2,%r3
        br      %r14
&lt;/pre&gt;
&lt;p&gt;The &lt;tt class="docutils literal"&gt;cu41&lt;/tt&gt; opcode translates UTF32 to UTF8. Each &amp;quot;parameter&amp;quot; is a register pair &lt;a class="footnote-reference" href="#id2" id="id1"&gt;[1]&lt;/a&gt;, which describes address and length of the buffer. This opcode will return after a not specified number of translated characters. The rest is boiler plate code for condition code checking. The loop makes sure that anything is converted within the function unless another error occured.&lt;/p&gt;
&lt;table class="docutils footnote" frame="void" id="id2" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="#id1"&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;An even pair. gcc is not yet able to allocate such pairs on its own, so it is hardcoded.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>s390</category>
                
                
                    <category>debian</category>
                

                <pubDate>Sat, 13 Sep 2008 12:30:00 +0200</pubDate>

                
            </item>
        
        
            <item>
                <title>PV-GRUB and partitions</title>
                <guid>http://bblank.thinkmo.de/blog/archive/2008/09/13/pv-grub-and-partitions</guid>
                <link>http://bblank.thinkmo.de/blog/archive/2008/09/13/pv-grub-and-partitions</link>
                <description>&lt;p&gt;Xen 3.3 added a tool called PV-GRUB.
It is a GRUB (legacy aka 0.97) built against MiniOS and bootable as a PV kernel.
It works fine on a Xen 3.2.1.&lt;/p&gt;
&lt;p&gt;It is easy to use, I just set this in my config:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
kernel = &amp;quot;/usr/local/lib/xen/boot/pv-grub-x86_64.gz&amp;quot;
extra = &amp;quot;(hd0)/boot/grub/menu.lst&amp;quot;
&lt;/pre&gt;
&lt;p&gt;However it decided to not load my config as defined in the config and simply show me that:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
    GNU GRUB  version 0.97  (524288K lower / 0K upper memory)

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]

grubdom&amp;gt;
&lt;/pre&gt;
&lt;p&gt;The reason is quite easy:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
grubdom&amp;gt; root (hd0)
 Filesystem type unknown, using whole disk
&lt;/pre&gt;
&lt;p&gt;Some debugging later, the reason is &lt;a class="reference external" href="http://lists.xensource.com/archives/html/xen-devel/2008-09/msg00495.html"&gt;known&lt;/a&gt; and fixed.&lt;/p&gt;
&lt;pre class="literal-block"&gt;
grubdom&amp;gt; root (hd0)
 Filesystem type is ext2fs, using whole disk

grubdom&amp;gt; kernel /boot/vmlinuz-2.6.27-rc5-amd64

grubdom&amp;gt; initrd /boot/initrd.img-2.6.27-rc5-amd64

grubdom&amp;gt; boot
block error -1 for op 2
close blk: backend at /local/domain/0/backend/vbd/23/51712
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 2.6.27-rc5-amd64 [...]
[    0.000000] Command line:
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] ACPI in unprivileged domain disabled
[...]
[    0.022093] Booting paravirtualized kernel on Xen
[    0.022101] Xen version: 3.2-1
&lt;/pre&gt;
</description>
                <author>Bastian Blank</author>

                
                    <category>xen</category>
                
                
                    <category>debian</category>
                

                <pubDate>Sat, 13 Sep 2008 11:35:00 +0200</pubDate>

                
            </item>
        

    </channel>
</rss>



