<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" 
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" 
   xmlns:html="http://www.w3.org/1999/html" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
   <title>Ben's technical blog</title>
   <link>http://womble.decadent.org.uk/blog</link>
   <description>Ben's technical blog</description>
   <language>en</language>
   <copyright>Copyright 2007 Ben Hutchings</copyright>
   <ttl>60</ttl>
   <pubDate>Sat, 06 Sep 2008 22:24 GMT</pubDate>
   <managingEditor>ben@decadent.org.uk</managingEditor>
   <generator>PyBlosxom http://pyblosxom.sourceforge.net/ 1.3.2 2/13/2006</generator>
<item>
   <title>chmod -x considered harmful</title>
   <guid isPermaLink="false">chmod--x-considered-harmful</guid>
   <link>http://womble.decadent.org.uk/blog/chmod--x-considered-harmful.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>I discovered an interesting "feature" of chmod(1), which caused a package
build to fail.  According to the GNU manual page, if no letters are used
before a "-" or "+", "the effect is as if a were given, but bits that are set
in the umask are not affected."  The command will also fail with an error
message when it does this!</p>
<p>The Single Unix Specification <a href="http://www.opengroup.org/onlinepubs/009695399/utilities/chmod.html">
says this is correct</a>, though there is some ambiguity over whether the
exit status should be 0 or not.</p>
<p>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.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sat, 06 Sep 2008 22:24 GMT</pubDate>
</item>
<item>
   <title>DebConf videos on Planet Debian</title>
   <guid isPermaLink="false">debconf-videos-on-planet-debian</guid>
   <link>http://womble.decadent.org.uk/blog/debconf-videos-on-planet-debian.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>In addition to <a href="http://wiki.debconf.org/wiki/DebConf8/Streams">live
streams</a>, 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: <a
href="http://meetings-archive.debian.net/pub/debian-meetings/2008/debconf8/index.rss">http://meetings-archive.debian.net/pub/debian-meetings/2008/debconf8/index.rss</a>.
That feed is also included on <a href="http://planet.debian.org">Planet
Debian</a>.  This is the first time I've tried generating RSS so apologies in
advance if I make a mess of the Planet.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sun, 10 Aug 2008 08:32 GMT</pubDate>
</item>
<item>
   <title>Last of the DebConf 7 videos, no, really</title>
   <guid isPermaLink="false">last-of-the-debconf-7-videos-no-really</guid>
   <link>http://womble.decadent.org.uk/blog/last-of-the-debconf-7-videos-no-really.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>Sorry, I missed a few <a href="http://womble.decadent.org.uk/blog/last-of-the-debconf-7-videos.html">last time</a>.</p>
<table>
<tr><td>Dependency-based boot sequence</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/408_Dependency_based_boot_sequence.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/408_Dependency_based_boot_sequence.ogg">high</a></td></tr>
<tr><td>Data-mining Popcon</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/409_Data_Mining_Popcon.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/409_Data_Mining_Popcon.ogg">high</a></td></tr>
<tr><td>Debian-installer - an update</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/410_Debian_Installer_an_update.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/410_Debian_Installer_an_update.ogg">high</a></td></tr>
<tr><td>Wacky ideas II</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/411_Wacky_Ideas_II.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/411_Wacky_Ideas_II.ogg">high</a></td></tr>
</table>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sun, 03 Aug 2008 19:58 GMT</pubDate>
</item>
<item>
   <title>Last of the DebConf 7 videos</title>
   <guid isPermaLink="false">last-of-the-debconf-7-videos</guid>
   <link>http://womble.decadent.org.uk/blog/last-of-the-debconf-7-videos.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>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:</p>
<table>
<tr><td>The secure Debian Desktop</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/389_The_secure_Debian_Desktop.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/389_The_secure_Debian_Desktop.ogg">high</a>
<tr><td>Debian - The Universal Operating System?</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/390_Debian_the_Universal_Operating_System.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/390_Debian_the_Universal_Operating_System.ogg">high</a></td></tr>
<tr><td>Wacky ideas BoF</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/391_Wacky_ideas.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/391_Wacky_ideas.ogg">high</a></td></tr>
<tr><td>lintian BoF</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/392_lintian_BOF.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/392_lintian_BOF.ogg">high</a></td></tr>
<tr><td>Debian travels around the world</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/393_Debian_travels_around_the_world.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/393_Debian_travels_around_the_world.ogg">high</a></td></tr>
<tr><td>Leading a Free Software project</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/394_Leading_a_Free_Software_project.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/394_Leading_a_Free_Software_project.ogg">high</a></td></tr>
<tr><td>Method diffusion in large volunteer projects</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/395_Method_diffusion_in_large_volunteer_projects.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/395_Method_diffusion_in_large_volunteer_projects.ogg">high</a></td></tr>
<tr><td>Debtags is ready</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/396_Debtags_is_ready.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/396_Debtags_is_ready.ogg">high</a></td></tr>
<tr><td>OpenStreetMap</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/397_OpenStreetMap.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/397_OpenStreetMap.ogg">high</a></td></tr>
<tr><td>Maintaining packages with Git</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/402_Maintaining_Packages_With_Git.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/402_Maintaining_Packages_With_Git.ogg">high</a></td></tr>
<tr><td>netconf</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/404_netconf.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/404_netconf.ogg">high</a></td></tr>
<tr><td>Time for a better init system</td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/low/407_Time_for_a_better_init_system.ogg">low</a></td><td><a href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/high/407_Time_for_a_better_init_system.ogg">high</a></td></tr>
</table>
<p>Hopefully these are useful to someone. Sorry it took so long!</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Tue, 29 Jul 2008 09:15 GMT</pubDate>
</item>
<item>
   <title>Becoming a kernel developer</title>
   <guid isPermaLink="false">becoming-a-kernel-developer</guid>
   <link>http://womble.decadent.org.uk/blog/becoming-a-kernel-developer.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>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's Linux tree, along with dependent drivers to provide a
secure fast path to the hardware from domU.  Somewhere down the road we're
going to have to resolve these two versions, but now I'm just pleased to
have a working driver in-tree.</p>
<p>There are some other changes I've worked on over the past few months:</p>
<ul>
<li>I maintain diagnostic scripts for our NICs and drivers.  Among other
things they include Vital Product Data (VPD).  There'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't be loading that driver.  So I wrote this:
<a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=94e6108803469a37ee1e3c92dafdd1d59298602f">Expose PCI VPD through sysfs</a></li>
<li>Along the way I found a <a href="http://bugzilla.kernel.org/show_bug.cgi?id=9867">bug</a>
in sysfs, which I fixed:
<a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=40a2159abf3d0107bba359246554bd7d56f2171b">Disallow truncation of files in sysfs</a></li>
<li>One day I accidentally bridged one of our network interfaces, which
has <a href="http://lwn.net/Articles/243949/">Large Receive Offload</a>
(LRO) enabled by default, with one of the motherboard's network
interfaces, and the results were not pretty.  LRO isn't really compatible
with packet forwarding, and currently causes the
<a href="http://www.linux-foundation.org/en/Net:GSO">GSO</a> code to
crash or warn.  I wanted to solve this by
<a href="http://thread.gmane.org/gmane.linux.network/92708">disabling
forwarding of LRO skbs</a>, but it turns out to be trickier than I
thought.</li>
<li>We wanted to use topology information to allocate one IRQ per
CPU package, not per core (or per thread, with HT enabled) for
<a href="http://msdn.microsoft.com/en-us/library/ms795614.aspx">Receive-Side Scaling</a>.
Unfortunately this information is only available in some kernel
configurations and not for all architectures.  I had a go at
<a href="http://thread.gmane.org/gmane.linux.kernel/660107">providing
reasonable defaults</a>, but it
<a href="http://article.gmane.org/gmane.linux.kernel/667397">didn't
work too well</a>!</li>
</ul>
<p>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.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sat, 03 May 2008 15:15 GMT</pubDate>
</item>
<item>
   <title>My day job</title>
   <guid isPermaLink="false">my-day-job</guid>
   <link>http://womble.decadent.org.uk/blog/my-day-job.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>I'm employed at <a href="http://www.solarflare.com">Solarflare
Communications</a> 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've been working mostly in Python on
applications for use in-house.</p>

<p>More recently I'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's
20,000-odd lines long.  And without someone doing that, it won't go in.</p>

<p>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.</p>

<p>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 <a href="http://www.openonload.org">OpenOnload</a>.  Google
invited two of my senior colleagues to talk about this - <a
href="http://video.google.com/videoplay?docid=-3058188637025944861">here's
a video of their talk about user-level networking</a>.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Thu, 21 Feb 2008 00:24 GMT</pubDate>
</item>
<item>
   <title>Debian Miniconf 7 recordings</title>
   <guid isPermaLink="false">debian-miniconf-7-recordings</guid>
   <link>http://womble.decadent.org.uk/blog/debian-miniconf-7-recordings.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
Most of the Debian Miniconf 7 sessions at LCA 2008 in Melbourne
were recorded by the LCA video team.  The recordings are now
<a href="http://meetings-archive.debian.net/pub/debian-meetings/2008/miniconf7-lca/">
mirrored on meetings-archive.debian.net</a>.

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Thu, 07 Feb 2008 22:44 GMT</pubDate>
</item>
<item>
   <title>Idea for a new PAM module</title>
   <guid isPermaLink="false">idea-for-a-new-pam-module</guid>
   <link>http://womble.decadent.org.uk/blog/idea-for-a-new-pam-module.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
To guard against late-night administrative mistakes: pam_breathalyser.

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sat, 19 Jan 2008 03:43 GMT</pubDate>
</item>
<item>
   <title>Separated at birth</title>
   <guid isPermaLink="false">separated-at-birth</guid>
   <link>http://womble.decadent.org.uk/blog/separated-at-birth.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<img src="/images/billg-mjg59.jpeg"><br>
L: <a href="http://foto.pho.be/ukuug/photos-ukuug-1/50.html">Bill Gates</a>; R: <a href="http://bp3.blogger.com/_ySCIT3KO9Zc/RmsVLT8dUBI/AAAAAAAAGPc/bdIaEQ2ltzo/s400/Young_Bill_Gates_4.jpg">Matthew Garrett</a>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sun, 13 Jan 2008 23:19 GMT</pubDate>
</item>
<item>
   <title>Introducing ParticleMan</title>
   <guid isPermaLink="false">introducing-particleman</guid>
   <link>http://womble.decadent.org.uk/blog/introducing-particleman.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>As <del>threatened</del> <ins>promised</ins>, 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'll release a first
version now and try to get those updated later.  The new name is ParticleMan.
When I <a
href="http://forums.debian.net/viewtopic.php?t=14731&sid=9e1cf7c52126f5b7aa2b088065a2b22a">put
the name to a vote</a> some time back the winner was Iceparticle, but there's
already an <a href="http://www.icewm.org">icewm</a> and I couldn't resist the
<a href="http://www.tmbg.com">TMBG</a> reference.
(Whoever suggested this name to me: I had already thought of it but forgot to
include it in the poll.)</p>
<p>The packages are in my repository for now.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sun, 11 Nov 2007 18:22 GMT</pubDate>
</item>
<item>
   <title>Ion3 rc-20071109</title>
   <guid isPermaLink="false">ion3-rc-20071109</guid>
   <link>http://womble.decadent.org.uk/blog/ion3-rc-20071109.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>Since ries (ftp-master.debian.org) is still down, I've uploaded
packages for the latest version of Ion3 to my own server.  That's:</p>
<blockquote><pre>
deb http://womble.decadent.org.uk/debian/ sid/
deb-src http://womble.decadent.org.uk/debian/ sid/
</pre></blockquote>
<p>The repository is signed with my personal key.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sun, 11 Nov 2007 01:49 GMT</pubDate>
</item>
<item>
   <title>Publication of DebConf 7 videos</title>
   <guid isPermaLink="false">publication-of-debconf-7-videos</guid>
   <link>http://womble.decadent.org.uk/blog/publication-of-debconf-7-videos.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->

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

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

<p>The conversion to "publication" 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.</p>

<p>My upload bandwidth is only 448 kbit/s so the high-quality files
will take about a week to upload.</p>

<p>As ever, the video files are being published on <a
href="http://meetings-archive.debian.net/pub/debian-meetings/2007/debconf7/">meetings-archive.debian.net</a>.

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sat, 28 Jul 2007 17:39 GMT</pubDate>
</item>
<item>
   <title>Everything you Never Wanted to Know about PKI but were Forced to Find Out</title>
   <guid isPermaLink="false">everything-you-never-wanted-to-know-about-pki-x509-ssl</guid>
   <link>http://womble.decadent.org.uk/blog/everything-you-never-wanted-to-know-about-pki-x509-ssl.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->

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

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Wed, 04 Jul 2007 22:43 GMT</pubDate>
</item>
<item>
   <title>How to use a "system tray" in Ion3</title>
   <guid isPermaLink="false">systray-in-ion3</guid>
   <link>http://womble.decadent.org.uk/blog/systray-in-ion3.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->

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

<blockquote><pre>dopath("mod_dock")</pre></blockquote>

<p>to load mod_dock, which provides a standard corner dock, toggled
using MOD1+D.</p>

<p>However, recent versions also support docking applications in the
status bar, in "system tray" style:</p>

<blockquote><pre>-- In cfg_ion.lua:
defwinprop {
   class = "<var>foo-window-class</var>",
   statusbar = "foo"
}

-- In cfg_statusbar.lua:
mod_statusbar.create {
   ...
   template="... %systray_foo"
}</pre></blockquote>

<p><a href="http://www.gnome.org">GNOME</a> unfortunately uses a
different dock protocol.  However, the <a
href="http://icculus.org/openbox/2/docker/">docker</a> 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:</p>

<blockquote><pre>-- In cfg_ion.lua:
defwinprop {
   class = "Docker",
   statusbar = "dock"
}

-- In cfg_statusbar.lua:
mod_statusbar.create {
   ...
   template="... %systray_dock"
}</pre></blockquote>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Wed, 04 Jul 2007 22:39 GMT</pubDate>
</item>
<item>
   <title>dvswitch in use</title>
   <guid isPermaLink="false">dv-mixer-3</guid>
   <link>http://womble.decadent.org.uk/blog/dv-mixer-3.html</link>
   <description><![CDATA[

<p>It's day 2 of DebConf and <a
href="http://alioth.debian.org/projects/dvswitch/">dvswitch</a> 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.</p>

<p>The most serious problem is that there's no way to start and stop
recording from the GUI.  That'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.</p>

<p>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.</p>

<p>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.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Tue, 19 Jun 2007 01:09 GMT</pubDate>
</item>
<item>
   <title>DebConf video software</title>
   <guid isPermaLink="false">debconf-video-software</guid>
   <link>http://womble.decadent.org.uk/blog/debconf-video-software.html</link>
   <description><![CDATA[

<p>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.</p>

<ul>

<li><a href="http://www.informatik.uni-koeln.de/fai/">FAI</a> for
package installation and configuration on DebConf machines.</li>

<li><a href="http://packages.debian.org/dvgrab">dvgrab</a> for
video grabbing.  We are using a variety of DV cameras, but dvgrab
works well with almost all of them.</li>

<li><a href="http://alioth.debian.org/projects/dvswitch">dvswitch</a>
for switching between multiple cameras and files.</li>

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

<li>A small number of scripts for starting the above three programs
and recording to files.</li>

<li><a href="http://www.icecast.org">Icecast 2</a> 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.)</li>

<li><a href="http://www.caraytech.com/geodns/">GeoDNS</a> and a
monitoring script to resolve streams.video.debconf.org to the nearest
working relay server.</li>

<li>A newly-developed extension to the <a
href="http://pentabarf.org/">Pentabarf</a> 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.</li>

<li>A script to import the details of new recordings into the database
ready for review, run as a cron job.</li>

<li>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!).</li>

</ul>

<p>Most of the custom software and configurations should be included
in the <a
href="http://alioth.debian.org/projects/debconf-video/">debconf-video
project on Alioth</a>.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Tue, 19 Jun 2007 01:07 GMT</pubDate>
</item>
<item>
   <title>MSN Video enforces "free software"</title>
   <guid isPermaLink="false">msn-video-free-software</guid>
   <link>http://womble.decadent.org.uk/blog/msn-video-free-software.html</link>
   <description><![CDATA[
<p>Semi-annoying, semi-amusing:</p>
<img src="/images/msn-video-free-software.png">
<p>I'm using <strike>Firefox</strike> Iceweasel 2.0.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Wed, 09 May 2007 23:36 GMT</pubDate>
</item>
<item>
   <title>Renaming of Ion3 in Debian</title>
   <guid isPermaLink="false">renaming-of-ion3</guid>
   <link>http://womble.decadent.org.uk/blog/renaming-of-ion3.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>Continuing a <a href="http://bugs.debian.org/354622">trend</a> of
<a href="http://cdrecord.berlios.de/">upstream</a> <a
href="http://lists.xensource.com/archives/html/xen-devel/2006-10/msg00095.html">control-freakery</a>,
the <a href="http://modeemi.fi/~tuomov/ion/contact.html">author</a> of
<a href="http://modeemi.fi/~tuomov/ion/">Ion</a> has claimed Ion and
Ion3 as trademarks and set out a <a
href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=422527#10">trademark
policy</a> that will require Debian to rename it.  I've created <a
href="http://forums.debian.net/viewtopic.php?p=69522">a poll</a> for
selecting a new name.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Mon, 07 May 2007 12:55 GMT</pubDate>
</item>
<item>
   <title>Introducing dvswitch</title>
   <guid isPermaLink="false">dv-mixer-2</guid>
   <link>http://womble.decadent.org.uk/blog/dv-mixer-2.html</link>
   <description><![CDATA[

<p>I just released version 0.5.0 of <a
href="http://alioth.debian.org/projects/dvswitch/">dvswitch</a>, the
software DV mixer intended for use at <a
href="http://debconf7.debconf.org">DebConf 7</a>.  I believe I've met
all of the video team's essential <a
href="http://wiki.debconf.org/wiki/DebConf7/videoteam/Mixer#Requirements">requirements</a>
and most of the desirables.</p>

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

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Mon, 30 Apr 2007 08:28 GMT</pubDate>
</item>
<item>
   <title>ACCU Conference</title>
   <guid isPermaLink="false">accu-conference-2007</guid>
   <link>http://womble.decadent.org.uk/blog/accu-conference-2007.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->

<p>I've been meaning to attend the <a
href="http://www.accu.org/index.php/conferences">ACCU Conference</a>
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.</p>

<p>I attended the following sessions:</p>

<h3>Keynote: Improving Collaboration in Open Source Projects, <a
href="http://www.markshuttleworth.com/">Mark Shuttleworth</a></h3>

<p>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 "open source" 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't sound like he's ready to take the lead on that.</p>

<h3>Choose your Poison: Exceptions or Error Codes, <a
href="http://erdani.org/">Andrei Alexandrescu</a></h3>

<p>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'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's
author anticipated pays a high cost in processing time for those
errors.</p>

<p>Andrei's solution involves a class template
<code>Likely&lt;typename T></code> whose instances hold either a
return value of type <code>T</code> 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 <code>T</code> or the
destructor will throw the exception.  This is clever but doesn'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.</p>

<h3>Introduction to Component-Level Testing, John Lakos</h3>

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

<p>Lakos first defined these components as being "physical" 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'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.
</p>

<p>He explained that the test driver's dependencies count just as much
as the implementation'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.</p>

<p>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's interested.</p>

<h3>The Appliance of Science: Things in Computer Science that every
practitioner should know, Andrei Alexandrescu</h3>

<p>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.</p>

<p>He briefly presented four key ideas that he believes programmers
should understand and be ready to make use of:</p>

<ul>

<li><a href="http://en.wikipedia.org/wiki/Dynamic_programming">Dynamic
programming</a>.  The Wikipedia article summarises this as "a method
of solving problems exhibiting the properties of overlapping
subproblems and optimal substructure (described below) that takes much
less time than naive methods".  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 <a
href="http://en.wikipedia.org/wiki/Levenshtein_distance">Levenshtein
distance between words</a> 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.</li>

<li><a
href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29">Garbage
collection</a> 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 <a
href="http://citeseer.ist.psu.edu/hertz05quantifying.html">Hertz and
Berger, Quantifying the Performance of Garbage Collection vs. Explicit
Memory Management, 2005</a>.  However, these numbers show the cost of
GC in Java, specifically Jikes, not as an addition to C or C++.)</li>

<li><a href="http://en.wikipedia.org/wiki/Machine_learning">Machine
learning</a>.  Sometimes we don'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 "smoothness assumption": 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.</li>

<li><a
href="http://en.wikipedia.org/wiki/Transactional_memory">Transactional
memory</a> 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.</li>

</ul>

<h3>Writing for ACCU (BoF)</h3>

<p>I think I've been convinced to write an article about
standardisation of multithreading in C++.</p>

<h3>C++ Threads, <a href="http://www.crowl.org/lawrence/">Lawrence
Crowl</a></h3>

<p>Crowl gave an overview (<a
href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1196.htm">similar
to this</a>) of the extensive work that'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.</p>

<h3>C++0x Initialisation: Lists and a Uniform Syntax, <a
href="http://www.research.att.com/~bs/">Bjarne Stroustrup</a></h3>

<p>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 <code>const
std::initializer_list&lt;T> &amp;</code> 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.</p>

<h3>C++ Standard Library report, Alisdair Meredith</h3>

<p>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.</p>

<hr>

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

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sat, 14 Apr 2007 17:16 GMT</pubDate>
</item>
<item>
   <title>I can't draw cartoons</title>
   <guid isPermaLink="false">i-cant-draw-cartoons</guid>
   <link>http://womble.decadent.org.uk/blog/i-cant-draw-cartoons.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<a href="http://www.bugbash.net/comic/13.html"><img src="http://www.bugbash.net/strips/bug-bash20050815.gif" alt="Cartoon: Signs you're close to shipping"></a>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sat, 24 Mar 2007 15:19 GMT</pubDate>
</item>
<item>
   <title>Gecko and ATI graphics</title>
   <guid isPermaLink="false">gecko-and-ati-graphics</guid>
   <link>http://womble.decadent.org.uk/blog/gecko-and-ati-graphics.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->
<p>Just as Gecko exposes a bug in the nv driver, it can also <a
href="http://bugs.debian.org/342105">provoke poor performance in the ati
driver</a>.  This turns out to be avoidable by <a
href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=342105;msg=35">configuring
X to use the newer driver interface</a>.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sat, 24 Mar 2007 01:11 GMT</pubDate>
</item>
<item>
   <title>Developing a DV mixer</title>
   <guid isPermaLink="false">dv-mixer-1</guid>
   <link>http://womble.decadent.org.uk/blog/dv-mixer-1.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->

<p>For <a href="http://debconf7.debconf.org">this year's DebConf</a>,
we (<a
href="http://lists.debconf.org/mailman/listinfo/debconf-video">the
video team</a>) 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.  <a
href="http://toresbe.at.ifi.uio.no/">Toresbe</a> had a go at writing
one but didn't finish.  I want to give it a go.  So:
<ul>
<li><a href="http://alioth.debian.org/projects/dvswitch/">Alioth
project</a></li>
<li><a
href="http://lists.debconf.org/lurker/thread/20070314.011816.cff4c2fe.en.html">Requirements</a>
(first try)</li>
<li><a
href="http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&item=160093728377">Camera</a></li>
<li>Action?  Er, actually I need a Firewire card first.</li>
</ul>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Thu, 15 Mar 2007 01:18 GMT</pubDate>
</item>
<item>
   <title>New blog</title>
   <guid isPermaLink="false">new-blog</guid>
   <link>http://womble.decadent.org.uk/blog/new-blog.html</link>
   <description><![CDATA[
<!--*- mode: html -*-->

<p>This is my new blog for technical/geeky/Debian stuff.  I'm keeping
my <a href="http://womble2.livejournal.com">LiveJournal</a> for social
and private matters and syndicating this one to Planet Debian.</p>

<p>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't get too hopeful though.</p>

]]></description>
   <category domain="http://womble.decadent.org.uk/blog"></category>
   <pubDate>Sat, 10 Mar 2007 16:55 GMT</pubDate>
</item>
</channel>
</rss>
