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

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<title type="text">Ben's technical blog</title>
<subtitle type="html"><![CDATA[
Ben's technical blog
]]></subtitle>
<id>http://womble.decadent.org.uk/blog/index.atom</id>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog" />
<link rel="self" type="text/xml" href="http://womble.decadent.org.uk/blog/index.atom" />

<author>
<name>Ben Hutchings</name>
<uri>http://womble.decadent.org.uk/blog/index.atom</uri>
<email>ben@decadent.org.uk</email>
</author>
<rights>Copyright 2007 Ben Hutchings</rights>
<generator uri="http://pyblosxom.sourceforge.net/" version="1.3.2 2/13/2006">
PyBlosxom http://pyblosxom.sourceforge.net/ 1.3.2 2/13/2006
</generator>

<updated>2010-02-28T20:17:25Z</updated>
<!-- icon?  logo?  -->

<entry>
<title type="html">FOSDEM 10 Distribution Developer Room videos now available</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2010/02/28/fosdem-10-distribution-developer-room-videos-now-available</id>
<updated>2010-02-28T20:17:25Z</updated>
<published>2010-02-28T20:17:25Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/fosdem-10-distribution-developer-room-videos-now-available" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;
As previously announced elsewhere,
&lt;a href=&quot;http://video.debian.net/2010/fosdem10/&quot;&gt;video recordings from
the Distribution Developer Rooms at FOSDEM 10&lt;/a&gt; are now available.
All but two talks were recorded and are available in Ogg Theora+Vorbis
format, in low-bandwidth (~300 kbit/s) and high-bandwidth (~1.5
Mbit/s) versions.
&lt;/p&gt;
&lt;p&gt;
These recordings should also be available later on the
&lt;a href=&quot;http://www.youtube.com/fosdemtalks&quot;&gt;FOSDEM YouTube
channel&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Video and audio were recorded by Dominique Dumont (H.1302) and the
DebConf video team (H.1308) with the assistance of some additional
volunteers.  Thanks to everyone involved in recording, and thanks also
to the speakers and the organisers of FOSDEM.
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">This season I have mostly been building kernels</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2010/02/28/this-season-i-have-mostly-been-building-kernels</id>
<updated>2010-02-28T18:11:09Z</updated>
<published>2010-02-28T18:11:09Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/this-season-i-have-mostly-been-building-kernels" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;
  As some people noticed, a driver update to support
  &lt;a href=&quot;http://www.solarflare.com/news/news_press_show.php?release=20090824&quot;&gt;a
  major hardware release&lt;/a&gt; in my day job
  and &lt;a href=&quot;http://article.gmane.org/gmane.linux.kernel/911054&quot;&gt;a
  long series of trivial patches motivated by Debian kernel work&lt;/a&gt;
  combined to make me &lt;a href=&quot;http://lwn.net/Articles/373405/&quot;&gt;joint
  most prolific change author for Linux 2.6.33&lt;/a&gt;.  This was a fluke,
  and 2.6.34 is likely to be fairly quiet for me.
&lt;/p&gt;
&lt;h3&gt;Team work&lt;/h3&gt;
&lt;p&gt;
  Meanwhile the kernel team is still working hard on fixing bugs in
  Linux 2.6.32.  As previously announced, this kernel version will be
  used in both Debian 6.0 &apos;squeeze&apos; and Ubuntu 10.04 LTS.  It is also
  known to be the kernel version for RHEL 6 though this has not been
  officially announced.  If you find a serious bug that was fixed in
  2.6.33 or later, please ask the author to send the fix to
  stable@kernel.org so that it will be included in all these
  distributions.  Note that this happens automatically for commits
  with the line &apos;Cc: stable@kernel.org&apos; in their description.
&lt;/p&gt;
&lt;p&gt;
  We are also continuing to backport new drivers and new hardware
  support in existing drivers into Debian 5.0 &apos;lenny&apos; (stable).
  Missing support for common hardware is considered an important bug
  and suitable for stable updates.  However, if there were major
  changes to a driver before those that added new hardware support, we
  may be unable to produce a backport.  We are not able to carry out
  comprehensive hardware testing and do not want to risk a regression
  existing hardware support.
&lt;/p&gt;
&lt;h3&gt;libata transition - call for testing&lt;/h3&gt;
&lt;p&gt;
  Finally, a major change I have been working on is the transition
  from the old IDE drivers for PATA controllers to new drivers based
  on libata.  The old IDE subsystem is no longer developed and some
  drivers do not properly support all the hardware that their
  libata-based counterparts do.  However, while the IDE drivers
  generate device names beginning with &apos;hd&apos;, libata presents PATA
  devices as SCSI devices and generates device names beginning with
  &apos;sd&apos;.  In a system that already has other SCSI or SCSI-like disks,
  names may change somewhat unpredictably.  Similar problems exist for
  PATA CD/DVD and tape devices.
&lt;/p&gt;
&lt;p&gt;
  So, while the transition doesn&apos;t involve any kernel hacking, it does
  require a complex upgrade process.  Any configuration files that
  refer to IDE or SCSI device names may need to be changed.  It is not
  enough to switch to only SCSI device names, since we cannot know what
  they are in advance and the configuration files should continue to
  work with kernel versions from before and after the transition.  In
  the case of disks we can normally use the partition label or UUID:
  many tools understand the &lt;tt&gt;LABEL=&lt;/tt&gt; and &lt;tt&gt;UUID=&lt;/tt&gt; syntax,
  and for others we can refer to the symlinks under &lt;tt&gt;/dev/disk&lt;/tt&gt;
  created by udev.  In the case of CD/DVD devices, we can use the
  aliases &lt;tt&gt;/dev/cdrom&lt;/tt&gt; etc.  created by udev.  In the case of
  tape devices, however, you&apos;re on your own.
&lt;/p&gt;
&lt;p&gt;
  In experimental, kernel image packages depend on a new package
  &lt;tt&gt;linux-base&lt;/tt&gt; which implements this transition (from
  2.6.33-1~experimental.2; the previous version was broken).  The
  postinst script will prompt you to make changes automatically or
  manually.  It can convert most bootloader configuration files,
  &lt;tt&gt;/etc/fstab&lt;/tt&gt;, the udev CD aliases configuration and
  the &lt;tt&gt;initramfs-tools&lt;/tt&gt; resume partition.  It can also label
  partitions that don&apos;t have a label or UUID.  Please do test it and
  verify that its changes are correct.  All changed configuration
  files are backed up with a suffix of &apos;.old&apos; (or &apos;^old&apos; in one case).
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Debian kernel team at Linux Plumbers Conference</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/09/23/debian-kernel-team-at-linux-plumbers-conference</id>
<updated>2009-09-23T17:34:13Z</updated>
<published>2009-09-23T17:34:13Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/debian-kernel-team-at-linux-plumbers-conference" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;Most of the Debian kernel team members are attending the
&lt;a href=&quot;http://linuxplumbersconf.org/2009/&quot;&gt;Linux
Plumbers Conference&lt;/a&gt; in Portland over the next 3 days.  We&apos;ll be
discussing kernel packaging and integration issues among ourselves
and with upstream and other distributors.~&lt;/p&gt;
&lt;p&gt;You may have noticed that Linux 2.6.31 is out but not yet in sid.
This kernel version contains a large number of known regressions
which should be fixed in subsequent stable updates, so we will wait
for those.  In the mean time we&apos;ve uploaded an update to 2.6.30 which
should resolve the most serious bugs.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">DebConf 9 videos - progress</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/09/13/debconf-9-videos---progress</id>
<updated>2009-09-13T13:14:16Z</updated>
<published>2009-09-13T13:14:16Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/debconf-9-videos---progress" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2009/debconf9/low/&quot;&gt;Low-bandwidth
versions of the recorded talks&lt;/a&gt; are now available.  There are currently
two exceptions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Some of the music for &apos;Welcome to DebConf 9&apos; is licenced as CC BY-NC-ND,
which unfortunately doesn&apos;t allow use in a video.  I&apos;m discussing this
with Marga and hope to upload a new version soon.&lt;/li&gt;
&lt;li&gt;&apos;Debian por dentro&apos; has a piece missing which should be restored from
tape.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While the master versions of all these talks have been checked, not all
the generated low-bandwidth versions have.  Please let us know on
&lt;a href=&quot;mailto:debconf-video@lists.debconf.org&quot;&gt;debconf-video@lists.debconf.org&lt;/a&gt;
if there is something wrong with them other than the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A few of the recordings were unfortunately incomplete; this is indicated
by a fade-in or fade-out&lt;/li&gt;
&lt;li&gt;Some of the recordings are in two pieces&lt;/li&gt;
&lt;li&gt;There were a few drop-outs where you will see a black screen and no sound
for up to a second&lt;/li&gt;
&lt;li&gt;The text on some slides is unreadable; in this case, refer to the file
provided by the speaker or wait for the high-bandwidth version&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The high-bandwidth versions will be uploaded over the next week (slow
connection is slow).&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">DebConf 9 videos</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/09/10/debconf-9-videos</id>
<updated>2009-09-10T03:24:33Z</updated>
<published>2009-09-10T03:24:33Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/debconf-9-videos" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;Several people have been asking after the videos.  My answer to
them is &quot;we release when it&apos;s ready&quot;.&lt;/p&gt;
&lt;p&gt;Seriously, though, I&apos;m sorry about the delay in publishing videos.
There was some miscommunication between me and the sysadmin team at
DebConf which meant I couldn&apos;t take files away with me then.  Peter
Palfrader reassembled the video RAID later, copied the necessary
files onto a single hard disk, and posted that to me.  This disk
apparently got lost on the way, but eventually arrived here last
week after a 3-week journey.&lt;/p&gt;
&lt;p&gt;Over the weekend I dealt with most of the videos that required
editing, and today I was able to resume the transcoding process.
Tomorrow I intend to start uploading again.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Photos from DebConf 9</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/08/11/photos-from-debconf-9</id>
<updated>2009-08-11T11:43:37Z</updated>
<published>2009-08-11T11:43:37Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/photos-from-debconf-9" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;a href=&quot;https://gallery.debconf.org/v/debconf9/benh/&quot;&gt;My photos
from DebConf 9&lt;/a&gt;. These are all taken with my new digital compact
as my film SLR is in need of repair. I&apos;m quite pleased with the results.
</content>
</entry>

<entry>
<title type="html">¡Olé!</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/07/30/olé</id>
<updated>2009-07-29T23:12:46Z</updated>
<published>2009-07-29T23:12:46Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/ol%C3%A9" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/zws5m58RFxI&amp;hl=en&amp;fs=1&amp;&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/zws5m58RFxI&amp;hl=en&amp;fs=1&amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;Geek Flamenco, by Nattie&lt;/embed&gt;&lt;/object&gt;
</content>
</entry>

<entry>
<title type="html">Status of firmware in Debian</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/07/29/status-of-firmware-in-debian</id>
<updated>2009-07-29T16:23:35Z</updated>
<published>2009-07-29T16:23:35Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/status-of-firmware-in-debian" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;&lt;a href=&quot;http://lists.debian.org/debian-project/2009/07/msg00203.html&quot;&gt;A question from AJ&lt;/a&gt;
reminded me that I haven&apos;t said much about the changes to packaging of firmware
in Debian, and in particular the separation of non-free firmware from the Linux
kernel.&lt;/p&gt;
&lt;h3&gt;Linux kernel packages&lt;/h3&gt;
&lt;p&gt;There is an ongoing process upstream to move firmware blobs from drivers
into a firmware/ subdirectory of the source, which is now almost complete.
Since most of this firmware is non-free, we remove it from the source tarballs for
kernel packages but use it to update the firmware-nonfree &quot;source&quot; package.&lt;/p&gt;
&lt;p&gt;We continue to patch some drivers to separate out firmware, and
have been submitting our changes upstream.  Most of these have been accepted
though the DRI drivers matrox, r128 and radeon are notable exceptions.&lt;/p&gt;
&lt;p&gt;A few months ago I attempted to make a new &lt;a
href=&quot;http://wiki.debian.org/KernelFirmwareLicensing#Inventory&quot;&gt;inventory of
the remaining firmware blobs&lt;/a&gt; outside of the firmware/ subdirectory.  I
identified three that should still be addressed.  The &lt;a
href=&quot;http://linux-libre.fsfla.org/&quot;&gt;Linux-libre&lt;/a&gt; project, however, &lt;a
href=&quot;http://www.fsfla.org/svn/fsfla/software/linux-libre/scripts/&quot;&gt;removes
many other constant arrays from the kernel&lt;/a&gt; (and disables the affected
drivers) where I judged the array to be a plausible preferred form of
modification.&lt;/p&gt;
&lt;h3&gt;Firmware packages&lt;/h3&gt;
&lt;p&gt;Much of the non-free firmware removed from the kernel is now available
in the firmware-linux package in the non-free section of the Debian archive.
Starting with Linux 2.6.31, we will build the DFSG-free firmware shipped
with Linux into a package called firmware-linux-free, which will be
recommended by kernel image packages.  The contents of firmware-linux
will be moved to firmware-linux-nonfree and firmware-linux becomes a
meta-package depending on the other two packages.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://packages.debian.org/source/sid/firmware-nonfree&quot;&gt;Many
other firmware images&lt;/a&gt; never distributed with Linux are also
packaged for the benefit of users that require them.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">DebConf</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/06/12/debconf</id>
<updated>2009-06-12T02:14:07Z</updated>
<published>2009-06-12T02:14:07Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/debconf" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;&lt;img src=&quot;http://media.debconf.org/dc9/images/debconf9-going-to.png&quot; alt=&quot;I&apos;m going to DebConf 9&quot;&gt;&lt;/p&gt;
&lt;p&gt;I&apos;ll be involved in the video team again.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Python relicencing</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/04/01/python-relicencing</id>
<updated>2009-04-01T01:51:06Z</updated>
<published>2009-04-01T01:51:06Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/python-relicencing" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;One of the more interesting talks at last week&apos;s PyCon was on the
&lt;a href=&quot;http://pycon.blip.tv/file/1931026/&quot;&gt;new Python licence&lt;/a&gt;.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Busy at PyCon</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/03/26/busy-at-pycon</id>
<updated>2009-03-26T18:58:15Z</updated>
<published>2009-03-26T18:58:15Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/busy-at-pycon" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;This week I&apos;m at PyCon in Chicago, helping to train and supervise
the A/V team in recording the tutorials and talks.  We have a lot of
inexperienced volunteers but they&apos;re learning quickly.  Carl Karsten
(in charge of A/V) and Ryan Verner (another outsider with long
experience from LCA) are organising things.  Ryan, Dave Noble and I
provide technical assistance to the rest of the team.&lt;/p&gt;

&lt;p&gt;I&apos;m also working
on my first Django app, which will be used for reviewing files.  This
is essentially a clone of the excellent work done by Gunnar Wolf and
Damian Viano in Pentabarf.  PyCon doesn&apos;t have a centralised
database so this is a standalone application.  Ryan is now applying
styles to my horribly bare HTML, and I have a short list of bugs to
fix before we ask the video team to start reviewing.&lt;/p&gt;

&lt;p&gt;The tutorials started yesterday and talks wil start tomorrow in
different rooms, so we have to set up all the equipment again and
reconfigure for multiple cameras.  Hopefully by Saturday things
will be running smoothly and I can spend some time in the city.  It
would be a shame to come all this way and stay by the airport for
the entire time!&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Going to PyCon</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/02/15/going-to-pycon</id>
<updated>2009-02-15T17:44:33Z</updated>
<published>2009-02-15T17:44:33Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/going-to-pycon" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;I&apos;m going to &lt;a href=&quot;http://us.pycon.org&quot;&gt;&lt;img src=&quot;http://us.pycon.org/media/2009/public/pycon2009-horizontal-small-140x88.png&quot; alt=&quot;PyCon 2009: Chicago&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Carl Karsten of the PyCon organisers recruited three of us from the
DebConf video team to lead and train the video team at PyCon.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Searching for invalid object code</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2009/01/06/searching-for-invalid-object-code</id>
<updated>2009-01-06T00:53:09Z</updated>
<published>2009-01-06T00:53:09Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/searching-for-invalid-object-code" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;J&amp;eacute;r&amp;eacute;my Bobbio suggested that I should explain how I looked for packages
affected by a compiler bug
(&lt;a href=&quot;http://bugs.debian.org/506713&quot;&gt;Debian bug 506713&lt;/a&gt;;
&lt;a href=&quot;http://gcc.gnu.org/PR38287&quot;&gt;gcc bug 38287&lt;/a&gt;).  I don&apos;t claim that
this is a particularly good way to do it, but here it is:&lt;/p&gt;

&lt;p&gt;First, I identified a pattern to search for. Unfortunately I don&apos;t really
understand the cause or fix for the bug, but I did have the example which
led to this bug report: &lt;a href=&quot;http://bugs.debian.org/490999&quot;&gt;Debian bug
490999&lt;/a&gt;. The bad code was a stack-pointer-relative load immediately
after a stack allocation (SPARC save instruction) where the offset was not
adjusted for the stack allocation:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;
save  %sp, -112, %sp
ld  [ %sp + 0x40 ], %i5
&lt;/pre&gt;&lt;/blockquote&gt;
I generalised this to:
&lt;blockquote&gt;&lt;pre&gt;
save  %sp, &lt;var&gt;offset1&lt;/var&gt;, sp
...
ld  [ %sp + &lt;var&gt;offset2&lt;/var&gt; ], &lt;var&gt;register&lt;/var&gt;
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;where &lt;var&gt;offset1&lt;/var&gt; + &lt;var&gt;offset2&lt;/var&gt; &amp;lt; 0.  Of course, this may
be valid if the intervening instructions include a &lt;code&gt;restore&lt;/code&gt;,
branch or store to the effective stack location that the last instruction
loads from.  I ended up allowing up to 10 intervening instructions and
examining a disassembly to work out which cases were valid.&lt;/p&gt;

&lt;p&gt;I looked up the instruction encoding for these two instructions.
Thankfully SPARC is RISC so they are simple and regular:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;save  %sp, &lt;var&gt;offset1&lt;/var&gt;, sp&lt;/code&gt; is encoded as &lt;code&gt;0x9de3a000 | offset1 &amp;amp; 0x1fff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ld  [ %sp + &lt;var&gt;offset2&lt;/var&gt; ], &lt;var&gt;register&lt;/var&gt;&lt;/code&gt; is encoded as &lt;code&gt;0xc003a000 | reg &amp;lt;&amp;lt; 25 | offset2 &amp;amp; 0x1fff&lt;/code&gt;
&lt;/ul&gt;
&lt;p&gt;I took the dumb but effective approach of scanning entire files for
this pattern rather than only scanning their code sections.  This seemed to
work - I got no false hits for non-code - but might not work for other
patterns that could match ASCII text.&lt;/p&gt;

&lt;p&gt;I wrote the scanning program in Python, which is my default choice of
language unless I know it&apos;s going to be too slow.  I was hoping to be able
to read the code files into arrays, but unfortunately the Python array
type only supports the native byte-order (SPARC is big-endian and I was
intending to use an x86 which is little-endian).  I tried reading into a
tuple using struct.unpack, which does support explicit byte-ordering, but
this used so much memory for larger files that the program swapped to a
crawl.  So finally I resorted to reading the file into a string, doing a
string search for &apos;\x9d\xe3&apos;, rejecting matches that weren&apos;t appropriately
aligned, then unpacking and comparing the code words from the point of the
string match.
(In Python 3.0 I would have to use the &lt;code&gt;bytes&lt;/code&gt; type for this,
as &lt;code&gt;str&lt;/code&gt; is a Unicode string type.)&lt;/p&gt;

&lt;p&gt;So that&apos;s how I scanned single files.  The next step was to find, unpack
and scan all the SPARC shared libraries in the archive.  (This particular
code generation bug is understood to affect only PIC code, and that is
normally only used in shared libraries.)  I wrote functions to search
Contents-sparc for shared library files - assumed to match the pattern
&lt;code&gt;([^\s]*/lib[^/\s]+\.so(?:\.[^/\s]*)?)&lt;/code&gt; - and to parse
Packages to find the filenames for the packages containing those files.
The latter uses the &lt;code&gt;debian_bundle.deb822&lt;/code&gt; module from
&lt;a href=&quot;http://packages.debian.org/python-debian&quot;&gt;python-debian&lt;/a&gt;.
The last key function downloads and unpacks a package using
&lt;code&gt;wget&lt;/code&gt; and &lt;code&gt;dpkg-deb&lt;/code&gt;.  I could have used
the &lt;code&gt;httplib&lt;/code&gt; module for downloading but I correctly
anticipated that I&apos;d need to restart the script several times so I
wanted to cache the packages which was easier to do using
&lt;code&gt;wget&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So, that&apos;s the explanation.  If you really want to see it,
&lt;a href=&quot;http://womble.decadent.org.uk/software/find_bug506713.py&quot;&gt;here&apos;s
the code&lt;/a&gt;.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">FOSDEM 2009</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/12/04/fosdem-2009</id>
<updated>2008-12-04T02:26:19Z</updated>
<published>2008-12-04T02:26:19Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/fosdem-2009" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;a href=&quot;http://www.fosdem.org&quot;&gt;&lt;img src=&quot;http://www.fosdem.org/promo/going-to&quot; alt=&quot;I&apos;m going to FOSDEM.&quot;&gt;&lt;/a&gt; Are you?
</content>
</entry>

<entry>
<title type="html">My Debian packages in Git</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/11/02/my-debian-packages-in-git</id>
<updated>2008-11-02T15:50:36Z</updated>
<published>2008-11-02T15:50:36Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/my-debian-packages-in-git" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;I finally got sufficiently fed up with Subversion yesterday to begin
converting my package repositories to Git.  This has many benefits,
including the fact that I can now easily publish them.
&lt;a href=&quot;http://git.decadent.org.uk/gitweb&quot;&gt;Browse&lt;/a&gt; or
&lt;a href=&quot;http://git.decadent.org.uk/git&quot;&gt;clone&lt;/a&gt; them as you prefer.
Or just ignore them.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">For those who care about firmware</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/10/22/for-those-who-care-about-firmware</id>
<updated>2008-10-22T00:53:55Z</updated>
<published>2008-10-22T00:53:55Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/for-those-who-care-about-firmware" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;Some drivers in Linux include &quot;firmware&quot; - code that runs on the device the
driver deals with, not the main processors in the system.  Most of this is in a
binary or equivalent form, which is probably not the form that it was
originally written in.  This makes it non-free by Debian&apos;s standards, an issue
which has led to much argument around previous releases and has blown up once
again.&lt;/p&gt;
&lt;p&gt;The good news is that kernel developers are making a continuing effort to
separate this from the driver code.  I&apos;ve collected together the patches that
do this and written 2 of my own, which appear to cover all the remaining
sourceless firmware.  But I was only able to test one of these drivers (radeon)
- the rest is up to you.&lt;/p&gt;
&lt;h3&gt;Affected drivers&lt;/h3&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Driver&lt;/th&gt;&lt;th&gt;Hardware which requires firmware&lt;/th&gt;&lt;th&gt;Bug report&lt;/th&gt;&lt;th&gt;Change made&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;cassini&lt;/td&gt;&lt;td&gt;Sun &quot;Cassini&quot; Ethernet controllers with &quot;Neptune&quot; PHY&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/498631&quot;&gt;498631&lt;/a&gt;&lt;/td&gt;&lt;td&gt;removed&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dabusb&lt;/td&gt;&lt;td&gt;BayCom DAB-USB radio receivers&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/502663&quot;&gt;502663&lt;/a&gt;&lt;/td&gt;&lt;td&gt;moved to firmware-dabusb&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;e100&lt;/td&gt;&lt;td&gt;Intel PRO/100 Ethernet controllers with PCI revision 8, 9, 15 or 16 or built into ICH6 or ICH7 (LAN-on-motherboard)&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/494308&quot;&gt;494308&lt;/a&gt;&lt;/td&gt;&lt;td&gt;moved to firmware-e100&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;kaweth&lt;/td&gt;&lt;td&gt;Kawasaki LSI USB Ethernet controllers&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/502665&quot;&gt;502665&lt;/a&gt;&lt;/td&gt;&lt;td&gt;removed&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;mga&lt;/td&gt;&lt;td&gt;Matrox G200, G400, G450(?) and G550 graphics controllers, 3D acceleration only&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/502666&quot;&gt;502666&lt;/a&gt;&lt;/td&gt;&lt;td&gt;moved to firmware-matrox&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;qla1280&lt;/td&gt;&lt;td&gt;QLogic QLA1XXX SCSI controllers&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/502667&quot;&gt;502667&lt;/a&gt;&lt;/td&gt;&lt;td&gt;moved to firmware-qlogic&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;r128&lt;/td&gt;&lt;td&gt;ATI Rage 128 graphics controllers, 3D acceleration only&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/494007&quot;&gt;494007&lt;/a&gt;&lt;/td&gt;&lt;td&gt;moved to firmware-ati&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;starfire&lt;/td&gt;&lt;td&gt;Adaptec DuraLAN aka Starfire Ethernet controllers&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/501152&quot;&gt;501152&lt;/a&gt;&lt;/td&gt;&lt;td&gt;moved to firmware-adaptec&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;tehuti&lt;/td&gt;&lt;td&gt;Tehuti Ethernet controllers&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/501153&quot;&gt;501153&lt;/a&gt;&lt;/td&gt;&lt;td&gt;moved to firmware-tehuti&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;typhoon&lt;/td&gt;&lt;td&gt;3Com Typhoon (3CR990) Ethernet controllers&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/502669&quot;&gt;502669&lt;/a&gt;&lt;/td&gt;&lt;td&gt;moved to firmware-3com&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;whiteheat&lt;/td&gt;&lt;td&gt;ConnectTech WhiteHEAT USB serial adapters&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bugs.debian.org/502668&quot;&gt;502668&lt;/a&gt;&lt;/td&gt;&lt;td&gt;removed&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;How to test&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Download and install the linux-source package from &lt;a href=&quot;http://people.debian.org/~benh/firmware-removal/&quot;&gt;http://people.debian.org/~benh/firmware-removal/&lt;/a&gt;.  There is a signed
.changes file there that you can use to verify the package.&lt;/li&gt;
&lt;li&gt;Build and install a kernel from that source (you should probably use make-kpkg).&lt;/li&gt;
&lt;li&gt;Boot the kernel. Check that the driver fails cleanly: it should not crash, and there should be a useful error message in /var/log/messages
&lt;li&gt;Download and install the relevant firmware package, if available. These are available from the same place as the linux-source package.
&lt;li&gt;Reboot or reload the driver. Check that the driver is now working.
&lt;li&gt;Add your results to the bug report as shown above.
&lt;/ol&gt;
&lt;h3&gt;Firmware that is removed&lt;/h3&gt;
&lt;p&gt;Do you depend on the drivers for which I have removed the firmware? Do you have contacts with
the vendors who might be able to help relicence it? Please send mail to the bug report.&lt;/p&gt;
&lt;h3&gt;Update&lt;/h3&gt;
&lt;p&gt;I checked my email and found a response from ConnectTech; the WhiteHEAT firmware will
probably be clear to package in firmware-nonfree. There is no need for anyone else to
contact them.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">chmod -x considered harmful</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/09/06/chmod--x-considered-harmful</id>
<updated>2008-09-06T22:24:56Z</updated>
<published>2008-09-06T22:24:56Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/chmod--x-considered-harmful" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;I discovered an interesting &quot;feature&quot; of chmod(1), which caused a package
build to fail.  According to the GNU manual page, if no letters are used
before a &quot;-&quot; or &quot;+&quot;, &quot;the effect is as if a were given, but bits that are set
in the umask are not affected.&quot;  The command will also fail with an error
message when it does this!&lt;/p&gt;
&lt;p&gt;The Single Unix Specification &lt;a href=&quot;http://www.opengroup.org/onlinepubs/009695399/utilities/chmod.html&quot;&gt;
says this is correct&lt;/a&gt;, though there is some ambiguity over whether the
exit status should be 0 or not.&lt;/p&gt;
&lt;p&gt;Anyway, the result is that it is generally a bad idea to call chmod in
this way in a script.  Always specify who the permission changes should apply
to.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">DebConf videos on Planet Debian</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/08/10/debconf-videos-on-planet-debian</id>
<updated>2008-08-10T08:32:25Z</updated>
<published>2008-08-10T08:32:25Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/debconf-videos-on-planet-debian" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;In addition to &lt;a href=&quot;http://wiki.debconf.org/wiki/DebConf8/Streams&quot;&gt;live
streams&lt;/a&gt;, recordings of each event should be published on
meetings-archive.debian.net.  There is an RSS feed of these, which should work
nicely in Miro: &lt;a
href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2008/debconf8/index.rss&quot;&gt;http://meetings-archive.debian.net/pub/debian-meetings/2008/debconf8/index.rss&lt;/a&gt;.
That feed is also included on &lt;a href=&quot;http://planet.debian.org&quot;&gt;Planet
Debian&lt;/a&gt;.  This is the first time I&apos;ve tried generating RSS so apologies in
advance if I make a mess of the Planet.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Last of the DebConf 7 videos, no, really</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/08/03/last-of-the-debconf-7-videos-no-really</id>
<updated>2008-08-03T19:58:23Z</updated>
<published>2008-08-03T19:58:23Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/last-of-the-debconf-7-videos-no-really" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;Sorry, I missed a few &lt;a href=&quot;http://womble.decadent.org.uk/blog/last-of-the-debconf-7-videos.html&quot;&gt;last time&lt;/a&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;Dependency-based boot sequence&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/408_Dependency_based_boot_sequence.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/408_Dependency_based_boot_sequence.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Data-mining Popcon&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/409_Data_Mining_Popcon.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/409_Data_Mining_Popcon.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Debian-installer - an update&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/410_Debian_Installer_an_update.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/410_Debian_Installer_an_update.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Wacky ideas II&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/411_Wacky_Ideas_II.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/411_Wacky_Ideas_II.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</content>
</entry>

<entry>
<title type="html">Last of the DebConf 7 videos</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/07/29/last-of-the-debconf-7-videos</id>
<updated>2008-07-29T09:15:40Z</updated>
<published>2008-07-29T09:15:40Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/last-of-the-debconf-7-videos" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;A few of the recordings from DebConf 7 had to be recovered in whole or
in part from tape.  For personal and technical reasons, a few of these
were not done last year, and I have finally dealt with them now.  The
last few sessions are:&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;The secure Debian Desktop&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/389_The_secure_Debian_Desktop.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/389_The_secure_Debian_Desktop.ogg&quot;&gt;high&lt;/a&gt;
&lt;tr&gt;&lt;td&gt;Debian - The Universal Operating System?&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/390_Debian_the_Universal_Operating_System.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/390_Debian_the_Universal_Operating_System.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Wacky ideas BoF&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/391_Wacky_ideas.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/391_Wacky_ideas.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;lintian BoF&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/392_lintian_BOF.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/392_lintian_BOF.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Debian travels around the world&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/393_Debian_travels_around_the_world.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/393_Debian_travels_around_the_world.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Leading a Free Software project&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/394_Leading_a_Free_Software_project.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/394_Leading_a_Free_Software_project.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Method diffusion in large volunteer projects&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/395_Method_diffusion_in_large_volunteer_projects.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/395_Method_diffusion_in_large_volunteer_projects.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Debtags is ready&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/396_Debtags_is_ready.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/396_Debtags_is_ready.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;OpenStreetMap&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/397_OpenStreetMap.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/397_OpenStreetMap.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Maintaining packages with Git&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/402_Maintaining_Packages_With_Git.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/402_Maintaining_Packages_With_Git.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;netconf&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/404_netconf.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/404_netconf.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Time for a better init system&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/407_Time_for_a_better_init_system.ogg&quot;&gt;low&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/407_Time_for_a_better_init_system.ogg&quot;&gt;high&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Hopefully these are useful to someone. Sorry it took so long!&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Becoming a kernel developer</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/05/03/becoming-a-kernel-developer</id>
<updated>2008-05-03T15:15:16Z</updated>
<published>2008-05-03T15:15:16Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/becoming-a-kernel-developer" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;After a fair amount of clean-up, a lot of waiting for review, and some
ruthless pruning, I and my colleagues at Solarflare finally got our net
driver accepted for Linux 2.6.26.  Meanwhile a larger version of the driver
made it into Xen&apos;s Linux tree, along with dependent drivers to provide a
secure fast path to the hardware from domU.  Somewhere down the road we&apos;re
going to have to resolve these two versions, but now I&apos;m just pleased to
have a working driver in-tree.&lt;/p&gt;
&lt;p&gt;There are some other changes I&apos;ve worked on over the past few months:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I maintain diagnostic scripts for our NICs and drivers.  Among other
things they include Vital Product Data (VPD).  There&apos;s a standard way to
read VPD in PCI (actually there are two, in different versions of the
spec) but in Linux this is only accessible to root, and even then there
are race conditions.  We provide an MTD driver for flash and/or
EEPROM attached to the NIC, and I know where the VPD appears in there,
but most users won&apos;t be loading that driver.  So I wrote this:
&lt;a href=&quot;http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=94e6108803469a37ee1e3c92dafdd1d59298602f&quot;&gt;Expose PCI VPD through sysfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Along the way I found a &lt;a href=&quot;http://bugzilla.kernel.org/show_bug.cgi?id=9867&quot;&gt;bug&lt;/a&gt;
in sysfs, which I fixed:
&lt;a href=&quot;http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=40a2159abf3d0107bba359246554bd7d56f2171b&quot;&gt;Disallow truncation of files in sysfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;One day I accidentally bridged one of our network interfaces, which
has &lt;a href=&quot;http://lwn.net/Articles/243949/&quot;&gt;Large Receive Offload&lt;/a&gt;
(LRO) enabled by default, with one of the motherboard&apos;s network
interfaces, and the results were not pretty.  LRO isn&apos;t really compatible
with packet forwarding, and currently causes the
&lt;a href=&quot;http://www.linux-foundation.org/en/Net:GSO&quot;&gt;GSO&lt;/a&gt; code to
crash or warn.  I wanted to solve this by
&lt;a href=&quot;http://thread.gmane.org/gmane.linux.network/92708&quot;&gt;disabling
forwarding of LRO skbs&lt;/a&gt;, but it turns out to be trickier than I
thought.&lt;/li&gt;
&lt;li&gt;We wanted to use topology information to allocate one IRQ per
CPU package, not per core (or per thread, with HT enabled) for
&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms795614.aspx&quot;&gt;Receive-Side Scaling&lt;/a&gt;.
Unfortunately this information is only available in some kernel
configurations and not for all architectures.  I had a go at
&lt;a href=&quot;http://thread.gmane.org/gmane.linux.kernel/660107&quot;&gt;providing
reasonable defaults&lt;/a&gt;, but it
&lt;a href=&quot;http://article.gmane.org/gmane.linux.kernel/667397&quot;&gt;didn&apos;t
work too well&lt;/a&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, this is still only part of my work.  My main task at the
moment is to write more unit tests for our next NIC.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">My day job</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/02/21/my-day-job</id>
<updated>2008-02-21T00:24:44Z</updated>
<published>2008-02-21T00:24:44Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/my-day-job" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;I&apos;m employed at &lt;a href=&quot;http://www.solarflare.com&quot;&gt;Solarflare
Communications&lt;/a&gt; in the test group, supporting the work of testers
and developers by developing test frameworks.  (We actually have very
few pure testers and a whole lot of automation.).  In a major break
from my previous jobs, I&apos;ve been working mostly in Python on
applications for use in-house.&lt;/p&gt;

&lt;p&gt;More recently I&apos;ve become involved in maintenance of our network driver for
Linux, starting with updating it to use current kernel coding conventions, and
submitting for inclusion in the kernel.  This has become a bit frustrating
because while there are a lot of people prepared to run checkpatch and pick
nits, there are not so many who will do a thorough review of a driver that&apos;s
20,000-odd lines long.  And without someone doing that, it won&apos;t go in.&lt;/p&gt;

&lt;p&gt;Meanwhile some of my colleagues have done some great work to accelerate
Linux networking on Xen by having drivers in dom0 and domU cooperate to expose
hardware resources directly to domU.  Our hardware architecture supports many
virtual NICs with their own packet queues and set of buffers, so this does
not compromise the security of the physical machine and dom0.  The results
are very impressive.&lt;/p&gt;

&lt;p&gt;The original motivation for the virtual NIC architecture was as a basis for
a user-level networking stack, which can provide very low latency and reduced
CPU usage.  This software was originally proprietary but has now been released
under GPLv2 as &lt;a href=&quot;http://www.openonload.org&quot;&gt;OpenOnload&lt;/a&gt;.  Google
invited two of my senior colleagues to talk about this - &lt;a
href=&quot;http://video.google.com/videoplay?docid=-3058188637025944861&quot;&gt;here&apos;s
a video of their talk about user-level networking&lt;/a&gt;.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Debian Miniconf 7 recordings</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/02/07/debian-miniconf-7-recordings</id>
<updated>2008-02-07T22:44:50Z</updated>
<published>2008-02-07T22:44:50Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/debian-miniconf-7-recordings" />
<content type="html">&lt;!--*- mode: html -*--&gt;
Most of the Debian Miniconf 7 sessions at LCA 2008 in Melbourne
were recorded by the LCA video team.  The recordings are now
&lt;a href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2008/miniconf7-lca/&quot;&gt;
mirrored on meetings-archive.debian.net&lt;/a&gt;.
</content>
</entry>

<entry>
<title type="html">Idea for a new PAM module</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/01/19/idea-for-a-new-pam-module</id>
<updated>2008-01-19T03:43:17Z</updated>
<published>2008-01-19T03:43:17Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/idea-for-a-new-pam-module" />
<content type="html">&lt;!--*- mode: html -*--&gt;
To guard against late-night administrative mistakes: pam_breathalyser.
</content>
</entry>

<entry>
<title type="html">Separated at birth</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2008/01/13/separated-at-birth</id>
<updated>2008-01-13T23:19:52Z</updated>
<published>2008-01-13T23:19:52Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/separated-at-birth" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;img src=&quot;/images/billg-mjg59.jpeg&quot;&gt;&lt;br&gt;
L: &lt;a href=&quot;http://foto.pho.be/ukuug/photos-ukuug-1/50.html&quot;&gt;Bill Gates&lt;/a&gt;; R: &lt;a href=&quot;http://bp3.blogger.com/_ySCIT3KO9Zc/RmsVLT8dUBI/AAAAAAAAGPc/bdIaEQ2ltzo/s400/Young_Bill_Gates_4.jpg&quot;&gt;Matthew Garrett&lt;/a&gt;
</content>
</entry>

<entry>
<title type="html">Introducing ParticleMan</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/11/11/introducing-particleman</id>
<updated>2007-11-11T18:22:44Z</updated>
<published>2007-11-11T18:22:44Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/introducing-particleman" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;As &lt;del&gt;threatened&lt;/del&gt; &lt;ins&gt;promised&lt;/ins&gt;, I have produced a renamed
version of Ion3 that should avoid upstream trademark claims and thus be
DFSG-compliant.  Some translations are out-of-date, but I&apos;ll release a first
version now and try to get those updated later.  The new name is ParticleMan.
When I &lt;a
href=&quot;http://forums.debian.net/viewtopic.php?t=14731&amp;sid=9e1cf7c52126f5b7aa2b088065a2b22a&quot;&gt;put
the name to a vote&lt;/a&gt; some time back the winner was Iceparticle, but there&apos;s
already an &lt;a href=&quot;http://www.icewm.org&quot;&gt;icewm&lt;/a&gt; and I couldn&apos;t resist the
&lt;a href=&quot;http://www.tmbg.com&quot;&gt;TMBG&lt;/a&gt; reference.
(Whoever suggested this name to me: I had already thought of it but forgot to
include it in the poll.)&lt;/p&gt;
&lt;p&gt;The packages are in my repository for now.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Ion3 rc-20071109</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/11/11/ion3-rc-20071109</id>
<updated>2007-11-11T01:49:21Z</updated>
<published>2007-11-11T01:49:21Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/ion3-rc-20071109" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;Since ries (ftp-master.debian.org) is still down, I&apos;ve uploaded
packages for the latest version of Ion3 to my own server.  That&apos;s:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;
deb http://womble.decadent.org.uk/debian/ sid/
deb-src http://womble.decadent.org.uk/debian/ sid/
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;The repository is signed with my personal key.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Publication of DebConf 7 videos</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/07/28/publication-of-debconf-7-videos</id>
<updated>2007-07-28T17:39:26Z</updated>
<published>2007-07-28T17:39:26Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/publication-of-debconf-7-videos" />
<content type="html">&lt;!--*- mode: html -*--&gt;

&lt;p&gt;The DebConf 7 videos needed some post-processing, mostly to recover
missing pieces from tape.  I&apos;ve done a large part of that, but it&apos;s
not yet complete.&lt;/p&gt;

&lt;p&gt;The &lt;a
href=&quot;http://wiki.debconf.org/wiki/DebConf7/videoteam/ToDo&quot;&gt;video team
to-do list&lt;/a&gt; has details of the recordings that still need work, and
the sessions that we believe were not recorded.  Please &lt;a
href=&quot;mailto:debconf-video@lists.debconf.org&quot;&gt;tell us&lt;/a&gt; if we did
record some of these, and we will have another look through our tapes
for them.&lt;/p&gt;

&lt;p&gt;The conversion to &quot;publication&quot; formats (i.e. small enough to offer
for download) was started at the conference and I have continued this
at home over the past 2 weeks.  Unfortunately this has been
interrupted by some hardware failures.  It looks like the CPUs in two
of my PCs were running hot enough to be damaged (slowly) but not hot
enough to trigger an alarm or automatic shutdown.  The remaining
conversions will be running mostly on my laptop, which is pretty fast
and should be able to finish conversion of the recordings that are in
a good state in about 2 days.  However, some of the converted files
may be broken and need some manual attention.&lt;/p&gt;

&lt;p&gt;My upload bandwidth is only 448 kbit/s so the high-quality files
will take about a week to upload.&lt;/p&gt;

&lt;p&gt;As ever, the video files are being published on &lt;a
href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/&quot;&gt;meetings-archive.debian.net&lt;/a&gt;.
</content>
</entry>

<entry>
<title type="html">Everything you Never Wanted to Know about PKI but were Forced to Find Out</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/07/04/everything-you-never-wanted-to-know-about-pki-x509-ssl</id>
<updated>2007-07-04T22:43:26Z</updated>
<published>2007-07-04T22:43:26Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/everything-you-never-wanted-to-know-about-pki-x509-ssl" />
<content type="html">&lt;!--*- mode: html -*--&gt;

&lt;p&gt;Not my title, but that of &lt;a
href=&quot;http://www.cs.auckland.ac.nz/~pgut001/pubs/pkitutorial.pdf&quot;&gt;Peter
Gutmann&apos;s presentation about PKI&lt;/a&gt;, specifically X.509 as used in
SSL.  It&apos;s informative, entertaining, and I suspect not as well known
as it should be.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">How to use a &quot;system tray&quot; in Ion3</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/07/04/systray-in-ion3</id>
<updated>2007-07-04T22:39:15Z</updated>
<published>2007-07-04T22:39:15Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/systray-in-ion3" />
<content type="html">&lt;!--*- mode: html -*--&gt;

&lt;p&gt;&lt;a href=&quot;http://modeemi.fi/~tuomov/ion/&quot;&gt;Ion3&lt;/a&gt; supports &lt;a
href=&quot;http://en.wikipedia.org/wiki/Dock_%28computing%29&quot;&gt;docked&lt;/a&gt;
applications and is compatible with the docking protocols used by &lt;a
href=&quot;http://www.windowmaker.info/&quot;&gt;WindowMaker&lt;/a&gt; and &lt;a
href=&quot;http://www.kde.org&quot;&gt;KDE&lt;/a&gt;.  Normally you would use:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;dopath(&quot;mod_dock&quot;)&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;to load mod_dock, which provides a standard corner dock, toggled
using MOD1+D.&lt;/p&gt;

&lt;p&gt;However, recent versions also support docking applications in the
status bar, in &quot;system tray&quot; style:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;-- In cfg_ion.lua:
defwinprop {
   class = &quot;&lt;var&gt;foo-window-class&lt;/var&gt;&quot;,
   statusbar = &quot;foo&quot;
}

-- In cfg_statusbar.lua:
mod_statusbar.create {
   ...
   template=&quot;... %systray_foo&quot;
}&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gnome.org&quot;&gt;GNOME&lt;/a&gt; unfortunately uses a
different dock protocol.  However, the &lt;a
href=&quot;http://icculus.org/openbox/2/docker/&quot;&gt;docker&lt;/a&gt; program can
adapt from this to the WindowMaker protocol.  So you can include a
GNOME system tray in your status bar by including docker in your X
session and this in your Ion3 configuration:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;-- In cfg_ion.lua:
defwinprop {
   class = &quot;Docker&quot;,
   statusbar = &quot;dock&quot;
}

-- In cfg_statusbar.lua:
mod_statusbar.create {
   ...
   template=&quot;... %systray_dock&quot;
}&lt;/pre&gt;&lt;/blockquote&gt;
</content>
</entry>

<entry>
<title type="html">dvswitch in use</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/06/19/dv-mixer-3</id>
<updated>2007-06-19T01:09:14Z</updated>
<published>2007-06-19T01:09:14Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/dv-mixer-3" />
<content type="html">
&lt;p&gt;It&apos;s day 2 of DebConf and &lt;a
href=&quot;http://alioth.debian.org/projects/dvswitch/&quot;&gt;dvswitch&lt;/a&gt; is
being used by many members of the video team.  So I have a pretty good
idea of what it does well and what I need to fix in it.&lt;/p&gt;

&lt;p&gt;The most serious problem is that there&apos;s no way to start and stop
recording from the GUI.  That&apos;s actually controlled by starting and
stopping the file sink, which runs on a remote machine.  Here I have
arranged to start it by running a command with ssh in the background,
which is stopped by quitting dvswitch or with pkill!  The result is
that we can record a lot of junk between events, which has to be
checked and then discarded, or alternately stop recording and risk
missing the next event.&lt;/p&gt;

&lt;p&gt;Also, we like to number our cameras: 1 for the speaker, 2 for the
audience, 3 for slides.  But dvswitch assigns numbers to sources in
order of connection.  I fudged around this by again using ssh to start
the sources in the proper order after dvswitch.&lt;/p&gt;

&lt;p&gt;Despite these and a number of other flaws, it seems that several
people have been impressed by the ability to cover talks from
multiple angles.  I hope this will attract more people to contribute
to dvswitch so that it can serve DebConf and other conferences better.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">DebConf video software</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/06/19/debconf-video-software</id>
<updated>2007-06-19T01:07:41Z</updated>
<published>2007-06-19T01:07:41Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/debconf-video-software" />
<content type="html">
&lt;p&gt;The DebConf video team is using a large number of programs, some
common and some of our own, spread across 20-30 computers.  Some
may be interested to know what this is.&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;&lt;a href=&quot;http://www.informatik.uni-koeln.de/fai/&quot;&gt;FAI&lt;/a&gt; for
package installation and configuration on DebConf machines.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://packages.debian.org/dvgrab&quot;&gt;dvgrab&lt;/a&gt; for
video grabbing.  We are using a variety of DV cameras, but dvgrab
works well with almost all of them.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://alioth.debian.org/projects/dvswitch&quot;&gt;dvswitch&lt;/a&gt;
for switching between multiple cameras and files.&lt;/li&gt;

&lt;li&gt;&lt;a
href=&quot;http://packages.debian.org/ffmpeg2theora&quot;&gt;ffmpeg2theora&lt;/a&gt;
for transcoding to Ogg Theora/Vorbis, both for live streams and for
the downloadable files slowly appearing on &lt;a
href=&quot;http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/&quot;&gt;meetings-archive&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;A small number of scripts for starting the above three programs
and recording to files.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.icecast.org&quot;&gt;Icecast 2&lt;/a&gt; for streaming.  We
are currently using the sarge package rebuilt for etch because the
server in the etch package is unstable in our double-relayed
configuration.  (To limit bandwidth use between DebConf and the
Internet, we have an internal server for internal use and an external
relay that serves as master for all other relays.)&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://www.caraytech.com/geodns/&quot;&gt;GeoDNS&lt;/a&gt; and a
monitoring script to resolve streams.video.debconf.org to the nearest
working relay server.&lt;/li&gt;

&lt;li&gt;A newly-developed extension to the &lt;a
href=&quot;http://pentabarf.org/&quot;&gt;Pentabarf&lt;/a&gt; conference management
system that presents recordings for review.  Reviewers match up
recordings to events, give the start and end time of the event in the
recording so we can cut out extra material, and rate the quality of
the recordings and transcoded files.&lt;/li&gt;

&lt;li&gt;A script to import the details of new recordings into the database
ready for review, run as a cron job.&lt;/li&gt;

&lt;li&gt;A script to transcode recordings into multiple versions using the
timing and naming information provided by reviewers.  This spreads
the work across multiple servers controlled using ssh (again!).&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Most of the custom software and configurations should be included
in the &lt;a
href=&quot;http://alioth.debian.org/projects/debconf-video/&quot;&gt;debconf-video
project on Alioth&lt;/a&gt;.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">MSN Video enforces &quot;free software&quot;</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/05/10/msn-video-free-software</id>
<updated>2007-05-09T23:36:17Z</updated>
<published>2007-05-09T23:36:17Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/msn-video-free-software" />
<content type="html">&lt;p&gt;Semi-annoying, semi-amusing:&lt;/p&gt;
&lt;img src=&quot;/images/msn-video-free-software.png&quot;&gt;
&lt;p&gt;I&apos;m using &lt;strike&gt;Firefox&lt;/strike&gt; Iceweasel 2.0.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Renaming of Ion3 in Debian</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/05/07/renaming-of-ion3</id>
<updated>2007-05-07T12:55:09Z</updated>
<published>2007-05-07T12:55:09Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/renaming-of-ion3" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;Continuing a &lt;a href=&quot;http://bugs.debian.org/354622&quot;&gt;trend&lt;/a&gt; of
&lt;a href=&quot;http://cdrecord.berlios.de/&quot;&gt;upstream&lt;/a&gt; &lt;a
href=&quot;http://lists.xensource.com/archives/html/xen-devel/2006-10/msg00095.html&quot;&gt;control-freakery&lt;/a&gt;,
the &lt;a href=&quot;http://modeemi.fi/~tuomov/ion/contact.html&quot;&gt;author&lt;/a&gt; of
&lt;a href=&quot;http://modeemi.fi/~tuomov/ion/&quot;&gt;Ion&lt;/a&gt; has claimed Ion and
Ion3 as trademarks and set out a &lt;a
href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=422527#10&quot;&gt;trademark
policy&lt;/a&gt; that will require Debian to rename it.  I&apos;ve created &lt;a
href=&quot;http://forums.debian.net/viewtopic.php?p=69522&quot;&gt;a poll&lt;/a&gt; for
selecting a new name.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Introducing dvswitch</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/04/30/dv-mixer-2</id>
<updated>2007-04-30T08:28:56Z</updated>
<published>2007-04-30T08:28:56Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/dv-mixer-2" />
<content type="html">
&lt;p&gt;I just released version 0.5.0 of &lt;a
href=&quot;http://alioth.debian.org/projects/dvswitch/&quot;&gt;dvswitch&lt;/a&gt;, the
software DV mixer intended for use at &lt;a
href=&quot;http://debconf7.debconf.org&quot;&gt;DebConf 7&lt;/a&gt;.  I believe I&apos;ve met
all of the video team&apos;s essential &lt;a
href=&quot;http://wiki.debconf.org/wiki/DebConf7/videoteam/Mixer#Requirements&quot;&gt;requirements&lt;/a&gt;
and most of the desirables.&lt;/p&gt;

&lt;p&gt;Unfortunately real video mixing seems to take a faster machine than
I have at the moment and I very much doubt I&apos;ll have time to improve
that much.  Although I have implemented picture-in-picture mixing, it
won&apos;t be usable and may result in frame dropping, so I&apos;ve started a
stable branch intended for DebConf 7 that doesn&apos;t include it.  Version
0.5.0 is released from this branch and can be considered the first
alpha test version.  There&apos;s now a little over a month to test, fix
bugs and make minor improvements on this branch.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">ACCU Conference</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/04/14/accu-conference-2007</id>
<updated>2007-04-14T17:16:08Z</updated>
<published>2007-04-14T17:16:08Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/accu-conference-2007" />
<content type="html">&lt;!--*- mode: html -*--&gt;

&lt;p&gt;I&apos;ve been meaning to attend the &lt;a
href=&quot;http://www.accu.org/index.php/conferences&quot;&gt;ACCU Conference&lt;/a&gt;
for some years and finally decided to pay my own way for a couple of
days this year.  It was an opportunity to hear world experts on C++
and other programming topics and to a smaller extent to meet and
socialise with other professional programmers.&lt;/p&gt;

&lt;p&gt;I attended the following sessions:&lt;/p&gt;

&lt;h3&gt;Keynote: Improving Collaboration in Open Source Projects, &lt;a
href=&quot;http://www.markshuttleworth.com/&quot;&gt;Mark Shuttleworth&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;This was a somewhat surprising choice of speaker and subject since
I think most attendees work on proprietary software, but I think any
sensible developer in the proprietary world will try to build on free
libraries under non-copyleft licences, where appropriate.  Mark talked
about governance and leadership in &quot;open source&quot; projects (actually
praising Debian for having a clear constitution) and about the need
for good communication between projects, for example about release
schedules.  He seems to have accepted that Launchpad cannot be a
single hub, and called for standard formats for, for example,
exchanging information about related bugs between bug trackers.  But
it doesn&apos;t sound like he&apos;s ready to take the lead on that.&lt;/p&gt;

&lt;h3&gt;Choose your Poison: Exceptions or Error Codes, &lt;a
href=&quot;http://erdani.org/&quot;&gt;Andrei Alexandrescu&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Andrei looked at the strengths and weaknesses of various error
reporting mechanisms in C++ and introduced a technique for making
error handling more flexible.  Normally a function is designed either
to indicate errors through its return value or to throw an exception
on error.  If a function returns an error indicator, it&apos;s easy for
callers to ignore it.  If it throws an exception on error, then a
caller that provokes errors more often than the called function&apos;s
author anticipated pays a high cost in processing time for those
errors.&lt;/p&gt;

&lt;p&gt;Andrei&apos;s solution involves a class template
&lt;code&gt;Likely&amp;lt;typename T&gt;&lt;/code&gt; whose instances hold either a
return value of type &lt;code&gt;T&lt;/code&gt; or an exception.  A function that
can fail has a specialisation of this template as its return type.
The caller can check for failure if it knows how to handle it, or it
can ignore it - in which case the conversion to &lt;code&gt;T&lt;/code&gt; or the
destructor will throw the exception.  This is clever but doesn&apos;t seem
to be entirely satisfactory.  The destructor which throws does first
check that no exception is already being processed, avoiding collision
of the two exceptions and consequent abrupt termination of the
program, but this can result in errors being unexpectedly ignored.&lt;/p&gt;

&lt;h3&gt;Introduction to Component-Level Testing, John Lakos&lt;/h3&gt;

&lt;p&gt;A marathon 3-hour talk on designing and testing software,
particularly C++ programs (the subject of &lt;a
href=&quot;http://www.awprofessional.com/title/0201633620&quot;&gt;his well-known
book&lt;/a&gt;) as a set of well-defined components.&lt;/p&gt;

&lt;p&gt;Lakos first defined these components as being &quot;physical&quot; i.e. sets
of source files - normally a header file defining an interface, an
implementation file, and a test driver file.  They may also include
metadata for the build system.  He talked about the value of reusable
components (as if this wasn&apos;t obvious!) and the risk of introducing
circular dependencies - which essentially turn many components into
one and reduce reusability - if we fail to keep track of dependencies.
Software built out of components can be viewed as a hierarchy or stack
defined by dependencies.  In a large system, components with similar
dependencies and dependents can be grouped together into packages or
package groups to simplify a view of these dependencies.
&lt;/p&gt;

&lt;p&gt;He explained that the test driver&apos;s dependencies count just as much
as the implementation&apos;s, because we cannot reasonably test a component
until we have tested its dependencies.  Test drivers should also be
written to avoid depending on environmental settings and
configuration, so far as possible.&lt;/p&gt;

&lt;p&gt;Finally, and perhaps most importantly, he spent a long time talking
about how to construct test cases and test data.  I might try to
summarise this in a later entry if anyone&apos;s interested.&lt;/p&gt;

&lt;h3&gt;The Appliance of Science: Things in Computer Science that every
practitioner should know, Andrei Alexandrescu&lt;/h3&gt;

&lt;p&gt;Andrei began by complaining that OpenOffice Impress was even worse
than PowerPoint, but being able to use Linux (specifically Ubuntu)
more than made up for the pain.&lt;/p&gt;

&lt;p&gt;He briefly presented four key ideas that he believes programmers
should understand and be ready to make use of:&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dynamic_programming&quot;&gt;Dynamic
programming&lt;/a&gt;.  The Wikipedia article summarises this as &quot;a method
of solving problems exhibiting the properties of overlapping
subproblems and optimal substructure (described below) that takes much
less time than naive methods&quot;.  As a simple example, Andrei presented
a Fibonacci number generator.  But since no-one really needs Fibonacci
numbers, he also showed its application to calculation of the &lt;a
href=&quot;http://en.wikipedia.org/wiki/Levenshtein_distance&quot;&gt;Levenshtein
distance between words&lt;/a&gt; which is important in spell-checking and
fuzzy string matching.  A naive approach to either of these problems
is so inefficient as to be useless.&lt;/li&gt;

&lt;li&gt;&lt;a
href=&quot;http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29&quot;&gt;Garbage
collection&lt;/a&gt; and its connection to type-safety.  Any object model
can only provide 2 of the following 3 features without losing
type-safety: mutable objects, aliasing (multiple pointers/references
to the same objects), and explicit reuse of memory (via free, delete
or similar).  C and C++ have all three of these.  Garbage collection
eliminates the need for the third.  However it does require more
virtual memory and/or more processing time (there is a trade-off
between these).  (He quoted numbers from &lt;a
href=&quot;http://citeseer.ist.psu.edu/hertz05quantifying.html&quot;&gt;Hertz and
Berger, Quantifying the Performance of Garbage Collection vs. Explicit
Memory Management, 2005&lt;/a&gt;.  However, these numbers show the cost of
GC in Java, specifically Jikes, not as an addition to C or C++.)&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Machine_learning&quot;&gt;Machine
learning&lt;/a&gt;.  Sometimes we don&apos;t know how to solve a problem, but we
can have the program gather feedback that will allow it to learn how
to do it better.  This depends on the &quot;smoothness assumption&quot;: small
changes in inputs have a small effect on the result, rather than
making sudden changes.  Examples: image recognition, deciding whether
changes to web page layout are helpful, disambiguating search
terms.&lt;/li&gt;

&lt;li&gt;&lt;a
href=&quot;http://en.wikipedia.org/wiki/Transactional_memory&quot;&gt;Transactional
memory&lt;/a&gt; is the most promising approach to achieving scalability
across massively parallel systems.  Most hardware performance
improvements over the next 10 years will come from greater
parallelism, not higher clock speeds.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;Writing for ACCU (BoF)&lt;/h3&gt;

&lt;p&gt;I think I&apos;ve been convinced to write an article about
standardisation of multithreading in C++.&lt;/p&gt;

&lt;h3&gt;C++ Threads, &lt;a href=&quot;http://www.crowl.org/lawrence/&quot;&gt;Lawrence
Crowl&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Crowl gave an overview (&lt;a
href=&quot;http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1196.htm&quot;&gt;similar
to this&lt;/a&gt;) of the extensive work that&apos;s been done on standardisation
of multithreading in the C++ language and library.  This is one of the
most important features in C++0x due to the increased parallelism
mentioned above.  The current semantics of multithreaded programs are
not standardised, resulting in subtle but potentially serious
differences between current C++ implementations that support multiple
threads, and in the need for assembly-language code in programs that
use lockless synchronisation.  Much of this is also relevant to C and
is being considered by the C standard committee.&lt;/p&gt;

&lt;h3&gt;C++0x Initialisation: Lists and a Uniform Syntax, &lt;a
href=&quot;http://www.research.att.com/~bs/&quot;&gt;Bjarne Stroustrup&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Stroustrup recapped the 4 forms of syntax for initialising objects
in C++, some inherited from C and some necessarily invented for C++,
none of which are entirely generic.  He noted the lack of a simple
syntax to initialise the elements of containers, which violates the
general principle that class types should have the same status as
built-in types in C++.  He then introduced a new initialiser syntax
that he and others have defined for C++0x, which is a brace-enclosed
comma-separated list of values, similar to that used for arrays and
C-style structures (aggregates).  Container types can define a
constructor with a parameter of type &lt;code&gt;const
std::initializer_list&amp;lt;T&gt; &amp;amp;&lt;/code&gt; and when constructed with
this new form of initialiser they will receive this wrapper for a
constant array of element values.  For types that do not, the values
in the list are treated as arguments to some other constructor, if one
matches.  Otherwise, for compatibility, this may be treated as
aggregate initialisation.&lt;/p&gt;

&lt;h3&gt;C++ Standard Library report, Alisdair Meredith&lt;/h3&gt;

&lt;p&gt;There was far too much information here for me to even begin
to summarise.  Suffice to say there are lots of good things coming
bu the library committee will have its work cut out to get them
all properly specified in time for the Committe Draft coming late
this year.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;I also met old friends and new, put faces to names from newsgroups
and books, and got too little sleep.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">I can&apos;t draw cartoons</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/03/24/i-cant-draw-cartoons</id>
<updated>2007-03-24T15:19:01Z</updated>
<published>2007-03-24T15:19:01Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/i-cant-draw-cartoons" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;a href=&quot;http://www.bugbash.net/comic/13.html&quot;&gt;&lt;img src=&quot;http://www.bugbash.net/strips/bug-bash20050815.gif&quot; alt=&quot;Cartoon: Signs you&apos;re close to shipping&quot;&gt;&lt;/a&gt;
</content>
</entry>

<entry>
<title type="html">Gecko and ATI graphics</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/03/24/gecko-and-ati-graphics</id>
<updated>2007-03-24T01:11:10Z</updated>
<published>2007-03-24T01:11:10Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/gecko-and-ati-graphics" />
<content type="html">&lt;!--*- mode: html -*--&gt;
&lt;p&gt;Just as Gecko exposes a bug in the nv driver, it can also &lt;a
href=&quot;http://bugs.debian.org/342105&quot;&gt;provoke poor performance in the ati
driver&lt;/a&gt;.  This turns out to be avoidable by &lt;a
href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=342105;msg=35&quot;&gt;configuring
X to use the newer driver interface&lt;/a&gt;.&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Developing a DV mixer</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/03/15/dv-mixer-1</id>
<updated>2007-03-15T01:18:10Z</updated>
<published>2007-03-15T01:18:10Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/dv-mixer-1" />
<content type="html">&lt;!--*- mode: html -*--&gt;

&lt;p&gt;For &lt;a href=&quot;http://debconf7.debconf.org&quot;&gt;this year&apos;s DebConf&lt;/a&gt;,
we (&lt;a
href=&quot;http://lists.debconf.org/mailman/listinfo/debconf-video&quot;&gt;the
video team&lt;/a&gt;) want to be able to use multiple cameras like at
DebConf 5, where we had one for the projection screen and one for the
presenter fed to an analogue mixer and a digitiser.  At DC6 we had
no mixer and no budget for one.  Same at DC7 - unless we can do it
with software.  &lt;a
href=&quot;http://toresbe.at.ifi.uio.no/&quot;&gt;Toresbe&lt;/a&gt; had a go at writing
one but didn&apos;t finish.  I want to give it a go.  So:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://alioth.debian.org/projects/dvswitch/&quot;&gt;Alioth
project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href=&quot;http://lists.debconf.org/lurker/thread/20070314.011816.cff4c2fe.en.html&quot;&gt;Requirements&lt;/a&gt;
(first try)&lt;/li&gt;
&lt;li&gt;&lt;a
href=&quot;http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&amp;item=160093728377&quot;&gt;Camera&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Action?  Er, actually I need a Firewire card first.&lt;/li&gt;
&lt;/ul&gt;
</content>
</entry>

<entry>
<title type="html">New blog</title>
<category term="" />
<id>http://womble.decadent.org.uk/blog/2007/03/10/new-blog</id>
<updated>2007-03-10T16:55:42Z</updated>
<published>2007-03-10T16:55:42Z</published>
<link rel="alternate" type="text/html" href="http://womble.decadent.org.uk/blog/new-blog" />
<content type="html">&lt;!--*- mode: html -*--&gt;

&lt;p&gt;This is my new blog for technical/geeky/Debian stuff.  I&apos;m keeping
my &lt;a href=&quot;http://womble2.livejournal.com&quot;&gt;LiveJournal&lt;/a&gt; for social
and private matters and syndicating this one to Planet Debian.&lt;/p&gt;

&lt;p&gt;I hope this separation will make me less afraid of boring
LiveJournal readers with technical minutiae and Debian politics
or boring Planet Debian readers with local social stuff, so I actually
write more.  Don&apos;t get too hopeful though.&lt;/p&gt;
</content>
</entry>
</feed>
