<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blogs on Here be dragons</title>
    <link>https://err.no/personal/blog/</link>
    <description>Recent content in Blogs on Here be dragons</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>tfheen@err.no (Tollef Fog Heen)</managingEditor>
    <webMaster>tfheen@err.no (Tollef Fog Heen)</webMaster>
    <lastBuildDate>Mon, 18 May 2026 20:50:00 +0200</lastBuildDate><atom:link href="https://err.no/personal/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Signing UEFI submissions using osslsigncode</title>
      <link>https://err.no/personal/blog/tech/2026-05-18-signing-uefi-bits-from-linux/</link>
      <pubDate>Mon, 18 May 2026 20:50:00 +0200</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2026-05-18-signing-uefi-bits-from-linux/</guid>
      <description>&lt;p&gt;Back when we started with a signed shim in Debian, the tooling was
Windows-only and required me to do a reboot dance and it was all quite
tedious.  Over time, more and more of the tooling has migrated to
Linux and it all works quite well.&lt;/p&gt;
&lt;p&gt;The signing is done with an EV code signing cert from SSL.com and
stored on a Yubikey. Getting the certificate onto the key is a bit
tedious, but reasonably well-explained in the ssl.com docs.&lt;/p&gt;
&lt;p&gt;Microsoft wants the shim binaries uploaded to their partner portal
wrapped in a &lt;code&gt;.cab&lt;/code&gt; file, which should be signed.&lt;/p&gt;
&lt;p&gt;The wrapping in a &lt;code&gt;.cab&lt;/code&gt; file is easy enough: &lt;code&gt;lcab shim.efi shim-unsigned.cab&lt;/code&gt;. It&amp;rsquo;s fine to put shims for multiple architectures
in the same &lt;code&gt;.cab&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Signing of the file is a little bit of a rune:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;osslsigncode sign -pkcs11module /usr/lib/x86_64-linux-gnu/libykcs11.so -key &amp;#34;pkcs11:serial=XXX&amp;#34; -askpass -certs chain.crt -h sha256 -ts http://ts.ssl.com shim-unsigned.cab shim-unsigned.signed.cab
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;chain.crt&lt;/code&gt; contains first our EV code signing cert, then the ssl.com
intermediate EV code signing cert, then the ssl.com EV root cert.  The
naming of the packages is a tiny bit confusing, but it&amp;rsquo;s because the
package name in Debian is &lt;code&gt;shim-unsigned&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Occasionally, processing of uploaded binaries just stops in the
validation stage in the portal, but I&amp;rsquo;ve so far been able to unstuck
them by re-signing and uploading again, and I saw the same with the
MS/Windows toolchain, so I suspect it&amp;rsquo;s just flakiness on the portal
side.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Pronoun support in userdir-ldap</title>
      <link>https://err.no/personal/blog/tech/debian/2025-06-25-ud-ldap-pronouns/</link>
      <pubDate>Wed, 25 Jun 2025 20:00:00 +0000</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2025-06-25-ud-ldap-pronouns/</guid>
      <description>&lt;p&gt;Debian uses LDAP for storing information about users, hosts and other
objects.  The wrapping around this is called userdir-ldap, or ud-ldap
for short.  It provides a mail gateway, web UI and a couple of schemas
for different object types.&lt;/p&gt;
&lt;p&gt;Back in late 2018 and early 2019, we (DSA) removed support for ISO5218
in userdir-ldap, and removed the corresponding data. This made some
people upset, since they were using that information, as imprecise as
it was, to infer people&amp;rsquo;s pronouns.  ISO5218 has four values for sex,
unknown, male, female and N/A.  This might have been acceptable when
the standard was new (in 1976), but it wasn&amp;rsquo;t acceptable any longer in
2018.&lt;/p&gt;
&lt;p&gt;A couple of days ago, I finally got around to adding support to
userdir-ldap to let people specify their pronouns.  As it should be,
it&amp;rsquo;s a free-form text field. (We don&amp;rsquo;t have localised fields in LDAP,
so it probably makes sense for people to put the English version of
their pronouns there, but the software does not try to control that.)&lt;/p&gt;
&lt;p&gt;So far, it&amp;rsquo;s only exposed through the LDAP gateway, not in the web UI.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a Debian developer, you can set your pronouns using&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;echo &amp;#34;pronouns: he/him&amp;#34; | gpg --clearsign | mail changes@db.debian.org
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I see that four people have already done so in the time I&amp;rsquo;ve taken to
write this post.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>DNSSEC, ssh and VerifyHostKeyDNS</title>
      <link>https://err.no/personal/blog/tech/2022-03-22-dnssec-ssh/</link>
      <pubDate>Tue, 22 Mar 2022 20:30:01 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2022-03-22-dnssec-ssh/</guid>
      <description>&lt;p&gt;OpenSSH has this very nice setting, &lt;code&gt;VerifyHostKeyDNS&lt;/code&gt;, which when
enabled, will pull SSH host keys from DNS, and you no longer need to
either trust on first use, or copy host keys around out of band.&lt;/p&gt;
&lt;p&gt;Naturally, trusting unsecured DNS is a bit scary, so this requires the
record to be signed using DNSSEC.  This has worked for a long time,
but then broke, seemingly out of the blue.  Running &lt;code&gt;ssh -vvv&lt;/code&gt; gave
output similar to&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;debug1: found 4 insecure fingerprints in DNS
debug3: verify_host_key_dns: checking SSHFP type 1 fptype 2
debug3: verify_host_key_dns: checking SSHFP type 4 fptype 2
debug1: verify_host_key_dns: matched SSHFP type 4 fptype 2
debug3: verify_host_key_dns: checking SSHFP type 4 fptype 1
debug1: verify_host_key_dns: matched SSHFP type 4 fptype 1
debug3: verify_host_key_dns: checking SSHFP type 1 fptype 1
debug1: matching host key fingerprint found in DNS
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;even though the zone was signed, the resolver was checking the
signature and I even checked that the DNS response had the &lt;code&gt;AD&lt;/code&gt; bit
set.&lt;/p&gt;
&lt;p&gt;The fix was to add &lt;code&gt;options trust-ad&lt;/code&gt; to &lt;code&gt;/etc/resolv.conf&lt;/code&gt;. Without
this, glibc will discard the &lt;code&gt;AD&lt;/code&gt; bit from any upstream DNS
servers. Note that you should only add this if you actually have a
trusted DNS resolver. I run unbound on localhost, so if somebody can
do a man-in-the-middle attack on that traffic, I have other problems.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Blog moved, new tech</title>
      <link>https://err.no/personal/blog/tech/moved_to_hugo/</link>
      <pubDate>Sat, 16 Apr 2016 22:42:27 +0200</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/moved_to_hugo/</guid>
      <description>&lt;p&gt;I moved my blog around a bit and it appears that static pages are now
in favour, so I switched to that, by way of
&lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt;.  CSS and such needs more tweaking, but
it&amp;rsquo;ll make do for now.&lt;/p&gt;
&lt;p&gt;As part of this, RSS feeds and such changed, if you want to subscribe
to this (very seldomly updated) blog, use
&lt;a href=&#34;https://err.no/personal/blog/index.xml&#34;&gt;https://err.no/personal/blog/index.xml&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Temperature monitoring using a Beaglebone Black and 1-wire</title>
      <link>https://err.no/personal/blog/tech/2015-04-22-09-32_1-wire_monitoring_with_a_bbb/</link>
      <pubDate>Wed, 22 Apr 2015 09:32:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2015-04-22-09-32_1-wire_monitoring_with_a_bbb/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve had a half-broken temperature monitoring setup at home for quite
some time. It started out with a Atom-based NAS, a USB-serial adapter
and a passive 1-wire adapter.  It sometimes worked, then stopped
working, then started when poked with a stick.  Later, the NAS was
moved under the stairs and I put a Beaglebone Black in its old place.
The temperature monitoring thereafter never really worked, but I
didn&amp;rsquo;t have the time to fix it.  Over the last few days, I&amp;rsquo;ve managed
to get it working again, of course by replacing nearly all the
existing components.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m using the DS18B20 sensors.  They&amp;rsquo;re about USD 1 a piece on Ebay
(when buying small quantities) and seems to work quite ok.&lt;/p&gt;
&lt;p&gt;My first task was to address the reliability problems: Dropouts and
really poor performance.  I thought the passive adapter was
problematic, in particular with the wire lengths I&amp;rsquo;m using and I
therefore wanted to replace it with something else.  The BBB has GPIO
support, and various blog posts suggested using that.  However, I&amp;rsquo;m
running Debian on my BBB which doesn&amp;rsquo;t have support for DTB
overrides, so I needed to patch the kernel DTB.  (Apparently, DTB
overrides are landing upstream, but obviously not in time for Jessie.)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve never even looked at Device Tree before, but the structure was
reasonably simple and with a &lt;a href=&#34;http://www.bonebrews.com/temperature-monitoring-with-the-ds18b20-on-a-beaglebone-black/&#34;&gt;sample override&lt;/a&gt; from
bonebrews it was easy enough to come up with &lt;a href=&#34;http://err.no/patches/2015-04-beaglebone-gpio-dts.patch&#34;&gt;my patch&lt;/a&gt;.
This uses pin 11 (yes, 11, not 13, read the bonebrews article for
explanation on the numbering) on the P8 block.  This needs to be
compiled into a .dtb.  I found the easiest way was just to drop the
patched &lt;code&gt;.dts&lt;/code&gt; into an unpacked kernel tree and then running &lt;code&gt;make dtbs&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Once this works, you need to compile the &lt;code&gt;w1-gpio&lt;/code&gt; kernel module,
since Debian hasn&amp;rsquo;t yet enabled that.  Run &lt;code&gt;make menuconfig&lt;/code&gt;, find it
under &amp;ldquo;Device drivers&amp;rdquo;, &amp;ldquo;1-wire&amp;rdquo;, &amp;ldquo;1-wire bus master&amp;rdquo;, build it as a
module.  I then had to build a full kernel to get the symversions
right, then build the modules.  I think there is or should be an
easier way to do that, but as I cross-built it on a fast AMD64
machine, I didn&amp;rsquo;t investigate too much.&lt;/p&gt;
&lt;p&gt;Insmod-ing &lt;code&gt;w1-gpio&lt;/code&gt; then works, but for me, it failed to detect any
sensors.  Reading the data sheet, it looked like a pull-up resistor on
the data line was needed.  I had enabled the internal pull-up, but
apparently that wasn&amp;rsquo;t enough, so I added a 4.7kOhm resistor between
pin 3 (&lt;code&gt;VDD_3V3&lt;/code&gt;) on P9 and pin (&lt;code&gt;GPIO_45&lt;/code&gt;) on P8.  With that in
place, my sensors showed up in &lt;code&gt;/sys/bus/w1/devices&lt;/code&gt; and you can read
the values using &lt;code&gt;cat&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In my case, I wanted the data to go into collectd and then to
graphite.  I first tried using an Exec plugin, but never got it to
work properly.  Using a &lt;a href=&#34;http://err.no/src/collectd_w1.py&#34;&gt;python plugin&lt;/a&gt; worked much better and my
graphite installation is now showing me temperatures.&lt;/p&gt;
&lt;p&gt;Now I just need to add more probes around the house.&lt;/p&gt;
&lt;p&gt;The most useful references were&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.bonebrews.com/temperature-monitoring-with-the-ds18b20-on-a-beaglebone-black/&#34;&gt;Bonebrews article&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.godobject.net/articles/8&#34;&gt;Cross compiling official kernel packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://derekmolloy.ie/gpios-on-the-beaglebone-black-using-device-tree-overlays/&#34;&gt;Verifying pin usage&lt;/a&gt;. This is useful for double checking
that your DTB actually exports the pins you expect it to.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, various searches for DS18B20 pinout and similar, of
course.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Resigning as a Debian systemd maintainer</title>
      <link>https://err.no/personal/blog/tech/debian/2014-11-16-23-55_resigning_from_pkg-systemd/</link>
      <pubDate>Sun, 16 Nov 2014 23:55:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2014-11-16-23-55_resigning_from_pkg-systemd/</guid>
      <description>&lt;p&gt;Apparently, people care when you, as privileged person (white, male,
long-time Debian Developer) throw in the towel because the amount of
crap thrown your way just becomes too much.  I guess that&amp;rsquo;s good, both
because it gives me a soap box for a short while, but also because if
enough people talk about how poisonous the well that Debian is has
become, we can fix it.&lt;/p&gt;
&lt;p&gt;This morning, I resigned as a member of the systemd maintainer team.
I then proceeded to leave the relevant IRC channels and announced this
on twitter.  The responses I&amp;rsquo;ve gotten have been almost all been
heartwarming.  People have generally been offering hugs, saying thanks
for the work put into systemd in Debian and so on.  I&amp;rsquo;ve greatly
appreciated those (and I&amp;rsquo;ve been getting those before I resigned too,
so this isn&amp;rsquo;t just a response to that).  I feel bad about leaving the
rest of the team, they&amp;rsquo;re a great bunch: competent, caring, funny,
wonderful people.  On the other hand, at some point I had to draw a
line and say &amp;ldquo;no further&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Debian and its various maintainer teams are a bunch of tribes (with
possibly Debian itself being a supertribe).  Unlike many other
situations, you can be part of multiple tribes.  I&amp;rsquo;m still a member of
the DSA tribe for instance.  Leaving pkg-systemd means leaving one of
my tribes.  That hurts. It hurts even more because it feels like a
forced exit rather than because I&amp;rsquo;ve lost interest or been distracted
by other shiny things for long enough that you don&amp;rsquo;t really feel like
part of a tribe.  That happened with me with debian-installer. It was
my baby for a while (with a then quite small team), then a bunch of
real life thing interfered and other people picked it up and ran with
it and made it greater and more fantastic than before.  I kinda lost
touch, and while it&amp;rsquo;s still dear to me, I no longer identify as part
of the debian-boot tribe.&lt;/p&gt;
&lt;p&gt;Now, how did I, standing stout and tall, get forced out of my tribe?
I&amp;rsquo;ve been a DD for almost 14 years, I should be able to weather any
storm, shouldn&amp;rsquo;t I?  It turns out that no, the mountain does get worn
down by the rain.  It&amp;rsquo;s not a single hurtful comment here and there.
There&amp;rsquo;s a constant drum about this all being some sort of conspiracy
and there are sometimes flares where people wish people involved in
systemd would be run over by a bus or just accusations of
incompetence.&lt;/p&gt;
&lt;p&gt;Our code of conduct says, &amp;ldquo;assume good faith&amp;rdquo;.  If you ever find
yourself not doing that, step back, breathe.  See if there&amp;rsquo;s a
reasonable explanation for why somebody is saying something or
behaving in a way that doesn&amp;rsquo;t make sense to you.  It might be as
simple as your native tongue being English and their being something
else.&lt;/p&gt;
&lt;p&gt;If you do genuinely disagree with somebody (something which is
entirely fine), try not to escalate, even if the stakes are high.
Examples from the last year include talking about this as a war and
talking about &amp;ldquo;increasingly bitter rear-guard battles&amp;rdquo;.  By using and
accepting this terminology, we, as a project, poison ourselves.  &lt;a href=&#34;https://lists.debian.org/debian-devel/2014/11/msg00133.html&#34;&gt;Sam
Hartman&lt;/a&gt; puts this better than me:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;m hoping that we can all take a few minutes to gain empathy for
those who disagree with us.  Then I&amp;rsquo;m hoping we can use that
understanding to reassure them that they are valued and respected
and their concerns considered even when we end up strongly
disagreeing with them or valuing different things.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;d be lying if I said I didn&amp;rsquo;t ever feel the urge to demonise my
opponents in discussions.  That they&amp;rsquo;re worse, as people, than I
am. However, it is imperative to never give in to this, since doing
that will diminish us as humans and make the entire project poorer.
Civil disagreements with reasonable discussions lead to better
technical outcomes, happier humans and a healthier projects.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Redirect loop with interaktiv.nsb.no (and how to fix it)</title>
      <link>https://err.no/personal/blog/tech/2013-11-29-08-37_redirect_loop_with_nsb/</link>
      <pubDate>Fri, 29 Nov 2013 08:37:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2013-11-29-08-37_redirect_loop_with_nsb/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m running a local unbound instance on my laptop to get working
DNSSEC. It turns out that with the captive portal NSB (the Norwegian
national rail company), this doesn&amp;rsquo;t work too well and you get into an
endless series of redirects.  Changing &lt;code&gt;resolv.conf&lt;/code&gt; so you use the
DHCP-provided resolver stops the redirect loop and you can then log
in.  Afterwards, you&amp;rsquo;re free to switch back to using your own local
resolver.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fingerprints as lightweight authentication</title>
      <link>https://err.no/personal/blog/tech/2013-10-03-11-20_fingerprints_as_lightweight_auth/</link>
      <pubDate>Thu, 03 Oct 2013 11:20:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2013-10-03-11-20_fingerprints_as_lightweight_auth/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://blog.dustinkirkland.com/2013/10/fingerprints-are-user-names-not.html&#34;&gt;Dustin Kirkland&lt;/a&gt; recently wrote that &amp;ldquo;Fingerprints are
usernames, not passwords&amp;rdquo;.  I don&amp;rsquo;t really agree, I think fingerprints
are fine for lightweight authentication.  iOS at least allows you to
only require a pass code after a time period has expired, so you don&amp;rsquo;t
have to authenticate to the phone all the time.  Replacing no
authentication with weak authentication (but only for a fairly short
period) will improve security over the current status, even if it&amp;rsquo;s
not perfect.&lt;/p&gt;
&lt;p&gt;Having something similar for Linux would also be reasonable, I think.
Allow authentication with a fingerprint if I&amp;rsquo;ve only been gone for
lunch (or maybe just for a trip to the loo), but require password or
token if I&amp;rsquo;ve been gone for longer.  There&amp;rsquo;s a balance to be struck
between convenience and security.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Getting rid of NSCA using Python and Chef</title>
      <link>https://err.no/personal/blog/tech/2013-06-27-10-09_getting_rid_of_nsca/</link>
      <pubDate>Thu, 27 Jun 2013 10:09:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2013-06-27-10-09_getting_rid_of_nsca/</guid>
      <description>&lt;p&gt;NSCA is a tool used to submit passive check results to nagios.
Unfortunately, an incompatibility was recently introduced between
wheezy clients and old servers.  Since I don&amp;rsquo;t want to upgrade my
server, this caused some problems and I decided to just get rid of
NSCA completely.&lt;/p&gt;
&lt;p&gt;The server side of NSCA is pretty trivial, it basically just adds a
timestamp and a command name to the data sent by the client, then
changes tabs into semicolons and stuffs all of that down Nagios&#39;
command pipe.&lt;/p&gt;
&lt;p&gt;The script I came up with was:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/python
# -* coding: utf-8 -*-

import time
import sys

# format is:
# [TIMESTAMP] COMMAND_NAME;argument1;argument2;…;argumentN
#
# For passive checks, we want PROCESS_SERVICE_CHECK_RESULT with the
# format:
#
# PROCESS_SERVICE_CHECK_RESULT;&amp;lt;host_name&amp;gt;;&amp;lt;service_description&amp;gt;;&amp;lt;return_code&amp;gt;;&amp;lt;plugin_output&amp;gt;
#
# return code is 0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN
#
# Read lines from stdin with the format:
# $HOSTNAME\t$SERVICE_NAME\t$RETURN_CODE\t$TEXT_OUTPUT

if len(sys.argv) != 2:
    print &amp;quot;Usage: {0} HOSTNAME&amp;quot;.format(sys.argv[0])
    sys.exit(1)
HOSTNAME = sys.argv[1]

timestamp = int(time.time())
nagios_cmd = file(&amp;quot;/var/lib/nagios3/rw/nagios.cmd&amp;quot;, &amp;quot;w&amp;quot;)
for line in sys.stdin:
    (_, service, return_code, text) = line.split(&amp;quot;\t&amp;quot;, 3)
    nagios_cmd.write(u&amp;quot;[{timestamp}] PROCESS_SERVICE_CHECK_RESULT;{hostname};{service};{return_code};{text}\n&amp;quot;.format
                     (timestamp = timestamp,
                      hostname = HOSTNAME,
                      service = service,
                      return_code = return_code,
                      text = text))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The reason for the hostname in the line (even though it&amp;rsquo;s overridden)
is to be compatible with &lt;code&gt;send_nsca&lt;/code&gt;&amp;rsquo;s input format.&lt;/p&gt;
&lt;p&gt;Machines submit check results over SSH using its excellent
ForceCommand capabilities, the Chef template for the authorized_keys
file looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;% for host in @nodes %&amp;gt;
command=&amp;quot;/usr/local/lib/nagios/nagios-passive-check-result &amp;lt;%= host[:hostname] %&amp;gt;&amp;quot;,no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa &amp;lt;%= host[:keys][:ssh][:host_rsa_public] %&amp;gt; &amp;lt;%= host[:hostname] %&amp;gt;
&amp;lt;% end %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The actual chef recipe looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nodes = []
search(:node, &amp;quot;*:*&amp;quot;) do |n|
  # Ignore not-yet-configured nodes                                                                       
  next unless n[:hostname]
  next unless n[:nagios]
  next if n[:nagios].has_key?(:ignore)
  nodes &amp;lt;&amp;lt; n
end
nodes.sort! { |a,b| a[:hostname] &amp;lt;=&amp;gt; b[:hostname] }
print nodes

template &amp;quot;/etc/ssh/userkeys/nagios&amp;quot; do
  source &amp;quot;authorized_keys.erb&amp;quot;
  mode 0400
  variables({
              :nodes =&amp;gt; nodes
            })
end

cookbook_file &amp;quot;/usr/local/lib/nagios/nagios-passive-check-result&amp;quot; do
  mode 0555
end

user &amp;quot;nagios&amp;quot; do
  action :manage
  shell &amp;quot;/bin/sh&amp;quot;
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To submit a check, hosts do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;printf &amp;quot;$HOSTNAME\t$SERVICE_NAME\t$RET\t$TEXT\n&amp;quot; | ssh -i /etc/ssh/ssh_host_rsa_key -o BatchMode=yes -o StrictHostKeyChecking=no -T nagios@$NAGIOS_SERVER
&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    
    <item>
      <title>An otter, please (or, a better notification system)</title>
      <link>https://err.no/personal/blog/tech/2013-06-18-09-15_an_otter_please/</link>
      <pubDate>Tue, 18 Jun 2013 09:15:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2013-06-18-09-15_an_otter_please/</guid>
      <description>&lt;p&gt;Recently, there&amp;rsquo;s been discussions on IRC and the debian-devel mailing
list about how to notify users, typically from a cron script or a
system daemon needing to tell the user their hard drive is about to
expire.  The current way is generally &amp;ldquo;send email to root&amp;rdquo; and for
some bits &amp;ldquo;pop up a notification bubble, hoping the user will see
it&amp;rdquo;.  Emailing me means I get far too many notifications.  They&amp;rsquo;re
often not actionable (&lt;code&gt;apt-get update&lt;/code&gt; failed two days ago) and
they&amp;rsquo;re not aggregated.&lt;/p&gt;
&lt;p&gt;I think we need a system that at its core has level and edge triggers
and some way of doing flap detection.  Level interrupts means &amp;ldquo;tell me
if a disk is full right now&amp;rdquo;.  Edge means &amp;ldquo;tell me if the checksums
have changed, even if they now look ok&amp;rdquo;.  Flap detection means &amp;ldquo;tell
me if the nightly &lt;code&gt;apt-get update&lt;/code&gt; fails more often than once a week&amp;rdquo;.
It would be useful if it could extrapolate some notifications too, so
it could tell me &amp;ldquo;your disk is going to be full in $period unless you
add more space&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The system needs to be able to take in input in a variety of formats:
syslog, unstructured output from cron scripts (including their exit
codes), snmp, nagios notifications, sockets and fifos and so on.
Based on those inputs and any correlations it can pull out of it, it
should try to reason about what&amp;rsquo;s happening on the system.  If the
conclusion there is &amp;ldquo;something is broken&amp;rdquo;, it should see if it&amp;rsquo;s
something that it can reasonably fix by itself.  If so, fix it and
record it (so it can be used for notification if appropriate: I want
to be told if you restart apache every two minutes).  If it can&amp;rsquo;t fix
it, notify the admin.&lt;/p&gt;
&lt;p&gt;It should also group similar messages so a single important message
doesn&amp;rsquo;t drown in a million unimportant ones.  Ideally, this should be
cross-host aggregation.  The notifications should be possible to
escalate if they&amp;rsquo;re not handled within some time period.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not aware of such a tool.  Maybe one could be rigged together by
careful application of logstash, nagios, munin/ganglia/something and
sentry.  If anybody knows of such a tool, let me know, or if you&amp;rsquo;re
working on one, also please let me know.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Sharing an SSH key, securely</title>
      <link>https://err.no/personal/blog/tech/2013-03-22-09-45_sharing_an_ssh_key_securely/</link>
      <pubDate>Fri, 22 Mar 2013 09:45:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2013-03-22-09-45_sharing_an_ssh_key_securely/</guid>
      <description>&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; This isn&amp;rsquo;t actually that much better than letting them
access the private key, since nothing is stopping the user from
running their own SSH agent, which can be run under strace.  A better
solution is in the works.  Thanks Timo Juhani Lindfors and Bob Proulx
for both pointing this out.&lt;/p&gt;
&lt;p&gt;At &lt;a href=&#34;https://www.varnish-software.com&#34;&gt;work&lt;/a&gt;, we have a shared SSH key between the different people
manning the support queue.  So far, this has just been a file in a
directory where everybody could read it and people would &lt;code&gt;sudo&lt;/code&gt; to the
support user and then run SSH.&lt;/p&gt;
&lt;p&gt;This has bugged me a fair bit, since there was nothing stopping a
person from making a copy of the key onto their laptop, except policy.&lt;/p&gt;
&lt;p&gt;Thanks to a tip, I got around to implementing this and figured writing
up how to do it would be useful.&lt;/p&gt;
&lt;p&gt;First, you need a directory readable by root only, I use
&lt;code&gt;/var/local/support-ssh&lt;/code&gt; here.  The other bits you need are a small
&lt;code&gt;sudo&lt;/code&gt; snippet and a &lt;code&gt;profile.d&lt;/code&gt; script.&lt;/p&gt;
&lt;p&gt;My sudo snippet looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Defaults!/usr/bin/ssh-add env_keep += &amp;quot;SSH_AUTH_SOCK&amp;quot;
%support ALL=(root)  NOPASSWD: /usr/bin/ssh-add /var/local/support-ssh/id_rsa
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Everybody in group support can run ssh-add as root.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;profile.d&lt;/code&gt; goes in &lt;code&gt;/etc/profile.d/support.sh&lt;/code&gt; and looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if [ -n &amp;quot;$(groups | grep -E &amp;quot;(^| )support( |$)&amp;quot;)&amp;quot; ]; then
    export SSH_AUTH_ENV=&amp;quot;$HOME/.ssh/agent-env&amp;quot;
    if [ -f &amp;quot;$SSH_AUTH_ENV&amp;quot; ]; then
        . &amp;quot;$SSH_AUTH_ENV&amp;quot;
    fi
    ssh-add -l &amp;gt;/dev/null 2&amp;gt;&amp;amp;1
    if [ $? = 2 ]; then
        mkdir -p &amp;quot;$HOME/.ssh&amp;quot;
        rm -f &amp;quot;$SSH_AUTH_ENV&amp;quot;
        ssh-agent &amp;gt; &amp;quot;$SSH_AUTH_ENV&amp;quot;
        . &amp;quot;$SSH_AUTH_ENV&amp;quot;
    fi
    sudo ssh-add /var/local/support-ssh/id_rsa
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The key is unavailable for the user in question because &lt;code&gt;ssh-add&lt;/code&gt; is
sgid and so runs with group ssh and the process is only debuggable for
root.  The only thing missing is there&amp;rsquo;s no way to have the agent
prompt to use a key and I would like it to die or at least unload keys
when the last session for a user is closed, but that doesn&amp;rsquo;t seem
trivial to do.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Abusing sbuild for fun and profit</title>
      <link>https://err.no/personal/blog/tech/2013-01-29-15-32_abusing_sbuild_for_fun_and_profit/</link>
      <pubDate>Tue, 29 Jan 2013 15:32:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2013-01-29-15-32_abusing_sbuild_for_fun_and_profit/</guid>
      <description>&lt;p&gt;Over the last couple of weeks, I have been working on getting
binary packages for &lt;a href=&#34;https://www.varnish-cache.org&#34;&gt;Varnish&lt;/a&gt; modules built.  In the current version,
you need to have a built, unpacked source tree to build a module
against.  This is being fixed in the next version, but until then, I
needed to provide this in the build environment somehow.&lt;/p&gt;
&lt;p&gt;RPMs were surprisingly easy, since our RPM build setup is much simpler
and doesn&amp;rsquo;t use mock/mach or other chroot-based tools.  Just make a
source RPM available and unpack + compile that.&lt;/p&gt;
&lt;p&gt;Debian packages on the other hand, they were not easy to get going.
My first problem was to just get the Varnish source package into the
chroot.  I ended up making a directory in &lt;code&gt;/var/lib/sbuild/build&lt;/code&gt;
which is exposed as &lt;code&gt;/build&lt;/code&gt; once &lt;code&gt;sbuild&lt;/code&gt; runs.  The other hard part
was getting Varnish itself built.  &lt;code&gt;sbuild&lt;/code&gt; exposes two hooks that
could work: a &lt;code&gt;pre-build&lt;/code&gt; hook and a &lt;code&gt;chroot-setup&lt;/code&gt; hook.  Neither
worked:  Pre-build is called before the chroot is set up, so we can&amp;rsquo;t
build Varnish.  Chroot-setup is run before the build-dependencies are
installed and it runs as the user invoking &lt;code&gt;sbuild&lt;/code&gt;, so it can&amp;rsquo;t
install packages.&lt;/p&gt;
&lt;p&gt;Sparc32 and similar architectures use the &lt;code&gt;linux32&lt;/code&gt; tool to set the
personality before building packages.  I ended up abusing this, so I
set HOME to a temporary directory where I create a &lt;code&gt;.sbuildrc&lt;/code&gt; which sets
&lt;code&gt;$build_env_cmnd&lt;/code&gt; to a script which in turns unpacks the Varnish
source, builds it and then chains to &lt;code&gt;dpkg-buildpackage&lt;/code&gt;.  Of course,
the build-dependencies for modules don&amp;rsquo;t include all the
build-dependencies for Varnish itself, so I have to extract those from
the Varnish source package too.&lt;/p&gt;
&lt;p&gt;No source available at this point, mostly because it&amp;rsquo;s beyond ugly.
I&amp;rsquo;ll see if I can get it cleaned up.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>FOSDEM talk: systemd in Debian</title>
      <link>https://err.no/personal/blog/tech/debian/2013-01-28-16-20_fosdem_systemd_in_debian/</link>
      <pubDate>Mon, 28 Jan 2013 16:20:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2013-01-28-16-20_fosdem_systemd_in_debian/</guid>
      <description>&lt;p&gt;Michael Biebl and I are giving a talk on &lt;a href=&#34;https://fosdem.org/2013/schedule/event/debian_systemd/&#34;&gt;systemd in Debian&lt;/a&gt; at
FOSDEM on Sunday morning at 10.  We&amp;rsquo;ll be talking a bit about the
current state in Wheezy, what our plans for Jessie are and what Debian
packagers should be aware of.  We would love to get input from people
about what systemd in Jessie should look like, so if you have any
ideas, opinions or insights, please come along.  If you&amp;rsquo;re just
curious, you are also of course welcome to join.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Gitano – git hosting with ACLs and other shininess</title>
      <link>https://err.no/personal/blog/tech/2013-01-17-07-34_gitano/</link>
      <pubDate>Thu, 17 Jan 2013 07:34:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2013-01-17-07-34_gitano/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.gitano.org.uk&#34;&gt;gitano&lt;/a&gt; is not entirely unlike the
non-web, server side of github.  It allows you to create and manage
users and their SSH keys, groups and repositories from the command
line.  Repositories have ACLs associated with them.  Those can be
complex (&amp;ldquo;allow user X to push to &lt;code&gt;master&lt;/code&gt; in the &lt;code&gt;doc/&lt;/code&gt; subtree) or
trivial (&amp;ldquo;admin can do anything&amp;rdquo;).  Gitano is written by Daniel
Silverstone, and I&amp;rsquo;d like to thank him both for writing it and for
holding my hand as I went stumbling through my initial gitano setup.&lt;/p&gt;
&lt;p&gt;Getting started with Gitano can be a bit tricky, as it&amp;rsquo;s not yet
packaged and fairly undocumented.  Until it is packaged, it&amp;rsquo;s install
from source time.  You need &lt;a href=&#34;http://www.gitano.org.uk/luxio/&#34;&gt;luxio&lt;/a&gt;, &lt;a href=&#34;http://www.gitano.org.uk/lace/&#34;&gt;lace&lt;/a&gt;,
&lt;a href=&#34;http://www.gitano.org.uk/supple/&#34;&gt;supple&lt;/a&gt;, &lt;a href=&#34;http://git.gitano.org.uk/?p=clod.git;a=summary&#34;&gt;clod&lt;/a&gt;, &lt;a href=&#34;http://git.gitano.org.uk/?p=gall.git;a=summary&#34;&gt;gall&lt;/a&gt; and &lt;a href=&#34;http://www.gitano.org.uk&#34;&gt;gitano&lt;/a&gt;
itself.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;luxio&lt;/code&gt; needs a &lt;code&gt;make install LOCAL=1&lt;/code&gt;, the others will be installed
to &lt;code&gt;/usr/local&lt;/code&gt; with just &lt;code&gt;make install&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Once that is installed, create a user to hold the instance.  I&amp;rsquo;ve
named mine &lt;code&gt;git&lt;/code&gt;, but you&amp;rsquo;re free to name it whatever you would like.
As that user, run gitano-setup and answer the prompts.  I&amp;rsquo;ll use
&lt;code&gt;git.example.com&lt;/code&gt; as the host name and &lt;code&gt;john&lt;/code&gt; as the user I&amp;rsquo;m setting this
up for.&lt;/p&gt;
&lt;p&gt;To create users, run &lt;code&gt;ssh git@git.example.com user add john john@example.com John Doe&lt;/code&gt;, then add their SSH key with &lt;code&gt;ssh git@git.example.com as john sshkey add workstation &amp;lt; /tmp/john_id_rsa.pub&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To create a repository, run &lt;code&gt;ssh git@git.example.com repo create myrepo&lt;/code&gt;.  Out of the box, this only allows the owner (typically
&amp;ldquo;admin&amp;rdquo;, unless overridden) to do anything with it.  To change ACLs,
you&amp;rsquo;ll want to grab the &lt;code&gt;refs/gitano/admin&lt;/code&gt; branch.  This lives
outside of the space git usually use for branches, so you can&amp;rsquo;t just
check it out. The easiest way to check it out is to use
&lt;a href=&#34;http://cgit.gitano.org.uk/gitano.git/tree/scripts/git-admin-clone&#34;&gt;git-admin-clone&lt;/a&gt;.  Run it as &lt;code&gt;git-admin-clone git@git.example.com:myrepo ~/myrepo-admin&lt;/code&gt; and then edit in
&lt;code&gt;~/myrepo-admin&lt;/code&gt;.  Use git to add, commit and push as normal from
there.&lt;/p&gt;
&lt;p&gt;To change ACLs for a given repo, you&amp;rsquo;ll want to edit the
&lt;code&gt;rules/main.lace&lt;/code&gt; file.  A real-world example can be found &lt;a href=&#34;http://git.netsurf-browser.org/netsurf.git/tree/rules/main.lace?h=refs/gitano/admin&#34;&gt;in the
NetSurf repository&lt;/a&gt; and the &lt;a href=&#34;http://www.gitano.org.uk/lace/v1.0/docs/syntax-define/&#34;&gt;lace syntax&lt;/a&gt;
might be useful. A lace file consists of four types of lines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Comments, start with &amp;ndash; or #&lt;/li&gt;
&lt;li&gt;defines, look like &lt;code&gt;define name conditions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;allows, look like &lt;code&gt;allow &amp;quot;reason&amp;quot; definition [definition…]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;denials, look like &lt;code&gt;deny &amp;quot;reason&amp;quot; definition [definition…]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rules are processed one by one, from the top and terminate whenever a
matching allow or deny is found.&lt;/p&gt;
&lt;p&gt;Conditions can either be matches to an update, such as &lt;code&gt;ref refs/heads/master&lt;/code&gt; to match updates to the master branch.  To create
groupings, you can use the &lt;code&gt;anyof&lt;/code&gt; or &lt;code&gt;allof&lt;/code&gt; verbs in a definition.
Allows and denials are checked against all the definitions listed and
if all of them match, the appropriate action is taken.&lt;/p&gt;
&lt;p&gt;Pay some attention to what conditions you group together, since a
basic operation (&lt;code&gt;is_basic_op&lt;/code&gt;, aka &lt;code&gt;op_read&lt;/code&gt; and &lt;code&gt;op_write&lt;/code&gt;) happens
before git is even involved and you don&amp;rsquo;t have a tree at that point,
so rules like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define is_master ref refs/heads/master
allow &amp;quot;Devs can push&amp;quot; op_is_basic is_master
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;simply won&amp;rsquo;t work.  You&amp;rsquo;ll want to use a group and check on that for
basic operations and then have a separate rule to restrict refs.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Driving Jenkins using YAML and a bit of python</title>
      <link>https://err.no/personal/blog/tech/varnish/2012-09-04-13-03_jenkins_yaml_and_automation/</link>
      <pubDate>Tue, 04 Sep 2012 13:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/varnish/2012-09-04-13-03_jenkins_yaml_and_automation/</guid>
      <description>&lt;p&gt;We recently switched from &lt;a href=&#34;http://buildbot.net/&#34;&gt;Buildbot&lt;/a&gt; to Jenkins at &lt;a href=&#34;https://www.varnish-software.com/&#34;&gt;work&lt;/a&gt;, for
building Varnish on various platforms.  Buildbot worked-ish, but
was a bit fiddly to get going on some platforms such as Mac OS and
Solaris.  Where buildbot has a daemon on each node that is responsible
for contacting the central host, Jenkins uses SSH as the transport and
centrally manages retries if a host goes down or is rebooted.&lt;/p&gt;
&lt;p&gt;All in all, we are pretty happy with Jenkins, except for one thing:
The job configurations are a bunch of XML files and the way you are
supposed to configure this is through a web interface.  That doesn&amp;rsquo;t
scale particularly well when you want to build many very similar
jobs.  We want to build multiple branches, some which are not public
and we want to build on many slaves.  The latter we could partially
solve with matrix builds, except that will fail the entire build if a
single slave fails with an error that works on retry.  As the number
of slaves increases, such failures become more common.&lt;/p&gt;
&lt;p&gt;To solve this, I hacked together a crude tool that takes a &lt;a href=&#34;http://yaml.org/&#34;&gt;yaml&lt;/a&gt;
file and writes the XML files.  It&amp;rsquo;s not anywhere near as well
structured and pretty as &lt;a href=&#34;http://git.gitano.org.uk/?p=personal/liw/jenkinstool.git;a=summary&#34;&gt;liw&amp;rsquo;s jenkinstool&lt;/a&gt;, but it is quite good
at translating the YAML into a bunch of XML files.  I don&amp;rsquo;t know if
it&amp;rsquo;s useful for anybody else, there is no documentation and so on, but
if you want to take a look, it&amp;rsquo;s &lt;a href=&#34;https://github.com/varnish/jenkins-yaml&#34;&gt;on github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Feedback is most welcome, as usual.  Patches even more so.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Automating managing your on-call support rotation using google docs</title>
      <link>https://err.no/personal/blog/tech/2012-07-23-13-10_gdocs_automation_gammu_and_support/</link>
      <pubDate>Mon, 23 Jul 2012 13:10:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2012-07-23-13-10_gdocs_automation_gammu_and_support/</guid>
      <description>&lt;p&gt;At work, we have a rotation of who is on call at a given time.  We
have few calls, but they do happen and so it&amp;rsquo;s important to ensure
both that a person is available, but also that they&amp;rsquo;re aware they are
on call (so they don&amp;rsquo;t stray too far from their phone or a computer).&lt;/p&gt;
&lt;p&gt;In the grand tradition of abusing spreadsheets, we are using google
docs for the roster.  It&amp;rsquo;s basically just two columns, one with date
and one with user name.  Since the volume is so low, people tend to be
on call for about a week at a time, 24 hours a day.&lt;/p&gt;
&lt;p&gt;Up until now, we&amp;rsquo;ve just had a pretty old and dumb phone that people
have carried around, but that&amp;rsquo;s not really swish, so I have
implemented a small system which grabs the current data, looks up the
support person in LDAP and sends SMSes when people go on and off duty
as well as reminding the person who&amp;rsquo;s on duty once a day.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested, you can look at the (slightly redacted)
&lt;a href=&#34;http://err.no/src/vs-support-phone&#34;&gt;script&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Today&#39;s rant about RPM</title>
      <link>https://err.no/personal/blog/tech/2011-10-21-16-04_todays_rant_about_rpm/</link>
      <pubDate>Fri, 21 Oct 2011 16:04:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2011-10-21-16-04_todays_rant_about_rpm/</guid>
      <description>&lt;p&gt;Before I start, I&amp;rsquo;ll admit that I&amp;rsquo;m not a real RPM packager.  Maype
I&amp;rsquo;m approaching this from completely the wrong direction, what do I
know?&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m in the process of packaging Varnish 3.0.2 which includes mangling
the spec file.  The top of the spec file reads:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;%define v_rc
%define vd_rc %{?v_rc:-%{?v_rc}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Apparently, this is not legal, since we&amp;rsquo;re trying to define v_rc as a
macro with no body.  It&amp;rsquo;s however not possible to directly define it
as an empty string which can later be tested on, you have to do
something like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;%define v_rc %{nil}
%define vd_rc %{?v_rc:-%{?v_rc}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, this doesn&amp;rsquo;t work correctly either.  &lt;code&gt;%{?macro}&lt;/code&gt; tests if macro
is defined, not whether it&amp;rsquo;s an empty string so instead of two lines,
we have to write:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;%define v_rc %{nil}
%if 0%{?v_rc} != 0
%define vd_rc %{?v_rc:-%{?v_rc}}
%endif
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;0{?v_rc} != 0&lt;/code&gt; workaround is there so that we don&amp;rsquo;t accidentially
end up with &lt;code&gt; == 0&lt;/code&gt; which would be a syntax error.&lt;/p&gt;
&lt;p&gt;I think having four lines like that is pretty ugly, so I looked for a
workaround and figured that, ok, I&amp;rsquo;ll just rewrite every use of
&lt;code&gt;%{vd_rc}&lt;/code&gt; to &lt;code&gt;%{?v_rc:-%{?v_rc}}&lt;/code&gt;.  There are only a couple, so the
damage is limited.  Also, I&amp;rsquo;d then just comment out the &lt;code&gt;v_rc&lt;/code&gt;
definition, since that makes it clear what you should uncomment to
have a release candidate version.&lt;/p&gt;
&lt;p&gt;In my naivety, I tried:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# %define v_rc &amp;quot;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;#&lt;/code&gt; is used as a comment character in spec files, but apparently not
for defines.  The define was still processed and the build process
stopped pretty quickly.&lt;/p&gt;
&lt;p&gt;Luckily, doing &lt;code&gt;# % define &amp;quot;&amp;quot;&lt;/code&gt; seems to work fine and is not
processed.  I have no idea how people put up with this or if I&amp;rsquo;m doing
something very wrong.  Feel free to point me at a better way of doing
this, of course.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The SugarCRM rest interface</title>
      <link>https://err.no/personal/blog/tech/2011-10-05-09-40_sugarcrm_rest_interface/</link>
      <pubDate>Wed, 05 Oct 2011 09:40:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2011-10-05-09-40_sugarcrm_rest_interface/</guid>
      <description>&lt;p&gt;We use SugarCRM at work and I&amp;rsquo;ve complained about its not-very-RESTy
REST interface.  John Mertic a (the?) SugarCRM Community Manager asked
me about what problems I&amp;rsquo;d had (apart from its lack of RESTfulness)
and I said I&amp;rsquo;d write a blog post about it.&lt;/p&gt;
&lt;p&gt;In our case, the REST interface is used to integrate Sugar and RT so
we get a link in both interfaces to jump from opportunities to the
corresponding RT ticket (and back again).  This should be a fairly
trivial exercise or so you would think.&lt;/p&gt;
&lt;p&gt;The problems, as I see it are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not REST-y.&lt;/li&gt;
&lt;li&gt;Exposes the database tables all the way through the REST interface&lt;/li&gt;
&lt;li&gt;Lack of useful documentation forcing the developer to cargo cult and
guess&lt;/li&gt;
&lt;li&gt;Annoying data structures&lt;/li&gt;
&lt;li&gt;Forced pagination&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My first gripe is the complete lack of REST in the URLs.  Everything
is just sent to &lt;code&gt;https://sugar/service/v2/rest.php&lt;/code&gt;.  Usually a POST,
but sometimes a GET.  It&amp;rsquo;s not documented what to use where.&lt;/p&gt;
&lt;p&gt;The POST parameters we send when logging in are:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;method=&amp;gt;&amp;quot;login&amp;quot;
input_type=&amp;gt;&amp;quot;JSON&amp;quot;
response_type=&amp;gt;&amp;quot;JSON&amp;quot;
rest_data=&amp;gt;json($params)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;$params is a hash as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;user_auth =&amp;gt; {
            user_name =&amp;gt; $USERNAME,
            password =&amp;gt; $PW,
            version =&amp;gt; &amp;quot;1.2&amp;quot;,
},
application =&amp;gt; &amp;quot;foo&amp;quot;,
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nothing seems to actually care about the value of &lt;code&gt;application&lt;/code&gt;, nor
about the &lt;code&gt;user_auth.version&lt;/code&gt; value.  The password is the md5 of the
actual password, hex encoded.  I&amp;rsquo;m not sure why it is, as this adds
absolutely no security, but it is.  This is also not properly
documented.&lt;/p&gt;
&lt;p&gt;This gives us a JSON object back with a somewhat haphazard selection
of attributes (reformatted here for readability):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
     &amp;quot;id&amp;quot;:&amp;quot;&amp;lt;hex session id&amp;gt;,
     &amp;quot;module_name&amp;quot;:&amp;quot;Users&amp;quot;,
     &amp;quot;name_value_list&amp;quot;: {
             &amp;quot;user_id&amp;quot;: {
                     &amp;quot;name&amp;quot;:&amp;quot;user_id&amp;quot;,
                     &amp;quot;value&amp;quot;:&amp;quot;1&amp;quot;
             },
             &amp;quot;user_name&amp;quot;: {
                     &amp;quot;name&amp;quot;:&amp;quot;user_name&amp;quot;,
                     &amp;quot;value&amp;quot;:&amp;quot;&amp;lt;username&amp;gt;&amp;quot;
             },
             &amp;quot;user_language&amp;quot;: {
                     &amp;quot;name&amp;quot;:&amp;quot;user_language&amp;quot;,
                     &amp;quot;value&amp;quot;:&amp;quot;en_us&amp;quot;
             },
             &amp;quot;user_currency_id&amp;quot;: {
                     &amp;quot;name&amp;quot;:&amp;quot;user_currency_id&amp;quot;,
                 &amp;quot;value&amp;quot;:&amp;quot;-99&amp;quot;
             },
             &amp;quot;user_currency_name&amp;quot;: {
                     &amp;quot;name&amp;quot;:&amp;quot;user_currency_name&amp;quot;,
                     &amp;quot;value&amp;quot;:&amp;quot;Euro&amp;quot;
             }
     }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What is the &lt;code&gt;module_name&lt;/code&gt;?  No real idea.  In general, when you get
back an &lt;code&gt;id&lt;/code&gt; and a &lt;code&gt;module_name&lt;/code&gt; field, it tells you that the id
exists is an object that exists in the context of the given module.
Not here, since the session id is not a user.&lt;/p&gt;
&lt;p&gt;The worst here is the &lt;code&gt;name_value_list&lt;/code&gt; concept which is used all over
the REST interface. First, it&amp;rsquo;s not a list, it&amp;rsquo;s a hash.  Secondly, I
have no idea what would be wrong by just using keys directly in the
top level object, so the object would have looked somewhat like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
     &amp;quot;id&amp;quot;:&amp;quot;&amp;lt;hex session id&amp;gt;,
     &amp;quot;user_id&amp;quot;: 1,
     &amp;quot;user_name&amp;quot;: &amp;quot;&amp;lt;username&amp;gt;,
     &amp;quot;user_language&amp;quot;:&amp;quot;en_us&amp;quot;,
     &amp;quot;user_currency_id&amp;quot;: &amp;quot;-99&amp;quot;,
     &amp;quot;user_currency_name&amp;quot;: &amp;quot;Euro&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some people might argue that since you can have custom field names
this can cause clashes.  Except, it can&amp;rsquo;t, since they&amp;rsquo;re all suffixed
with &lt;code&gt;_c&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So we&amp;rsquo;re now logged in and can fetch all opportunities.  This we do by
posting:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;method=&amp;gt;&amp;quot;get_entry_list&amp;quot;,
input_type=&amp;gt;&amp;quot;JSON&amp;quot;,
response_type=&amp;gt;&amp;quot;JSON&amp;quot;,
rest_data=&amp;gt;to_json([
            $sid,
            $module,
            $where,
            &amp;quot;&amp;quot;,
            $next,
            $fields,
            $links,
            1000
])
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$sid&lt;/code&gt; is our session id from the login&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$module&lt;/code&gt; is &amp;ldquo;Opportunities&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$where&lt;/code&gt; is &lt;code&gt;opportunities_cstm.rt_id_c IS NOT NULL&lt;/code&gt;.  Yes, that&amp;rsquo;s
right.  An SQL fragment right there and you have to know that you&amp;rsquo;ll
join the &lt;code&gt;opportunities_cstm&lt;/code&gt; and &lt;code&gt;opportunities&lt;/code&gt; tables because we
are using a custom field.  I find this completely crazy.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$next&lt;/code&gt; starts out at 0 and we&amp;rsquo;re limited to 1000 entries at a time.
There is, apparently, no way to say &amp;ldquo;just give me all you have&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt; $fields&lt;/code&gt; is an array, in our case consisting of &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;,
&lt;code&gt;description&lt;/code&gt;, &lt;code&gt;rt_id_c&lt;/code&gt; and &lt;code&gt;rt_status_c&lt;/code&gt;.  To find out the field
names, look at the database schema or poke around in the SugarCRM
studio.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$links&lt;/code&gt; is to link records together.  I still haven&amp;rsquo;t been able to
make this work properly and just do multiple queries.&lt;/li&gt;
&lt;li&gt;1000 is the maximum number of records.  No, you can&amp;rsquo;t say -1 and get
everything.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why this is a list rather than a hash?  Again, I don&amp;rsquo;t know.  A hash
would make more sense to me.&lt;/p&gt;
&lt;p&gt;The resulting JSON looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    &amp;quot;result_count&amp;quot; : 16,
    &amp;quot;relationship_list&amp;quot; : [],
    &amp;quot;entry_list&amp;quot; : [
       {
          &amp;quot;name_value_list&amp;quot; : {
             &amp;quot;rt_status_c&amp;quot; : {
                &amp;quot;value&amp;quot; : &amp;quot;resolved&amp;quot;,
                &amp;quot;name&amp;quot; : &amp;quot;rt_status_c&amp;quot;
             },
             […]
          },
          &amp;quot;module_name&amp;quot; : &amp;quot;Opportunities&amp;quot;,
          &amp;quot;id&amp;quot; : &amp;quot;&amp;lt;entry_uuid&amp;gt;&amp;quot;
       },
       […]
    ],
    &amp;quot;next_offset&amp;quot; : 16
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, &lt;code&gt;entry_list&lt;/code&gt; actually is a list here, which is good and all, but
there&amp;rsquo;s still the annoying &lt;code&gt;name_value_list&lt;/code&gt; concept.&lt;/p&gt;
&lt;p&gt;Last, we want to update the record in Sugar, to do this we do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;method=&amp;gt;&amp;quot;set_entry&amp;quot;,
input_type=&amp;gt;&amp;quot;JSON&amp;quot;,
response_type=&amp;gt;&amp;quot;JSON&amp;quot;,
rest_data=&amp;gt;to_json([
    $sid,
    &amp;quot;Opportunities&amp;quot;,
    $fields
])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;$fields&lt;/code&gt; is not a &lt;code&gt;name_value_list&lt;/code&gt;, but instead is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    &amp;quot;rt_status_c&amp;quot; : &amp;quot;resolved&amp;quot;,
    &amp;quot;id&amp;quot; : &amp;quot;&amp;lt;status text&amp;gt;&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Why this works and my attempts at using a proper &lt;code&gt;name_value_list&lt;/code&gt;
didn&amp;rsquo;t work?  I have no idea.&lt;/p&gt;
&lt;p&gt;I think that pretty much sums it up.  I&amp;rsquo;m sure there are other
problems in there (such as the over 100 lines of support code for the
about 20 lines of actual code that does useful work), though.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Bizarre slapd (and gnutls) failures</title>
      <link>https://err.no/personal/blog/tech/2011-08-31-10-30_bizarre_slapd_failures/</link>
      <pubDate>Wed, 31 Aug 2011 10:30:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2011-08-31-10-30_bizarre_slapd_failures/</guid>
      <description>&lt;p&gt;Just this morning, I was setting up TLS on a LDAP host, but &lt;code&gt;slapd&lt;/code&gt;
refused to start afterwards with a bizarre error message:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TLS init def ctx failed: -207
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The key and certificate was freshly generated using &lt;code&gt;openssl&lt;/code&gt; on my
laptop (running wheezy, so OpenSSL 1.0.0d-3).  After a bit of
googling, I discovered that -207 is gnutls-esque for &amp;ldquo;Base64 error&amp;rdquo;.
Of course, the key looks just fine and decodes fine using &lt;code&gt;base64&lt;/code&gt;,
&lt;code&gt;openssl base64&lt;/code&gt; and even gnutls&amp;rsquo;s own &lt;code&gt;certtool&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now, &lt;code&gt;certtool&lt;/code&gt; also spits out what it considers the right base64
version of the key and I noticed it differed.  Using the one
&lt;code&gt;certtool&lt;/code&gt; output seems to work, though, so if you ever run into this
problem try running the key through &lt;code&gt;certtool --infile foo.pem -k&lt;/code&gt; and
use the base64 representation it outputs.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>libvmod_curl – using cURL from inside Varnish Cache</title>
      <link>https://err.no/personal/blog/tech/2011-08-03-11-44_libvmod_curl/</link>
      <pubDate>Wed, 03 Aug 2011 11:44:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2011-08-03-11-44_libvmod_curl/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s sometimes necessary to be able to access HTTP resources from
inside VCL.  Some use cases include authentication or authorization
where a service validates a token and then tell Varnish whether to
proceed or not.&lt;/p&gt;
&lt;p&gt;To do this, we recently implemented &lt;a href=&#34;https://github.com/varnish/libvmod-curl&#34;&gt;&lt;code&gt;libvmod_curl&lt;/code&gt;&lt;/a&gt; which is a set of
cURL bindings for VCL so you can fetch remote resource easily.  HTTP
would be the usual method, but cURL also supports other protocols such
as LDAP or POP3.&lt;/p&gt;
&lt;p&gt;The API is very simple, to use it you would do something like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;require curl;

sub vcl_recv {
    curl.fetch(&amp;quot;http://authserver/validate?key=&amp;quot; + regsub(req.url, &amp;quot;.*key=([a-z0-9]+), &amp;quot;\1&amp;quot;));
    if (curl.status() != 200) {
        error 403 &amp;quot;Go away&amp;quot;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Other methods you can use are &lt;code&gt;curl.header(headername)&lt;/code&gt; to get the
contents of a given header and &lt;code&gt;curl.body()&lt;/code&gt; to get the body of the
response.  See the README file in the source for more information.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Upgrading Alioth</title>
      <link>https://err.no/personal/blog/tech/debian/2011-05-21-11-14_alioth_upgrade/</link>
      <pubDate>Sat, 21 May 2011 11:14:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2011-05-21-11-14_alioth_upgrade/</guid>
      <description>&lt;p&gt;A while ago, we got another machine for hosting Alioth and so we
started thinking about how to use that machine.  It&amp;rsquo;s a used machine
and not massively faster than the current hardware, so just moving
everything over wouldn&amp;rsquo;t actually get us that much of a performance
upgrade.&lt;/p&gt;
&lt;p&gt;However, Alioth is using FusionForge, which is supposed to be able to
run on a cluster of machines.  After all, this was originally built
for SourceForge.net, which certainly does not run on a single host.
So, a split of services is what we&amp;rsquo;ll do.&lt;/p&gt;
&lt;p&gt;This weekend, we&amp;rsquo;re having a sprint in &lt;a href=&#34;http://www.collabora.com/&#34;&gt;Collabora&amp;rsquo;s&lt;/a&gt; office in
Cambridge, actually implementing the split and doing a bit of general
planning for the future.&lt;/p&gt;
&lt;p&gt;Last afternoon (Friday), European time, we started the migration.  The
first step is to move all the data off the Xen guest on wagner, where
Alioth is currently hosted.  This finished a few minutes ago; it turns
out syncing about 8.5 million files across almost 400G of data takes a
little while.&lt;/p&gt;
&lt;p&gt;The new host is called vasks and will host the database, run the main
apache and be the canonical location for the various SCM
repositories.&lt;/p&gt;
&lt;p&gt;We are not decomissioning wagner, but it&amp;rsquo;ll be reinstalled without Xen
or other virtualisation which should help performance a bit.  It&amp;rsquo;ll
host everything that has lower performance requirements such as cron
jobs, mailing lists and so on.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll try to keep you all updated and feel free to drop by #alioth on
irc.debian.org if you have any questions.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>My Varnish is leaking memory</title>
      <link>https://err.no/personal/blog/tech/varnish/2010-11-30-14-03_my_varnish_is_leaking/</link>
      <pubDate>Tue, 30 Nov 2010 14:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/varnish/2010-11-30-14-03_my_varnish_is_leaking/</guid>
      <description>&lt;p&gt;Every so often, we get bug reports about Varnish leaking memory.
People have told Varnish to use 20 gigabytes for cache and they
discover the process is eating 30 gigabytes of memory and they get
confused about what&amp;rsquo;s going on.  So, let&amp;rsquo;s take a look.&lt;/p&gt;
&lt;p&gt;First, a little bit of history.  Varnish 2.0 had a fixed per-object
workspace which was used for both header manipulations in &lt;code&gt;vcl_fetch&lt;/code&gt;
as well as for storing the headers of the object when &lt;code&gt;vcl_fetch&lt;/code&gt; was
done.  The default size of this workspace was 8k.  If we assume an
average object size of 20k, that is almost 1/3 of the store being
overhead.&lt;/p&gt;
&lt;p&gt;With 2.1, this changed.  First, &lt;code&gt;vcl_fetch&lt;/code&gt; doesn&amp;rsquo;t have &lt;code&gt;obj&lt;/code&gt; any
longer, it only has &lt;code&gt;beresp&lt;/code&gt; which is the backend response.  At the
end of &lt;code&gt;vcl_fetch&lt;/code&gt;, the headers and other relevant bits of the backend
response are copied into an object.  This means we no longer have a
fixed overhead, we use what we need.  Of course, we&amp;rsquo;re still subject
to malloc&amp;rsquo;s whims when it comes to page sizes and how it actually
allocates memory.&lt;/p&gt;
&lt;p&gt;Less overhead means more objects in the store.  More objects in the
store, means, everything else being equal, more overhead outside the
store (for the hash buckets or critbit tree and other structs).  This
is where lots of people get confused, since what they see is just
Varnish consuming more memory.  When moving from 2.0 to 2.1, people
should lower their cache size.  How much depends on the amount of
objects they have, but if they have many and small objects, a
significant reduction might be needed.  For a machine dedicated to
Varnish, we usually recommend making the cache size be 70-75% of the
memory of the machine.&lt;/p&gt;
&lt;p&gt;A reasonable question to ask at this point is what all this overhead
is being used for.  Part of it is a per-thread overhead.  Linux has a
10MB stack size by default, but luckily, most of it isn&amp;rsquo;t allocated,
so it only counts against virtual, not resident memory.  In addition,
we have a hash algorithm which has overhead and the headers from the
objects are stored in the object itself and not in the stevedore
(object store).  Last, but by no means least, we usually see an
overhead of around 1k per object, but I have seen up to somewhere
above 2k.  This doesn&amp;rsquo;t sound like much, but when you&amp;rsquo;re looking at
servers with 10 million objects, 1k of overhead means 10 gigabytes of
total overhead, leading to the confusion I talked about at the start.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Temperature logging with 1-wire</title>
      <link>https://err.no/personal/blog/tech/2010-11-02-07-22_temperature_sensors_around_the_house/</link>
      <pubDate>Tue, 02 Nov 2010 07:22:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2010-11-02-07-22_temperature_sensors_around_the_house/</guid>
      <description>&lt;p&gt;Last night, I finally got my temperature sensors going, including
a nice and shiny &lt;a href=&#34;http://munin-monitoring.org/&#34;&gt;munin&lt;/a&gt; plugin giving me &lt;a href=&#34;http://err.no/munin/err.no/xeimaizi.err.no-ow_.html&#34;&gt;pretty
graphs&lt;/a&gt;.  So far, I only have a sensor in the loft, but I&amp;rsquo;ll
spend some days putting sensors in the rest of the house as well.&lt;/p&gt;
&lt;p&gt;Robert McQueen asked me on twitter how this all was set up, so I
figured I&amp;rsquo;d blog about it.  The sensors I&amp;rsquo;m using are the DS18B20 ones
from Dallas Semiconductor.  You can probably buy them from your local
electronics supplier, but mine charges around 75 NOK a piece, so I
just bought some off Ebay.  It takes a bit longer, but I paid about
1/10th the price.&lt;/p&gt;
&lt;p&gt;For logging, I&amp;rsquo;m using my NAS, which is just a machine running Debian,
an USB to serial adapter and an &lt;a href=&#34;http://www.bergek.com/2009/02/26/serial-temperature-sensor-hardware/&#34;&gt;serial-to-1-wire adapter&lt;/a&gt;.
Thanks a lot to Martin Bergek for the writeup and the ELFA part
numbers for diodes.&lt;/p&gt;
&lt;p&gt;Since I&amp;rsquo;m lazy, I ended up just writing a &lt;a href=&#34;http://err.no/src/ow_&#34;&gt;plugin&lt;/a&gt; for
&lt;a href=&#34;http://munin-monitoring.org/&#34;&gt;munin&lt;/a&gt;.  It uses &lt;code&gt;owfs&lt;/code&gt;, which I downloaded from
mentors.debian.net.  I also offered sponsorship for it, assuming a
few small issues are cleaned up, so hopefully you can install using
just Debian in the near future.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;owfs&lt;/code&gt; is fairly easy to work with, and the plugin uses the aliased
names if you provide aliases, so you can know what the temperature in
a given location is, rather than having to remember 64 bit serial
numbers.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>First impressions of the Kenwood AT641</title>
      <link>https://err.no/personal/blog/life/2010-09-14-22-28_kenwood_at641_review/</link>
      <pubDate>Tue, 14 Sep 2010 22:28:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/life/2010-09-14-22-28_kenwood_at641_review/</guid>
      <description>&lt;p&gt;I recently got my hands on a Kenwood &lt;a href=&#34;http://www.kenwoodworld.com/en/Products/Kitchen-Machines/Attachments/AT641/&#34;&gt;AT641&lt;/a&gt;, a fruit juicer
attachment for the Chef/Major series of kitchen machines, and now I&amp;rsquo;ve
had the pleasure of actually using it.&lt;/p&gt;
&lt;p&gt;The AT641 is a high-speed, rotational juicer which works by the
principle of making a puree of the apples (or whatever else you&amp;rsquo;re
juicing), using a spinning plate with sharp studs on it, and then
accelerating the puree against a cone-shaped piece of metal with small
slots in it, working somewhat like a sieve.  The juice drips down and
is collected into a jug, the meaty bits of the apple is sent up and
out into a small container for the bits that are thrown away.&lt;/p&gt;
&lt;p&gt;It works reasonably well, the apple chute is quite large, so only
large apples need to be cut in two, and none of the apples in the
bucket I was testing with needed to be cut in more than two, and the
apple juice I got out was nice and smooth, yet had some apply bits in
it.  It&amp;rsquo;s not clear, but that&amp;rsquo;s the way I prefer it, you can filter it
later if you prefer clear juices.  The build quality seems quite good
with sturdy metal parts and thick plastics.  It&amp;rsquo;s easy to dismantle
once you&amp;rsquo;ve done it once, as there&amp;rsquo;s a trick to remove some of the
parts.&lt;/p&gt;
&lt;p&gt;On the downside, I had problems with it not managing to throw all the
residual bits into the garbage container.  They stuck to the to
plastic above the metal cone and ended up clogging.  This might be due
to using the wrong kind of apples or something odd like that, but it
was nevertheless a bit disappointing.  I hope it will work better on
my next batch.  Cleaning the juicer requires dismantling it completely
(which is done without any tools), and is fairly easy, except for some
crooks that are hard to clean properly, especially given you can&amp;rsquo;t
inspect them visually.&lt;/p&gt;
&lt;p&gt;The whole process was fairly painless, including gathering an overfull
bucket of apples, I spent an hour and a half making almost four litres
of delicious apple juice.&lt;/p&gt;
&lt;p&gt;All in all, I&amp;rsquo;m reasonably happy with the buy and hope my clogging
problems are just a fluke.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The Bridge of Allan, Ben Nevis</title>
      <link>https://err.no/personal/blog/beer/2010-04-05-19-45_bridge_of_allan_ben_nevis/</link>
      <pubDate>Mon, 05 Apr 2010 19:45:00 +0200</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/beer/2010-04-05-19-45_bridge_of_allan_ben_nevis/</guid>
      <description>&lt;p&gt;Ben Nevis is the tallest mountain on the British Isles and also the
name of one of the beers that the Bridge of Allan brewery makes.  We
visited the brewery around the start of the year.  One of the beers we
brought back was a Ben Nevis, described as a ruby red IPA.  I&amp;rsquo;d
classify it as more of a dark amber or brown ale.  The taste is quite
hoppy without being too bitter and with a fair amount of malt.  A bit
of fizz for a British beer, but I quite like it that way.  All in all,
a good and drinkable brown ale.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Why I think you should publish your infrastructure</title>
      <link>https://err.no/personal/blog/tech/2010-03-27-15-55_why_you_should_publish_your_infrastructure/</link>
      <pubDate>Sat, 27 Mar 2010 15:55:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2010-03-27-15-55_why_you_should_publish_your_infrastructure/</guid>
      <description>&lt;p&gt;GNOME&amp;rsquo;s current sysadmin team is entirely volunteer-based, but as they
are having problems finding enough (trusted) volunteers they are
looking at hiring a part-time sysadmin.  From looking at the GNOME
wiki, it looks like they have had a meeting about the shortage of
sysadmins. Citing from &lt;a href=&#34;http://live.gnome.org/Sysadmin/AdvisoryMeeting/FormalTeam&#34;&gt;the minutes&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The biggest problem that we&amp;rsquo;ve always had with the maintaining an
active sysadmin team is the need for trust. If somebody shows up
and wants to help out with a GNOME coding project, then it&amp;rsquo;s easy
to build up trust over time. Suggest a project, have the person
send patches, review the patches, if the patches are good,
eventually give them direct commit access. However, for sysadmin
work, we get a lot of people who want to help out, but it&amp;rsquo;s very
hard for someone to contribute without being given a &amp;ldquo;dangerous&amp;rdquo;
level of access to the GNOME systems.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Without having looked very hard, I would guess at the GNOME
infrastructure being about as open as most proprietary software
projects.  There&amp;rsquo;s no way for me, as a third party to take a look at
their infrastructure, take a look at their ticket backlog and submit
patches for problems.  Similarly, their nagios setup is behind a
password prompt, so there&amp;rsquo;s no way for me to look at what services
often have performance problems, suggest new monitors or point out
any servers or services that are not monitored.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not saying this to pick on GNOME, and as I&amp;rsquo;ll touch on below, they
do seem to mostly do the right thing, and as one of the
Freedesktop.org sysadmins, I know we&amp;rsquo;re not any better at least not
yet.&lt;/p&gt;
&lt;p&gt;One way to make it at least somewhat easier to contribute and get
involved is to use a tool like &lt;a href=&#34;http://wiki.opscode.com/display/chef/Home&#34;&gt;Chef&lt;/a&gt; or &lt;a href=&#34;http://projects.puppetlabs.com/projects/puppet/&#34;&gt;Puppet&lt;/a&gt; and
publishing the recipes.  This won&amp;rsquo;t magically make everything
transparent, but it&amp;rsquo;ll be a big step up.  Ideally, the recipes should
be complete enough that you can bootstrap a working system from them
and so easier reproduce the infrastructure and any problems.  It seems
like GNOME is using puppet, but I couldn&amp;rsquo;t find the recipes.&lt;/p&gt;
&lt;p&gt;Moving a complete infrastructure from something managed by hand to
something managed using automation tools is a fairly big and involved
process.  However, if you&amp;rsquo;re serious about getting more people
involved in your sysadmin team, I think it&amp;rsquo;s one of the more
reasonable ways to opening up.  It also means that when one of your
servers is stolen, catches fire or suffers other catastrophic failure
you can rebuild the service much quicker.&lt;/p&gt;
&lt;p&gt;My last point is to open up your ticket tracker.  Most tickets aren&amp;rsquo;t
security sensitive, so provide a way for people to mark those tickets
that are sensitive as such and make the rest public.  The GNOME wiki
makes this a bit confusing as it talks a bit about RT, but it seems
like they actually use bugzilla for sysadmin tickets and just hide
security-sensitive ones.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>A small explanation about the yubikey</title>
      <link>https://err.no/personal/blog/tech/2010-03-16-08-41_yubikey_a_small_explanation/</link>
      <pubDate>Tue, 16 Mar 2010 08:41:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2010-03-16-08-41_yubikey_a_small_explanation/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://etbe.coker.com.au/2010/03/15/yubikey/&#34;&gt;Russell Coker&lt;/a&gt; recently reviewed the Yubikey.  The article
mentions me, so I figured I&amp;rsquo;d correct a minor thing and respond to one
of the comments.&lt;/p&gt;
&lt;p&gt;First, the &lt;code&gt;yubikey-server-c&lt;/code&gt; is my reimplementation of the Yubikey
authentication protocol.  Yubico provides two implementations, one in
PHP and one in Java, neither which I&amp;rsquo;m particuarly interesting on
building my system security on. Any bugs, misfeatures, etc in the C
implementation are mine and mine alone.&lt;/p&gt;
&lt;p&gt;Barak A. Pearlmutter, one of the commenters on Russell&amp;rsquo;s blog writes:&lt;/p&gt;
&lt;p&gt;i don’t understand. isn’t this thing vulnerable to eavesdropping and
replaying? even if &lt;em&gt;it&lt;/em&gt; has a counter which changes etc, the things
it is talking to (web sites) can’t know that some generated string
is being reused. and it doesn’t even have a clock, so these things
can be old.&lt;/p&gt;
&lt;p&gt;The way the Yubikey works is you have a central authentication server.
This has a secret shared with the key.  Setting this secret is the
primary function of the personalisation tool.  When you press the
button, the key takes its internal state (various counters, uid field,
etc) and encrypts this using AES-128.  This is then sent to the
application you are trying to access, be it Wordpress, SSH or
something else.  Said application then contacts the authentication
server which decrypts the ticket, checks the values of the counters to
make sure it&amp;rsquo;s not a replay and responds with OK, bad ticket, replay
and various other status codes.  Based on this, the application grants
or denies access.&lt;/p&gt;
&lt;p&gt;There are really two places you could attack this: in the
communication between the web browser and application or between
application and authentication server.  Both of those can be secured
using SSL.&lt;/p&gt;
&lt;p&gt;There is no way to use a single yubikey in multiple authentication
realms without extra software.  To do this, you would have a OpenID
provider that uses the Yubikey for authentication, or you could have a
Kerberos server with cross-realm trust.&lt;/p&gt;
&lt;p&gt;As for the PAM modules and other tools so far not being packaged, yes,
I know, I might fix it, but the current setup has the bits I use, as I
use RADIUS authentication to get services to support both Yubikey and
passwords.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Upgrading freedesktop.org hosts</title>
      <link>https://err.no/personal/blog/tech/2010-02-16-08-43_upgrading_fdo/</link>
      <pubDate>Tue, 16 Feb 2010 08:43:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2010-02-16-08-43_upgrading_fdo/</guid>
      <description>&lt;p&gt;I recently upgraded &lt;code&gt;kemper.freedesktop.org&lt;/code&gt; to lenny.  Collabora are
nice enough to sponsor some of my sysadmin work for freedesktop and so
making sure we are actually running a supported distribution was a
good start.  The actual dist-upgrade went fine, but when I rebooted
with a 2.6.26 kernel, it just hung in the early boot phase.  Luckily,
a newer kernel worked fine.  However, a newer kernel also breaks the
NFS kernel server in Lenny.  A short backport later, NFS was working
fine, except &lt;code&gt;annarchy&lt;/code&gt; (which NFS mounts from &lt;code&gt;kemper&lt;/code&gt;) didn&amp;rsquo;t have
&lt;code&gt;nfs-common&lt;/code&gt; installed at all, meaning it lacked &lt;code&gt;mount.nfs&lt;/code&gt;.  Ooops.&lt;/p&gt;
&lt;p&gt;Now, bugs was broken.  It used an SSH tunnel from annarchy to kemper,
but the startup script was nowhere to be found.  I replaced it with a
trivial stunnel setup which has the added advantage of reconnecting if
the tunnel goes down.&lt;/p&gt;
&lt;p&gt;The ssh config had to be fixed slightly.  We used to use an old and
patched &lt;code&gt;sshd&lt;/code&gt; that stored all the keys in a single file.  I added
a tiny script to split that again.  We also had MkHomeDir in sshd&amp;rsquo;s
config, now replaced with &lt;code&gt;pam_mkhomedir&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Another interesting thing I learnt is that the iLO ssh daemon chucks
you out if you try to send enviromental options to it.  Like, &lt;code&gt;LANG&lt;/code&gt;
which is sent by default.  Slightly confusing, but easy enough to fix
once I knew what the problem was.&lt;/p&gt;
&lt;p&gt;In addition to &lt;code&gt;kemper&lt;/code&gt;, I upgraded, but did not reboot &lt;code&gt;fruit&lt;/code&gt; (the
admin and LDAP host), due to not having the iLO password.  I did not
want to risk sitting there with a non-booting machine I could not
fix.  It&amp;rsquo;s going to be rebooted at some later stage.  I also did not
have the iLO password for &lt;code&gt;gabe&lt;/code&gt;, which runs mail and some other faff,
so I&amp;rsquo;ll have to schedule some more downtime in the near future.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How free is the N900?</title>
      <link>https://err.no/personal/blog/tech/2010-01-25-18-03_how_free_is_the_n900/</link>
      <pubDate>Mon, 25 Jan 2010 18:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2010-01-25-18-03_how_free_is_the_n900/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.lucas-nussbaum.net/blog/?p=433&#34;&gt;Lucas&lt;/a&gt; asks about how free the N900 is, whether he can download and
recompile and reflash.  I&amp;rsquo;ll try to answer some of those questions.&lt;/p&gt;
&lt;p&gt;No, you can&amp;rsquo;t download all the source.  Part of it is just not open.
I am not privy to Nokia&amp;rsquo;s decisions on why or why not to open up, but
it seems like the user interface bits are only partially open.  Hildon
itself is open so you can poke at widgets and see how those work.  The
address book is not open.  The telepathy component that talks to the
cellular modem is not open.&lt;/p&gt;
&lt;p&gt;As for having to accept EULAs, I honestly don&amp;rsquo;t remember accepting one
of those, but I&amp;rsquo;m not going to say there are none.  There&amp;rsquo;s at least
one which is every time you install a package where you have to check
a box saying &amp;ldquo;Yes, I know this package is third party and will not sue
Nokia if it causes my house to burn down, my wife to divorce me or
causes somebody to steal the car&amp;rdquo;. It&amp;rsquo;s annoying, but I&amp;rsquo;m willing to
live with it.&lt;/p&gt;
&lt;p&gt;The contents of apt&amp;rsquo;s &lt;code&gt;sources.list&lt;/code&gt; is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deb https://downloads.maemo.nokia.com/fremantle/ssu/apps/ ./ 
deb https://downloads.maemo.nokia.com/fremantle/ssu/mr0 ./ 
deb https://downloads.maemo.nokia.com/fremantle/ovi/ ./ 
deb http://repository.maemo.org/extras/ fremantle free non-free
deb http://repository.maemo.org/extras-devel/ fremantle free non-free
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(technically, it comes from
&lt;code&gt;/etc/apt/sources.list.d/hildon-application-manager.list&lt;/code&gt;, not
sources.list.)&lt;/p&gt;
&lt;p&gt;I believe the built-in applications are generally not free, so
rebuilding everything that is free will for instance leave you without
any address book UI, the built-in map application or camera.  Sadly,
the X driver is also proprietary, so you won&amp;rsquo;t be able to see anything
either.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think you can usefully install another free distro on the
N900.  You might be able to, at some point, assuming somebody goes to
the effort.&lt;/p&gt;
&lt;p&gt;The last question is &amp;ldquo;- Besides the non-free telephony stack, are
there any other “antifeatures” I should be aware of?&amp;rdquo;.  The telephony
stack is implemented around Telepathy, which is LGPL-ed free software.
While it&amp;rsquo;s correct that &lt;code&gt;telepathy-ring&lt;/code&gt; (which talks to the cellular
modem), the call UI and most of the address book are proprietary, the
rest of Telepathy is free.  There are SIP and XMPP connection managers
that are free, and you can install more connection managers for MSN,
IRC and so on.&lt;/p&gt;
&lt;p&gt;Also, I think it&amp;rsquo;s important to emphasise that the telephony stack
does not contain any antifeatures.  The closest thing you would be
able to find is probably the restriction to one active and one held
call at the same time, but as one of the developers said: &amp;ldquo;That&amp;rsquo;s to
prevent the UI from going mad&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;While I like to tout the N900 as a free phone, it is in no way
completely free.  Large parts of it are free, and almost as
importantly: most of the programming interfaces are free and at least
somewhat documented, so if somebody wants to replace the built-in
camera application with a free one, they can replace the DBus
interface that the camera app provides.  Ditto for maps applications,
the address book and so on.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Moving SMS-es and contacts from iphone to N900</title>
      <link>https://err.no/personal/blog/tech/2010-01-17-09-55_iphone_n900_convert_address_book_sms_es/</link>
      <pubDate>Sun, 17 Jan 2010 09:55:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2010-01-17-09-55_iphone_n900_convert_address_book_sms_es/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using an iphone since late 2007 as my primary phone and so
I&amp;rsquo;ve gotten quite a few contacts and SMS conversations stored on it.
Now that Collabora has given me a nice and shiny N900, I wanted to
move my contacts and conversations over, but this proved to be a bit
more work than expected.  Please note that the following procedure
worked for me, I have tried to take reasonable steps to prevent
anything breaking, but if something breaks, you get to keep both
pieces.  I am not responsible and this comes with absolutely no
warranty.  Take backups.&lt;/p&gt;
&lt;p&gt;What you need&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the addressbook and SMS SQLite databases.  On my phone, they live
in &lt;code&gt;/var/mobile/Library/AddressBook&lt;/code&gt; and &lt;code&gt;/var/mobile/Library/SMS&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A copy of my &lt;a href=&#34;http://err.no/src/iphone-contacts-convert.pl&#34;&gt;iphone-contacts-convert&lt;/a&gt; script.  It&amp;rsquo;s
written in Perl and should be reasonably easy to understand.  Put
it in the same directory as &lt;code&gt;AddressBook.sqlitedb&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A copy of my &lt;a href=&#34;http://err.no/src/iphone-export-sms.pl&#34;&gt;iphone-export-sms&lt;/a&gt; script.  It&amp;rsquo;s also written
in Perl and should also be reasonably easy to understand.  Put it
in the same directory as &lt;code&gt;sms.db&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The smstools program you can get from &lt;a href=&#34;http://talk.maemo.org/showthread.php?t=37354&#34;&gt;this thread on
talk.maemo.org&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The address book conversion script takes the SQLite database structure
and converts that into a VCF file.  It should be completely safe to
run multiple times (it only does &lt;code&gt;SELECT&lt;/code&gt; from the different tables in
the contacts database, and you have made backups, haven&amp;rsquo;t you?).&lt;/p&gt;
&lt;p&gt;If it dies with an &amp;ldquo;Unknown property&amp;rdquo;, &amp;ldquo;Unknown label&amp;rdquo; or other error,
you can poke it and see if you can work out what&amp;rsquo;s wrong or drop me an
email and I&amp;rsquo;ll see if I can help you.  Assuming it doesn&amp;rsquo;t fall over,
it will spit out a series of VCards, which you should store in a file,
which you then to the N900 and open in the address book.  Assuming
you have less than 1000 contacts, they should now all be in your
address book.  If you have more, you need to split the file.&lt;/p&gt;
&lt;p&gt;A couple of known limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It doesn&amp;rsquo;t handle some of the attributes, like job title, notes,
department, display names, prefix and suffix.  None of my contacts
used those, so I just didn&amp;rsquo;t care.  Patches to change this
accepted.  Also, it doesn&amp;rsquo;t handle custom attributes and
birthdays.  I intended to handle birthdays, but forgot and I have
few enough contacts with birthdays that I just did it by hand.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When it hits something it doesn&amp;rsquo;t know how to handle, it stops and
you need to add the relevant handle to the code.  I think it is
mostly clear, how to, but again, feel free to contact me with any
problems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Only tested on firmware version 2.2.  Yes, ancient, but it&amp;rsquo;s what
my iphone is running.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you have contacts that are organisations, they will come up with
a blank full name.  Just edit them on the N900 (pressing edit and
then save immediately works fine) and they&amp;rsquo;ll be automatically
fixed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No picture support.  This looked a bit involved, so I didn&amp;rsquo;t do
this bit.  Should be possible with a bit of effort.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The procedure for exporting and importing SMS-es is a bit more
involved.  First, export the sms-es by running the perl script.  It
spits out a tab-separated file which you should copy to the N900 along
with the &lt;code&gt;smsimporter&lt;/code&gt; program from the smstools thread.  Run
&lt;code&gt;./smsimporter foo.csv&lt;/code&gt; and you should get all your SMS-es put into
the conversation app.  I ended up compiling my own smsimporter based
on the 0.2.1 from the thread with the UUID patch too.  Read the whole
thread and it should be fairly clear.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>N900 – first impressions</title>
      <link>https://err.no/personal/blog/tech/2009-12-15-18-53_n900_initial_impressions/</link>
      <pubDate>Tue, 15 Dec 2009 18:53:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2009-12-15-18-53_n900_initial_impressions/</guid>
      <description>&lt;p&gt;Collabora was kind enough to buy N900s for all its employees.  Yay!  I
got mine on Friday and has been playing around with it quite a bit.
It&amp;rsquo;s very shiny and the user experience is a lot better than the
N810.  There are a few graphical glitches, it seems it&amp;rsquo;s XDamage
damaging a bit of a window and it&amp;rsquo;s just not quick enough to repaint.
Not a problem, and it has far fewer instances of just hanging for half
a second which my iPhone has.  That is, it hasn&amp;rsquo;t had any of those
yet.&lt;/p&gt;
&lt;p&gt;The screen is good, but resistive.  Takes a short while to get used to
when you&amp;rsquo;re used to capacative, but it&amp;rsquo;s not a problem at all.  The
keyboard is good, but I need to map something as the compose key.
Having US/UK key caps and using the Norwegian layout is a bit
confusing.  Not really the fault of the device though.&lt;/p&gt;
&lt;p&gt;The web browser is generally quite good.  The gestures take a bit of
time to get used to, but they&amp;rsquo;re not hard as such.  Some of the
default &amp;ldquo;applications&amp;rdquo; are implemented as just links to the web pages
of services like Twitter, which is a bit silly as you don&amp;rsquo;t even get a
version that&amp;rsquo;s optimised for the N900.  They&amp;rsquo;re not useless, but they
are absolutely nowhere near a real application.  Also, the &amp;ldquo;Store&amp;rdquo;
(Ovi Store) application/web page says &amp;ldquo;coming soon&amp;rdquo;, which is quite
odd.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure if I can change the selection of applications on the
default application list, but modifying the desktop is easy.  There
seems to be few themes and background images available so far, at
least in anything resembling official repositories.  Hopefully this
will improve over time.&lt;/p&gt;
&lt;p&gt;So far, I haven&amp;rsquo;t actually written any code for the N900.  I have some
applications I want to write, mostly widget-style apps like &amp;ldquo;when does
the next bus home leave from a bus stop close to me and where is the
bus stop&amp;rdquo;, but also some other ones.&lt;/p&gt;
&lt;p&gt;Battery life is not great.  It almost did 48 hours today with a bit of
use underway, and I did charge it before it ran completely out, but
when I&amp;rsquo;m used to closer to a week, it&amp;rsquo;s not that good.  Camera seems
good and is quite fast, I think it took less than five seconds from
opening the camera shutter until I had taken a picture.  Shutter delay
is quite bad at about a third or half a second, but this is a mobile
phone (or mobile computer, as Nokia likes to call it) and not a DSLR,
so I&amp;rsquo;m quite happy with it.&lt;/p&gt;
&lt;p&gt;As a phone, it seems fine so far.  I can make calls and accept calls
and there&amp;rsquo;s no noticeable problems with it.  It also functions as a
modem/DUN over bluetooth, which is quite useful.&lt;/p&gt;
&lt;p&gt;Build quality seems good, there&amp;rsquo;s a good feeling when sliding the
keyboard in and out, but only time will tell how good it actually is.&lt;/p&gt;
&lt;p&gt;So far, I&amp;rsquo;m happy with it, it&amp;rsquo;s a big step up from my previous UK
phone (which is a Nokia E70; my iPhone is a 2G phone so I can&amp;rsquo;t use it
here with the provider I&amp;rsquo;m using).  Hopefully I&amp;rsquo;ll post more happy
stories about it in the days to come.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>ekey happiness</title>
      <link>https://err.no/personal/blog/tech/2009-12-03-13-38_ekey_happiness/</link>
      <pubDate>Thu, 03 Dec 2009 13:38:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2009-12-03-13-38_ekey_happiness/</guid>
      <description>&lt;p&gt;In my last post about the ekey, I complained about two things: memory
leak in the server and missing reconnects if the client was
disconnected for any reason.  I&amp;rsquo;ve meaning to blog about the follow up
for while, but haven&amp;rsquo;t had the time before now.&lt;/p&gt;
&lt;p&gt;Quite quickly after my blog post, Simtec engineers got in touch on IRC
and we worked together to find out what the memory leak problem was.
They also put in the reconnect support I asked for.  All this in less
than a week, for a device which only cost £36.&lt;/p&gt;
&lt;p&gt;To make things even better, they picked up some other small bug
fixes/requests from me, such as making &lt;code&gt;ekeyd-egd-linux&lt;/code&gt; just Suggest
&lt;code&gt;ekeyd&lt;/code&gt; and the latest release (1.1.1) seems to have fixed some more
problems.&lt;/p&gt;
&lt;p&gt;All in all, I&amp;rsquo;m very happy about it.  To make things even better, Ian
Molton (of Collabora) has been busy fixing up &lt;code&gt;virtio_rng&lt;/code&gt; in the
kernel and adding EGD support (including reconnection support) to qemu
and thereby KVM.  Hopefully all this hits the next stable releases and
I can retire my egd-over-stunnel hack.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Package workflow</title>
      <link>https://err.no/personal/blog/tech/debian/2009-11-05-08-31_package_workflow/</link>
      <pubDate>Thu, 05 Nov 2009 08:31:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2009-11-05-08-31_package_workflow/</guid>
      <description>&lt;p&gt;As 3.0 format packages are now allowed into the archive, I am thinking
about what I would like the workflow to look like and hoping one of
them fits me.&lt;/p&gt;
&lt;p&gt;For new upstream releases, I am imaginging something like:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;New upstream version is released.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;git fetch&lt;/code&gt; + merge into upstream branch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Import tarballs, preferably in their original format (bz2/gzip),
using &lt;code&gt;pristine-tar&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Merge upstream to debian branch.  Do necessary fixups and
adjustments.  At this point, the upstream..debian branch delta is
what I want to apply to the upstream release.  The reason I need
to apply this delta is so I get all generated files into the
package that&amp;rsquo;s built and uploaded.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The source package has two functions at this point: Be a starting
point for further hacking; and be the source that buildds use to
build the binary Debian packages.&lt;/p&gt;
&lt;p&gt;For the former, I need the git repository itself.  It is
increasingly my preferred form of modification and so I consider
it part of the source.&lt;/p&gt;
&lt;p&gt;For the latter, it might be easiest just to ship the
&lt;code&gt;orig.tar.{gz,bz2}&lt;/code&gt; and the upstream..debian delta.  This does
require the upstream..debian delta not to change any generated
files, which I think is a fair requirement.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;rsquo;m not actually sure which source format can give me this.  I think
maybe the &lt;code&gt;3.0 (git)&lt;/code&gt; format can, but I haven&amp;rsquo;t played around with it
enough to see.  I also don&amp;rsquo;t know if any tools actually support this
workflow.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Distributing entropy</title>
      <link>https://err.no/personal/blog/tech/2009-11-02-21-23_distributing_entropy/</link>
      <pubDate>Mon, 02 Nov 2009 21:23:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2009-11-02-21-23_distributing_entropy/</guid>
      <description>&lt;p&gt;Back at the Debian barbeque party at the end of August, I got myself
an &lt;a href=&#34;http://www.entropykey.co.uk/&#34;&gt;EntropyKey&lt;/a&gt; from the kind folks at &lt;a href=&#34;http://www.simtec.co.uk/&#34;&gt;Simtec&lt;/a&gt;.  It has
been working so well that I haven&amp;rsquo;t really had a big need to blog
about it.  Plug it in and watch
&lt;code&gt;/proc/sys/kernel/random/entropy_avail&lt;/code&gt; never empty.&lt;/p&gt;
&lt;p&gt;However, Collabora, where I am a sysadmin also got one.  We are using
a few virtual machines rather than physical machines as we want the
security domains, but don&amp;rsquo;t have any extreme performance needs.  Like
most VMs they have been starved from entropy.  One problem presents
itself: how do we get the entropy from the host system where the key
is plugged in to the virtual machines?&lt;/p&gt;
&lt;p&gt;Kindly enough the &lt;code&gt;ekeyd&lt;/code&gt; package also includes &lt;code&gt;ekeyd-egd-linux&lt;/code&gt;
which speaks EGD, the TCP protocol the Entropy Gathering Daemon
defined a long time ago.  &lt;code&gt;ekeyd&lt;/code&gt; itself can also output in the same
protocol, so this should be easy enough, or so you would think.&lt;/p&gt;
&lt;p&gt;Our VMs are all bridged together on the same network that is also
exposed to the internet and the EGD protocol doesn&amp;rsquo;t support any kind
of encryption, so in order to be safe rather than sorry, I decided to
encrypt the entropy.  Some people think I&amp;rsquo;m mad for encrypting what is
essentially random bits, but that&amp;rsquo;s me for you.&lt;/p&gt;
&lt;p&gt;So, I ended up setting up &lt;code&gt;stunnel&lt;/code&gt;, telling &lt;code&gt;ekeyd&lt;/code&gt; on the host to
listen to &lt;code&gt;localhost&lt;/code&gt; on a given port, and &lt;code&gt;stunnel&lt;/code&gt; to forward
connections to that port.  On each VM, I set up &lt;code&gt;stunnel&lt;/code&gt; to forward
connections from a given port on localhost to the port physical
machine where stunnel is listening.  &lt;code&gt;ekeyd-linux-egd&lt;/code&gt; is then told to
connect to the port on localhost where stunnel is listening.  After a
bit of certificate fiddling and such, I can do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# pv -rb &amp;lt; /dev/random &amp;gt; /dev/null  
17.5kB [4.39kB/s] 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;which is way, way better than what you will get without a hardware
RNG.  The hardware itself seems to be delivering about 32kbit/s of
entropy.&lt;/p&gt;
&lt;p&gt;My only gripes at this point is that the EGD implementation could use
a little bit more work.  It seems to leak memory in the EGD server
implementation.  Also, it would be very useful if the client would
reconnect if it was disconnected for any reason.  Even with those
missing bits, I&amp;rsquo;m happy about the key so far.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Airport WLAN woes</title>
      <link>https://err.no/personal/blog/tech/2009-07-02-21-52_telefonica_fail/</link>
      <pubDate>Thu, 02 Jul 2009 21:52:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2009-07-02-21-52_telefonica_fail/</guid>
      <description>&lt;p&gt;Dear whoever runs the Telefonica APs in both Rio de Janeiro and Sao
Paulo airports: Your DNS servers are returning SERVFAIL and has been
doing so for quite a while.  This is not helpful, perhaps you should set
up some monitoring of them?&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Rendering GPX files using libchamplain and librest</title>
      <link>https://err.no/personal/blog/tech/2009-06-19-07-33_rendering_gpx_using_libchamplain_and_librest/</link>
      <pubDate>Fri, 19 Jun 2009 07:33:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2009-06-19-07-33_rendering_gpx_using_libchamplain_and_librest/</guid>
      <description>&lt;p&gt;A little while ago, I read &lt;a href=&#34;http://www.robster.org.uk/blog/2009/06/13/a-little-bit-more-restful/&#34;&gt;robster&amp;rsquo;s post about librest&lt;/a&gt;,
and it looked quite neat.  I have had a plan for visualising GPX files
for quite a while, hopefully with something that allows you to look at
data for various bits of a track, like speed and the time you where
there, but for various reasons, I haven&amp;rsquo;t had the time before.&lt;/p&gt;
&lt;p&gt;Last night, I took a little time to glue librest and libchamplain
together.  libchamplain is a small gem of a library, quite nice to work
with and with the 0.3.3 release, it got support for rendering polygons.
The result is in this screenshot:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://err.no/images/2009-06-19-gpx-libchamplain-rest.png&#34; alt=&#34;librest + libchamplain screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;This is about 160 lines of C, all included.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>varnishlog&#39;s poor man&#39;s filtering language</title>
      <link>https://err.no/personal/blog/tech/varnish/2008-12-17-10-14_poor_mans_filtering_language/</link>
      <pubDate>Wed, 17 Dec 2008 10:14:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/varnish/2008-12-17-10-14_poor_mans_filtering_language/</guid>
      <description>&lt;p&gt;Currently, &lt;code&gt;varnishlog&lt;/code&gt; does not support very advanced filtering.  If
you run it with &lt;code&gt;-o&lt;/code&gt;, you can also do a regular expression match on tag&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;expression.  An example would be &lt;code&gt;varnishlog -o TxStatus 404&lt;/code&gt; to only
show log records where the transmitted status is 404 (not found).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While in Brazil, I needed something a bit more expressive.  I needed
something that would tell me if I had &lt;code&gt;vcl_recv&lt;/code&gt; call &lt;code&gt;pass&lt;/code&gt; and the URL
ended in &lt;code&gt;.jpg&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;varnishlog -o -c | perl -ne &#39;BEGIN { $/ = &amp;quot;&amp;quot;;} print if
(/RxURL.*jpg$/m and /VCL_call.*recv pass/);&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;fixed this for me.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ruby/Gems packaging (it&#39;s java all over again)</title>
      <link>https://err.no/personal/blog/tech/2008-12-15-11-58_ruby_rails_package_woes_java_again/</link>
      <pubDate>Mon, 15 Dec 2008 11:58:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-12-15-11-58_ruby_rails_package_woes_java_again/</guid>
      <description>&lt;p&gt;It is sad to see how &lt;a href=&#34;http://www.sukria.net/en/?p=265&#34;&gt;people&lt;/a&gt; &lt;a href=&#34;http://www.grep.be/blog/en/computer/cluebat/rails_followup&#34;&gt;complain&lt;/a&gt; about
how packaging Ruby gems is painful.  It seems like it is the Java
packaging game all over again where any application ships its
dependencies in a &lt;code&gt;lib/&lt;/code&gt; directory (or in the case of Rails,
&lt;code&gt;vendor/&lt;/code&gt;).  Mac OS X applications seem to do some of the same thing
by shipping lots of libraries in their application bundle, which is
really just a directory with some magic files in it.&lt;/p&gt;
&lt;p&gt;This is of course just like static linking, which we made away with
for most software many years ago, mostly due to the pain associated
with any kind of security updates.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; What I find sad is that people keep making the same mistakes
we made and corrected years ago, not that people are complaining
about those mistakes.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>!Internet</title>
      <link>https://err.no/personal/blog/tech/2008-11-28-21-31_not_internet/</link>
      <pubDate>Fri, 28 Nov 2008 21:31:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-11-28-21-31_not_internet/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;qurzaw (0.0.0.0)                                                 Fri Nov 28 21:34:28 2008
Keys:  Help   Display mode   Restart statistics   Order of fields   quit

                             Last  60 pings
 1. 10.125.123.1             ............................................................
 2. 10.84.0.1                .??????.......??????.......??????......???????......??????..
 3. c9110002.virtua.com.br   .????????.....??????..?..?????????..??????????.?..?.??????.?
 4. embratel-G2-0-1-ngacc01. .??????.......??????.......??????......???????......??????..
 5. ebt-T0-5-5-0-21-tcore01. .??????.......??????.......??????......??????.......??????..
 6. 200.230.251.133          .??????.......??????.......??????......??????.......??????.?
 7. 200.230.251.154          .??????.......??????....?.???????......??????.......??????..
 8. ebt-G4-2-intl03.rjo.embr .??????.......??????......???????......??????.......??????..
 9. ebt-ge-5-2-0-intl02.mian .??????......???????......???????......??????.......??????..
10. p4-1-0-3.r01.miamfl02.us .??????......???????...?..???????......??????.?.....??????..
11. xe-1-3-0.r20.miamfl02.us .??????......???????......??????.......??????.....&amp;gt;.??????..
12. as-2.r21.asbnva01.us.bb. .??????......???????......??????.......??????.?...&amp;gt;.??????.
13. po-4.r05.asbnva01.us.bb. ???????.?.????????????...??????????..????????.???.?????????
14. 64.208.110.253           ???????......???????......??????.......??????..?...???????.
15. 208.178.61.66            ???????......???????......??????.......??????......???????.
16. vlan1455-10ge.c1.hmg.osl ???????......??????.......??????.......??????....&amp;gt;.???????.
17. c1.hmg.osl.no.webdealnet ???????......??????.......??????.......??????......???????.
18. vuizook.err.no           ??????.......??????.......??????.......??????......??????..

Scale:  .:41 ms  1:101 ms  2:161 ms  3:301 ms  a:661 ms  b:1002 ms  c:1602 ms
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is my current internet connectivity.  Yay, or something.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How to handle reference material in a VCS?</title>
      <link>https://err.no/personal/blog/tech/2008-11-24-23-03_archiving_reference_material/</link>
      <pubDate>Mon, 24 Nov 2008 23:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-11-24-23-03_archiving_reference_material/</guid>
      <description>&lt;p&gt;I tend to have a bunch of reference material stored in my home
directory.  Everything from RFCs, which is trivial to get at again using
a quick rsync command (but immensely useful when I want to look up
something and am not online) to requirements specifications for systems
I made years and years ago.&lt;/p&gt;
&lt;p&gt;If I didn&amp;rsquo;t use a VCS, I would just store those in a directory off my
home directory, to be perused whenever I felt the need.  Now, with a VCS
controlling my &lt;code&gt;~&lt;/code&gt;, it feels like I should be able to get rid of those,
and just look them up again if I ever need them.  However, this poses a
few problems, such as &amp;ldquo;how do you keep track of not only what is in a
VCS, but also what has ever been there&amp;rdquo;.  Tools like &lt;code&gt;grep&lt;/code&gt; doesn&amp;rsquo;t work
so well across time, even though git has a grep command too, it still
doesn&amp;rsquo;t cut it for non-ASCII data formats.&lt;/p&gt;
&lt;p&gt;Does anybody have a good solution to this problem?  I can&amp;rsquo;t think I&amp;rsquo;m
the only one who have the need for good tools here.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>network configuration tools, for complex networks</title>
      <link>https://err.no/personal/blog/tech/2008-11-16-16-56_network_configuration_tools/</link>
      <pubDate>Sun, 16 Nov 2008 16:56:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-11-16-16-56_network_configuration_tools/</guid>
      <description>&lt;p&gt;Part of my job nowadays is regular Linux consulting for various clients.
As part of this, I end up having to reconfigure my network quite a lot,
and often by hand.  Two examples:&lt;/p&gt;
&lt;p&gt;I am setting up some services on a closed server network.  I am
connected to this using regular, wired Ethernet.  This network does not
have access to the internet, so I also have access to a WLAN which does.
However, I need access to both internal and external DNS zones, so I
need to use two different set of servers, depending on the domain name.
I also currently set up some static routes to get to the internal DNS
and have to &lt;code&gt;chattr +i /etc/resolv.conf&lt;/code&gt; in order for the DHCP client
not to overwrite my manually configured DNS.&lt;/p&gt;
&lt;p&gt;Another example: I am troubleshooting Varnish, deep in a company&amp;rsquo;s
intranet.  To get access to this, I first have to use a VPN client, then
ssh with an RSA token as well as password.  From there on, I use
&lt;code&gt;tsocks&lt;/code&gt; to connect to an intermediate host before using &lt;code&gt;tsocks&lt;/code&gt; again
to get to the actual Varnish boxes.&lt;/p&gt;
&lt;p&gt;Currently, I set up all of this infrastructure by hand, which doesn&amp;rsquo;t
really work so well when I switch between clients and go home and use
the same laptop there.  Does any network configuration tools help me
with complex setups such as the ones above?  I realise they are not
exactly run-of-the-mill setups used by most users, but for me they are
two fairly common examples of setups I need.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Things to do on a Friday night </title>
      <link>https://err.no/personal/blog/tech/2008-09-27-01-45_things_to_do_on_a_friday_night/</link>
      <pubDate>Sat, 27 Sep 2008 01:45:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-09-27-01-45_things_to_do_on_a_friday_night/</guid>
      <description>&lt;p&gt;(when your wife/SO is not around)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Finally get around to play with the PowerPC you have had standing
besides your desk for about a month.&lt;/li&gt;
&lt;li&gt;Discover that it still doesn&amp;rsquo;t boot, since it can&amp;rsquo;t find its hard
drive.  Also discover that it doesn&amp;rsquo;t want to talk to your USB
keyboard.&lt;/li&gt;
&lt;li&gt;After a while, think of removing and replugging the SAS
connectors, which fixes the boot problem.  The machine now runs
YDL.&lt;/li&gt;
&lt;li&gt;Decide you want to install Debian instead of YDL, but also wonder
how to do that safely since you still can&amp;rsquo;t talk to Open Firmware.&lt;/li&gt;
&lt;li&gt;Search for the RJ45-to-serial adapter you got with the box.
Discover you probably wired it wrongly the first time around.
Break it when you try to rewire it.&lt;/li&gt;
&lt;li&gt;Find that spare DB9 connector you had lying about, find soldering
iron and fix up the connector.&lt;/li&gt;
&lt;li&gt;Become very, very confused, since you get perfect output, but input
still doesn&amp;rsquo;t work.  Discover you managed to solder all the
connections mirrored.  It worked with effectively just one wire,
not even shared ground.  Resolder.&lt;/li&gt;
&lt;li&gt;Download Debian ISO, burn it on a DVD.  Get annoyed at the machine
for failing to boot from the DVD.&lt;/li&gt;
&lt;li&gt;Set up netboot, boot from network.&lt;/li&gt;
&lt;li&gt;Discover d-i doesn&amp;rsquo;t install a kernel, nor a bootloader, do that by
hand.&lt;/li&gt;
&lt;li&gt;Oops, bootloader didn&amp;rsquo;t work.  Iterate a couple of times of running
&lt;code&gt;mkofboot&lt;/code&gt; until it suddenly feels like booting from the hard drive.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hurrah!  And it only took like six or seven hours.&lt;/p&gt;
&lt;p&gt;Notes for later: This is an YDL Powerstation, the magic &lt;code&gt;mkofboot&lt;/code&gt;
invocation is &lt;code&gt;mkofboot -b /dev/sda1 --filesystem raw&lt;/code&gt;; the &lt;code&gt;raw&lt;/code&gt; bit
is needed for IBM hardware.  The firmware also cares about whether the
partition is marked as bootable or not, so make sure to mark it as
such.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Collaborative editing, Emacs and D-Bus</title>
      <link>https://err.no/personal/blog/tech/2008-09-22-23-17_emacs_collaborative_editing_and_dbus/</link>
      <pubDate>Mon, 22 Sep 2008 23:17:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-09-22-23-17_emacs_collaborative_editing_and_dbus/</guid>
      <description>&lt;p&gt;A little while ago, I discovered Emacs has D-Bus support now.  I wanted to play
around with it, and I discovered &lt;a href=&#34;http://alban.apinc.org/blog/collaborative-editing/&#34;&gt;Alban&amp;rsquo;s collaborative editing page&lt;/a&gt;.
It seems like Emacs&amp;rsquo;s D-Bus documentation is somewhat lacking, though &lt;a href=&#34;http://cvs.savannah.gnu.org/viewvc/emacs/doc/misc/dbus.texi?root=emacs&amp;amp;view=markup&#34;&gt;CVS&lt;/a&gt;
has some more docs.&lt;/p&gt;
&lt;p&gt;Alban&amp;rsquo;s work seems to need a well-known name, something Emacs can&amp;rsquo;t yet do, so
I&amp;rsquo;ll probably add a method to &lt;code&gt;text-remote-control&lt;/code&gt; where any app can register
and say &amp;ldquo;Hi, I support your interface&amp;rdquo; as I think this makes more sense.  I
don&amp;rsquo;t have any code that does anything useful yet, but once
&lt;code&gt;text-remote-control&lt;/code&gt; is fixed, I don&amp;rsquo;t think that&amp;rsquo;s very hard.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>eweouz 0.2 released</title>
      <link>https://err.no/personal/blog/tech/2008-09-02-23-52_eweouz_0.2_released/</link>
      <pubDate>Tue, 02 Sep 2008 23:52:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-09-02-23-52_eweouz_0.2_released/</guid>
      <description>&lt;p&gt;I finally got around to releasing &lt;a href=&#34;http://err.no/src/eweouz/eweouz-0.2.tar.gz&#34;&gt;eweouz 0.2&lt;/a&gt; tonight.  It is
still a bridge between emacs and Evolution Data Server, now with both
gnus and wanderlust support.&lt;/p&gt;
&lt;p&gt;Changes include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Actually works now, sans stupid typo&lt;/li&gt;
&lt;li&gt;A bit more documentation&lt;/li&gt;
&lt;li&gt;Now handles non-ASCII names, thanks to setlocale.&lt;/li&gt;
&lt;li&gt;Be a bit more paranoid and fail if opening addressbooks and such
fails.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;eweouz now also has a &lt;a href=&#34;http://err.no/cgi-bin/mailman/listinfo/eweouz&#34;&gt;mailing list&lt;/a&gt; and a &lt;a href=&#34;git://git.err.no/eweouz&#34;&gt;git&lt;/a&gt; and
&lt;a href=&#34;http://err.no/cgi-bin/gitweb.cgi?p=eweouz;a=summary&#34;&gt;gitweb&lt;/a&gt; repositories.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>eweouz 0.1 released</title>
      <link>https://err.no/personal/blog/tech/2008-08-08-14-05_eweouz_0.1_released/</link>
      <pubDate>Fri, 08 Aug 2008 14:05:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-08-08-14-05_eweouz_0.1_released/</guid>
      <description>&lt;p&gt;I just released the first version of eweouz, the interface between emacs
and evolution-data-server.  &lt;a href=&#34;http://err.no/src/eweouz/&#34;&gt;Sources&lt;/a&gt; are available, no packages
yet.  It is now possible to both add contacts from within gnus and
search for contacts.&lt;/p&gt;
&lt;p&gt;Patches and feedback is of course welcome.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Kernel patches and the TEMPer USB thermometer</title>
      <link>https://err.no/personal/blog/tech/2008-07-22-10-17_kernel_patches_temper_thermometer/</link>
      <pubDate>Tue, 22 Jul 2008 10:17:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-07-22-10-17_kernel_patches_temper_thermometer/</guid>
      <description>&lt;p&gt;Today, I submitted my two first patches to the kernel.  One is fairly
trivial (remove a USB ID from the pl2303 driver), the other is a fixup
of a patch from some other guy, which adds support for DTR, RTS and
CTS to the ch341 driver.  Yay, hopefully they&amp;rsquo;ll get accepted.&lt;/p&gt;
&lt;p&gt;The reason for this journey into kernel land is I got a &lt;a href=&#34;http://www.dealextreme.com/details.dx/sku.7003&#34;&gt;TEMPer&lt;/a&gt;
USB thermometer in the mail yesterday.  After a fair bit of digging
around, I found some &lt;a href=&#34;http://nofeature.blogspot.com/2008/01/taking-advantage-of-your-temper-device.html&#34;&gt;source code&lt;/a&gt; to drive it from C# and
Windows.  I wanted to poke at it from Linux and C.&lt;/p&gt;
&lt;p&gt;After more poking, I found it&amp;rsquo;s an I2C device connected to the USB
serial adapter, where you talk to it by twiddling DTR, RTS and CTS.
The C# code was fairly easy to port, so now I can get temperature
readings from the command line.  &lt;a href=&#34;http://err.no/src/TEMPer.c&#34;&gt;The code&lt;/a&gt; is a quick hack, but
I guess it might be interesting to some people.  Oh, and the
calibration seems entirely off (but it was off in Windows too), so
feedback on whether it&amp;rsquo;s more accurate for other people would be
appreciated.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>eweouz (bbdb-a-like) working</title>
      <link>https://err.no/personal/blog/tech/2008-07-14-22-46_eweouz_works/</link>
      <pubDate>Mon, 14 Jul 2008 22:46:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-07-14-22-46_eweouz_works/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://err.no/personal/blog/tech/2005-04-22-18-27_evolution_data_server&#34;&gt;Some years ago&lt;/a&gt;, when I hacked on a TDB backend for
Evolution Data Server (EDS), I also wrote something about writing some
command line tools for accessing my contacts and so on.  I&amp;rsquo;ve finally
gotten my act together and wrote the necessary glue to have addres
completion between Gnus and EDS.  It&amp;rsquo;s nowhere as feature-complete as
BBDB is, but it allows you to complete addresses, at least.  Get it from
&lt;a href=&#34;git://git.err.no/eweouz&#34;&gt;git&lt;/a&gt; (&lt;a href=&#34;http://err.no/cgi-bin/gitweb.cgi?p=eweouz;a=summary&#34;&gt;gitweb&lt;/a&gt;).  I&amp;rsquo;ll hopefully expand it a little bit
and cut a release fairly soon.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Zombie meme</title>
      <link>https://err.no/personal/blog/tech/memes/2008-06-12-08-39_zombies/</link>
      <pubDate>Thu, 12 Jun 2008 08:39:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/memes/2008-06-12-08-39_zombies/</guid>
      <description>&lt;p&gt;Various people have been posting about what to do when the zombies
attack.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;You are in a mall when zombies attack. You have:
1. One weapon
2. One song blasting on the speakers
3. One famous person to fight along side you.
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Katana.  Doesn&amp;rsquo;t run out of ammo and should slice up those zombies
quite nicely.&lt;/li&gt;
&lt;li&gt;One of the songs from the soundtrack of &amp;ldquo;The Rock&amp;rdquo;.  I can&amp;rsquo;t
remember which right now, since it seems to have disappeared from
my music collection.&lt;/li&gt;
&lt;li&gt;Given I&amp;rsquo;m facing undeads, somebody holy.  I suppose Jesus might
work well.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>New backup system!</title>
      <link>https://err.no/personal/blog/tech/2008-05-19-22-32_new_backup_system/</link>
      <pubDate>Mon, 19 May 2008 22:32:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-05-19-22-32_new_backup_system/</guid>
      <description>&lt;p&gt;(This post is mostly as a reminder to myself on how I&amp;rsquo;ve set up my
backup system.  It should probably go on a wiki instead so I can keep
it up to date.)  After the recent OpenSSL debacle in Debian and
Ubuntu, I found that all my backups were encrypted with something
amounting to a well-known secret key.  Ouch.  I was not entirely happy
with how my old backup system worked either (it was based on
&lt;a href=&#34;http://boxbackup.org/&#34;&gt;boxbackup&lt;/a&gt;).  In particular, the on-disk format was opaque, the
tools needed to access it were not particularly user-friendly and I
had to run Yet Another CA for managing the keys for it.&lt;/p&gt;
&lt;p&gt;After looking around a little, I settled on &lt;a href=&#34;http://www.miek.nl/projects/rdup/&#34;&gt;rdup&lt;/a&gt; which is a tool
very much written in the unix tradition of &amp;ldquo;do one thing and do it
well&amp;rdquo;.  As it reads on the home page:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The only backup program that doesn&#39;t make backups!
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(which is almost true).&lt;/p&gt;
&lt;p&gt;It keeps a list of information about which files have been backed up
locally on the machine to be backed up, including some
meta-information such as file size and permissions, so it can take a
new backup if any of those changes.  For more details, read the web
page and the source.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.miek.nl/projects/rdup/&#34;&gt;rdup&lt;/a&gt; is more of a framework for making your own backup system than
a complete system in its own right, so this post is really about how I
have customised it.&lt;/p&gt;
&lt;p&gt;First, I want my backups to be encrypted, and rdup supports
encryption (both GPG and mcrypt).  I&amp;rsquo;m lazy, so I settled on what
&lt;code&gt;rdup-simple&lt;/code&gt; gives me, which is mcrypt.  Key generation is easy
enough: &lt;code&gt;head -c 56 /dev/random &amp;gt; /root/backup-$(hostname).crypt.key&lt;/code&gt;
and then a &lt;code&gt;chmod 600&lt;/code&gt; to avoid it being world-readable.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;/root/.ssh/config&lt;/code&gt;, I put&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Host backup-$hostname
Hostname $backupserver.err.no
User backup-$hostname
IdentityFile /root/.ssh/id_rsa_rdup
ProxyCommand pv -L 40k -q | nc %h %p
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;so as to make it fairly easy to move stuff around and to make it pick
up the right identity.  The last bit is a trick to rate limit it so it
doesn&amp;rsquo;t saturate my DSL.  &lt;code&gt;pv&lt;/code&gt; has a wonderful &lt;code&gt;-R&lt;/code&gt; switch which lets
me change the arguments to an already-running pv, if I want to do
that.  &lt;code&gt;ssh-keygen -t rsa -f /root/.ssh/id_rsa_rdup&lt;/code&gt; to generate an
ssh key.  It got put into
&lt;code&gt;/home/backup-$hostname/.ssh/authorized_keys&lt;/code&gt; on the backup server, so
the line reads like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;command=&amp;quot;/usr/local/bin/rdup-ssh-wrapper&amp;quot;,no-pty,no-port-forwarding,no-agent-forwarding,no-X11-forwarding ssh-rsa AAAAB3N
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;/usr/local/bin/rdup-ssh-wrapper&lt;/code&gt; is a small perl wrapper which
only allows the rdup commands and sanitises the command line
somewhat.  Since I don&amp;rsquo;t want to make a backup of all bits on my
machines, I have an exclude file, which lives in
&lt;code&gt;/root/rdup-exclude&lt;/code&gt;.  It is just a list of regexes of files to
ignore.&lt;/p&gt;
&lt;p&gt;To actually make a backup, I run something like &lt;code&gt;for p in /etc /home /var; do rdup-simple -v -a -z -E /root/rdup-exclude -k /root/backup-$(hostname).crypt.key $p ssh://backup-$(hostname)/srv/backup/$(hostname)/$p ; done&lt;/code&gt; which then
goes on for a while.  It gives me nice structures with hard-linked
files to avoid using more disk space than needed.  I can then just
have a small &lt;code&gt;find&lt;/code&gt;(1) script prunes old backups as I don&amp;rsquo;t need them.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Changing jobs</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2008-03-31-21-31_changing_jobs/</link>
      <pubDate>Mon, 31 Mar 2008 21:31:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2008-03-31-21-31_changing_jobs/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;15:58 [Canonical] -!- Irssi: Disconnecting from server irc.canonical.com: [kthxbye!]
15:58 [Canonical] -!- Irssi: Connection lost to irc.canonical.com
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;From tomorrow on, I&amp;rsquo;m working full-time for &lt;a href=&#34;http://www.linpro.no&#34;&gt;Linpro&lt;/a&gt;, a Norwegian
Linux consulting company.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>pkg-config, sonames and Requires.private</title>
      <link>https://err.no/personal/blog/tech/2008-03-25-18-07_pkg-config_sonames_and_requires.private/</link>
      <pubDate>Tue, 25 Mar 2008 18:07:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-03-25-18-07_pkg-config_sonames_and_requires.private/</guid>
      <description>&lt;p&gt;This post is both an attempt at replying to &lt;a href=&#34;http://bugs.freedesktop.org/show_bug.cgi?id=15199&#34;&gt;a bug&lt;/a&gt; against
&lt;code&gt;telepathy-glib&lt;/code&gt;, but also an attempt at explaining what
Requires.private do (and don&amp;rsquo;t).&lt;/p&gt;
&lt;p&gt;I am using Evolution as my example here, not to pick on Evolution or its
authors in any way, but because it&amp;rsquo;s a convenient example.  Currently,
on Ubuntu Hardy, &lt;code&gt;evolution&lt;/code&gt; links against 75 different libraries.
Amongst those, we find &lt;code&gt;libz.so.1&lt;/code&gt;, &lt;code&gt;libXinerama.so.1&lt;/code&gt; and many more.
I&amp;rsquo;ll go out on a limb here and claim that Evolution does not call any of
the functions in libXinerama directly.  Let that be the assumption from
here on.&lt;/p&gt;
&lt;p&gt;An obvious question then is, why does &lt;code&gt;evolution&lt;/code&gt; link against
&lt;code&gt;libXinerama.so.1&lt;/code&gt; if it doesn&amp;rsquo;t use it?  To answer that question, we
need to go back in time to before we had dynamic linking.  If you wanted
to build a binary like &lt;code&gt;evolution&lt;/code&gt; you had to have 75 &lt;code&gt;-l&lt;/code&gt; statements
when you linked and you ended up with the whole code for Xinerama
embedded in your email and calendar client.  For various reasons, we
stopped doing that and switched to dynamic linking where the &lt;code&gt;evolution&lt;/code&gt;
binary just contains a reference to &lt;code&gt;libXinerama&lt;/code&gt;.  At some point we
also grew the ability for libraries to contain those references to other
libraries, so you don&amp;rsquo;t have to hunt down all the dependencies of
&lt;code&gt;libfoo&lt;/code&gt; when you are linking with it.  We also got tools such as
&lt;code&gt;libtool&lt;/code&gt; which try to abstract away a lot of the problems of building
on older platforms which don&amp;rsquo;t support inter-library dependencies.&lt;/p&gt;
&lt;p&gt;Now, since &lt;code&gt;evolution&lt;/code&gt; still doesn&amp;rsquo;t use anything directly in
&lt;code&gt;libXinerama.so.1&lt;/code&gt; but just uses a library which in turn links against
&lt;code&gt;libXinerama.so.1&lt;/code&gt;, it shouldn&amp;rsquo;t be linking against it.  Then why is it
linked with it?  Again, we need to look back at history, and for this
part I am at least partially responsible.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pkg-config&lt;/code&gt; was originally written as a replacement for &lt;code&gt;gnome-config&lt;/code&gt;
and various other &lt;code&gt;-config&lt;/code&gt; utilities.  Lots of libraries and
applications now ship &lt;code&gt;.pc&lt;/code&gt; files and we have a standardised interface
for querying those files.  One of the problems the original authors of
&lt;code&gt;pkg-config&lt;/code&gt; faced was the problem of dependencies.  They added
dependencies so the authors of &lt;code&gt;gst-python-0.10&lt;/code&gt; could say &amp;ldquo;We need
pygtk-2.0 too&amp;rdquo; and so the compilation flags needed for &lt;code&gt;gst-python-0.10&lt;/code&gt;
would also include those for &lt;code&gt;pygtk-2.0&lt;/code&gt;.  Note that I&amp;rsquo;m using
&amp;ldquo;compilation flags&amp;rdquo; loosely here, I am not just talking about CFLAGS.&lt;/p&gt;
&lt;p&gt;This did not fix the problem of inflated dependencies.  Not at all.  I
talked with some of the Debian Release Managers back in 2004/2005 and
we worked out a solution which should help us have correct, uninflated
dependencies since the then-current way of handling dependencies caused
big problems for migrations of packages between &lt;code&gt;unstable&lt;/code&gt; and
&lt;code&gt;testing&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The plan was to introduce a new field, &lt;code&gt;Requires.private&lt;/code&gt; which would
not show up unless you passed &lt;code&gt;--static&lt;/code&gt; to the &lt;code&gt;pkg-config&lt;/code&gt; invocation
(since you need all libraries if you are linking statically).  This
definition of &lt;code&gt;Requires.private&lt;/code&gt; was mostly useless since GNOME and GTK+
have a habit of including each other&amp;rsquo;s headers.  To make a long story
short, I changed the semantics so the &lt;code&gt;Cflags&lt;/code&gt; field from private
dependencies were included even when not linking statically.&lt;/p&gt;
&lt;p&gt;A problem which &lt;code&gt;pkg-config&lt;/code&gt; does nothing to guard against in this case
is if you have &lt;code&gt;libfoo.so.2&lt;/code&gt; linking against &lt;code&gt;libbar.so.1&lt;/code&gt; and
&lt;code&gt;libfoo.so.2&lt;/code&gt; exports some of libbar&amp;rsquo;s types in its ABI (and not just as
pointers, but actual structs and such).  If libbar&amp;rsquo;s soname is then
bumped to &lt;code&gt;libbar.so.2&lt;/code&gt; and libfoo is rebuilt, libfoo&amp;rsquo;s ABI has changed
without a soname bump.  This is bad and will cause problems.  If your
application is linked against both &lt;code&gt;libfoo.so.2&lt;/code&gt; and &lt;code&gt;libbar.so.1&lt;/code&gt;,
you&amp;rsquo;ll still get problems since &lt;code&gt;libfoo.so.2&lt;/code&gt; then suddenly pulls in
symbols from &lt;code&gt;libbar.so.2&lt;/code&gt;.  If you used symbol versioning, you would at
least not get symbol conflicts and your application would continue to
work, but you would have a spurious dependency and the package
containing &lt;code&gt;libbar.so.1&lt;/code&gt; would be kept around until your application was
recompiled.&lt;/p&gt;
&lt;p&gt;With this background, you might ask the question why we still have
&lt;code&gt;Requires&lt;/code&gt; since it is seemingly useless.  For C, it is useless in all
but the most special cases, just use &lt;code&gt;Requires.private&lt;/code&gt; instead (and its
sibling &lt;code&gt;Libs.private&lt;/code&gt;).  Other languages have different semantics.
Some people use &lt;code&gt;.pc&lt;/code&gt; files for other purposes such as
&lt;code&gt;gnome-screensaver&lt;/code&gt; having variables defining where themes and
screensavers go.&lt;/p&gt;
&lt;p&gt;Hopefully this blog post has explained a bit about why we have
&lt;code&gt;Requires.private&lt;/code&gt; and what the difference between this and their
regular counterpart is.  If there&amp;rsquo;s anything unclear, please do not
hesitate to &lt;a href=&#34;mailto:tfheen@err.no&#34;&gt;contact me&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Default sudo configuration in Ubuntu</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2008-03-20-09-53_ubuntu_sudo/</link>
      <pubDate>Thu, 20 Mar 2008 09:53:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2008-03-20-09-53_ubuntu_sudo/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://gwolf.org/node/1648&#34;&gt;Gunnar Wolf&lt;/a&gt; claims that Ubuntu ships a passwordless sudo by
default.  This would be an insane default configuration, so Ubuntu
doesn&amp;rsquo;t.  What they do however is add the default user to the admin
group which is allowed to use sudo.&lt;/p&gt;
&lt;p&gt;Incidentially, Debian does the same thing (except it&amp;rsquo;s just for the
first user, not the admin group) if you don&amp;rsquo;t set a root password.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Achievo and sticky projects</title>
      <link>https://err.no/personal/blog/tech/2008-02-29-10-00_achievo_persistent_projects/</link>
      <pubDate>Fri, 29 Feb 2008 10:00:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-02-29-10-00_achievo_persistent_projects/</guid>
      <description>&lt;p&gt;I finally got tired of Achievo not remembering what projects I last used, so I
whipped up a small greasemonkey &lt;a href=&#34;http://err.no/src/achievo_persistent_project.user.js&#34;&gt;script&lt;/a&gt; to do that.  It just makes the
selection sticky, nothing very fancy.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Choosing a nonce in CTR mode</title>
      <link>https://err.no/personal/blog/tech/2008-01-09-22-27_scramblefs_ctr_mode_and_choosing_a_nonce/</link>
      <pubDate>Wed, 09 Jan 2008 22:27:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2008-01-09-22-27_scramblefs_ctr_mode_and_choosing_a_nonce/</guid>
      <description>&lt;p&gt;I am currently working on implementing a cryptographic file system using
FUSE.  It is different from &lt;a href=&#34;http://www.arg0.net/encfs&#34;&gt;EncFS&lt;/a&gt; and similar in that it just
mirrors a normal directory tree, but encrypts the contents of the files
as they are read or decrypted as they are written.&lt;/p&gt;
&lt;p&gt;My use case is backups.  I have some machines where I and only I have
access, machines which may contain proprietary information, personal
emails and so on.  Of course, I want backups of those, so when the hard
drives stop working, I don&amp;rsquo;t lose any data.  The machine(s) I am backing
up to, however are not always machines where I trust all the people with
physical access to not make a copy of my data.  In addition, I don&amp;rsquo;t
want broken hard drives returned under warranty to contain unencrypted
data.  This use case is the reason for why I&amp;rsquo;m encrypting on read rather
than on write.&lt;/p&gt;
&lt;p&gt;I have chosen to use CTR (counter) mode together with AES which should
give acceptable security.  One of the requirements CTR needs to work
well is a nonce, typically 64 bits (for 128 bit AES) which must not ever
be used twice.  If you use it twice, you leak information about your
plaintext, which is, for obvious reasons, bad.&lt;/p&gt;
&lt;p&gt;My current design headache is how to choose a good nonce.  Ideally, I
believe it should be persistent for each version of the file and unique
per file.  Using the inode number takes up 64 bits (on AMD64 at any
take, or when using &lt;code&gt;-D_FILE_OFFSET_BITS=64&lt;/code&gt; on 32 bit platforms).  So
while this gives me the latter, it doesn&amp;rsquo;t give me the former at all.  I
am wondering if I should use the inode number modulo 2^32 (effectively
choosing the lower 32 bits of the inode number) and then something which
is fairly sure to never be the same, such as mtime (or at least the
lower 32 bits of it, when time_t becomes 64 bit).  The reason for not
just choosing a completely random value is I don&amp;rsquo;t want a command like
&lt;code&gt;diff file1 file1&lt;/code&gt; to claim there are differences in the file.&lt;/p&gt;
&lt;p&gt;My hope was I&amp;rsquo;d get a great idea on how to solve the problem as part of
writing it down.  Alas, that hasn&amp;rsquo;t happened, so if you happen to come
across a great solution (or a reason to avoid a particular choice), feel
free to &lt;a href=&#34;mailto:tfheen@err.no&#34;&gt;email me&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Button pushes you!</title>
      <link>https://err.no/personal/blog/tech/2007-11-25-10-06_in_soviet_boston/</link>
      <pubDate>Sun, 25 Nov 2007 10:06:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2007-11-25-10-06_in_soviet_boston/</guid>
      <description>&lt;p&gt;In Soviet Boston, button pushes you.  Here is proof:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://err.no/personal/images/2007-11-25-button-pushes-you.jpg&#34; alt=&#34;Button pushes you&#34;&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Renewing CA certificates</title>
      <link>https://err.no/personal/blog/tech/2007-11-22-13-44_renewing_ca_certificates/</link>
      <pubDate>Thu, 22 Nov 2007 13:44:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2007-11-22-13-44_renewing_ca_certificates/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m in the process of moving servers at the moment, and amongst the
services I am moving is my authenticated, but public SMTP relay service.
That service includes a basic web-based CA whose CA certificate is going
to expire in July 2008.  Apparently, it is possible to refresh CA
certificates without having to distribute fresh certificates to all the
clients.  The magic steps, using openssl are:&lt;/p&gt;
&lt;p&gt;First, generate a new CSR using the existing certificate and key as
input:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;openssl x509 -x509toreq -in cacert.crt \
  -signkey cakey.key -out renew.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then sign it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;openssl x509 \
  -extfile openssl.cnf \
  -extensions v3_ca \
  -CA cacert.crt -CAkey cakey.key \
  -set_serial 0 -days 365 \
  -req -in renew.pem -out newcacert.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This information was quite hard to come by, so hereby put here so I can
find it if I need it again.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Killing hold periods</title>
      <link>https://err.no/personal/blog/tech/debian/2007-11-22-09-10_killing_hold_periods/</link>
      <pubDate>Thu, 22 Nov 2007 09:10:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2007-11-22-09-10_killing_hold_periods/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://lambdaman.blogspot.com/2007/11/good-ideas-in-customer-service-kill.html&#34;&gt;Daniel Burrows&lt;/a&gt; writes about the feature of some call centres
whereas if all operators are busy, it gives the caller the option of
being called back.  He&amp;rsquo;d like the nice twist of being able to enter his
phone number on a web page and then be called back so he doesn&amp;rsquo;t
actually have to call, then wait.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure where Daniel lives, but I&amp;rsquo;m happy to report that this
practice is quite common here in Norway, so it might well be on its way
to whatever companies are local to Daniel.&lt;/p&gt;
&lt;p&gt;Also, why does bloglines link to the completely wrong place on dburrow&amp;rsquo;s
posts?  It links to
&lt;a href=&#34;http://planet.debian.org/tag:blogger.com,1999:blog-$blah&#34;&gt;http://planet.debian.org/tag:blogger.com,1999:blog-$blah&lt;/a&gt; rather than
the real URL.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Triggering a flash by hand</title>
      <link>https://err.no/personal/blog/tech/photo/2007-09-30-12-58_triggering_flash/</link>
      <pubDate>Sun, 30 Sep 2007 12:58:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/photo/2007-09-30-12-58_triggering_flash/</guid>
      <description>&lt;p&gt;Recently, I added some photo related blogs to my reading list, amongst
them &lt;a href=&#34;http://strobist.blogspot.com&#34;&gt;strobist&lt;/a&gt;, and so I came across a post about the &lt;a href=&#34;http://blog.everythingrobotics.com/2007/09/20/open-source-wireless-trigger/&#34;&gt;Open Source
Wireless Trigger&lt;/a&gt;.  Being interested in both electronics and free
software, I read through most of the posts on the forum as well as the
wiki.  I also started experimenting a bit with an old Nikon SB-24 flash
I had lying around since even if I managed to break it, it wouldn&amp;rsquo;t be
that bad.  And it&amp;rsquo;s old and robust.&lt;/p&gt;
&lt;p&gt;So far, I&amp;rsquo;ve played around with how to make the flash go off.  For the
hot shoe, it&amp;rsquo;s just shorting the ground and center pin (I just used a
big resistor).  For the PC connector, I had to apply a bit of voltage; I
used an AA/LR06 battery and that worked splendidly.  (Oh, and PC in this
context has nothing to do with computers, it&amp;rsquo;s an abbreviation of
Prontor-Compur, two shutter manufacturers who decided on the design of
the connector back in the 1950s.)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Infinite monkeys</title>
      <link>https://err.no/personal/blog/tech/debian/2007-09-17-21-00_infinite_monkeys/</link>
      <pubDate>Mon, 17 Sep 2007 21:00:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2007-09-17-21-00_infinite_monkeys/</guid>
      <description>&lt;p&gt;Just like an infinite number of monkeys, given infinite time are likely
to produce infinite copies of Hamlet, I knew that given an infinite
number of blog postings by Clint, I had to find &lt;a href=&#34;http://xana.scru.org/ranticore/syndicatedincorporated.html&#34;&gt;one&lt;/a&gt; which both made
sense to me and which I agreed with.&lt;/p&gt;
&lt;p&gt;Somebody please write a free syndicate (or syndicate wars) clone.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Project codenames</title>
      <link>https://err.no/personal/blog/tech/2007-09-14-11-27_project_codenames/</link>
      <pubDate>Fri, 14 Sep 2007 11:27:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2007-09-14-11-27_project_codenames/</guid>
      <description>&lt;p&gt;I just read Sun&amp;rsquo;s announcement of &amp;ldquo;Project Hamburg&amp;rdquo;. I am not sure what
it is about, but that is not very important in this context.  I have
worked a bit with Intel lately and gotten introduced into a whole new
world of code names such as Mccaslin, Menlow and so on.  Up until now,
most of them were obscure enough that I thought they were just random
names picked from somewhere, but they are, like Sun&amp;rsquo;s names of
geographical features, be it towns, cities, rivers or something else.
The reason for this naming is, like Sun&amp;rsquo;s, that geographical names can&amp;rsquo;t
be trademarked, though in this particular case, Sun supplied a short
list of &amp;ldquo;why Hamburg&amp;rdquo; with some references to Hamburg&amp;rsquo;s history.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Making pancakes</title>
      <link>https://err.no/personal/blog/tech/debian/2007-07-05-16-43_pancakes/</link>
      <pubDate>Thu, 05 Jul 2007 16:43:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2007-07-05-16-43_pancakes/</guid>
      <description>&lt;p&gt;Some people on Planet Debian seem to think that using oil for pancakes
is a good idea.  They really taste so much better if you use real butter
(and preferably an iron pan, not a non-stick one).&lt;/p&gt;
&lt;p&gt;Oh, and a nice receipe, which almost matches another one is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1l milk&lt;/li&gt;
&lt;li&gt;4 eggs&lt;/li&gt;
&lt;li&gt;5dl flour (I use a mix of coarser and finer flour, but you can use
anything you want)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mix milk and flour, then add eggs last (blends better that way).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Lucky number</title>
      <link>https://err.no/personal/blog/tech/2007-05-02-13-57_lucky/</link>
      <pubDate>Wed, 02 May 2007 13:57:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2007-05-02-13-57_lucky/</guid>
      <description>&lt;p&gt;Your lucky number is &lt;code&gt;09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0&lt;/code&gt;.
Watch for it everywhere.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Strength of asymmetric and symmetric encryption algorithms</title>
      <link>https://err.no/personal/blog/tech/debian/2007-03-15-08-05_strength_of_symmetric_versus_asymmetric_algorithms/</link>
      <pubDate>Thu, 15 Mar 2007 08:05:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2007-03-15-08-05_strength_of_symmetric_versus_asymmetric_algorithms/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.corsac.net/?rub=blog&amp;amp;post=1327&#34;&gt;Yves-Alexis Perez&lt;/a&gt; writes a bit about Debian and
crypto-containers, comparing cryptsetup and encfs.  The comparison is
decent enough, except that it&amp;rsquo;s fairly trivial to get cryptsetup to
integrate into the whole gnome-volume-manager stack and have a dialogue
pop up when you insert an encrypted USB stick or similar.  Sure, it&amp;rsquo;s
mounted by a root process, but I wouldn&amp;rsquo;t claim it&amp;rsquo;s any kind of
insecure because of that.&lt;/p&gt;
&lt;p&gt;What did really catch my eye was the line near the end:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[&amp;hellip;] but this is a bruteforce attack against master password (1024
bits RSA key), not against 128bits aes key of the container.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, according to conventional research, a 1024 bit RSA key is about as
strong as an 80 bit symmetric key. &lt;a href=&#34;http://www.rsa.com/rsalabs/node.asp?id=2004&#34;&gt;A semi-recent RSA paper&lt;/a&gt;
confirms this too.  And to the best of my knowledge, there has not been
found weaknesses in AES which lower the effective key size.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Things to remember when doing hardware maintenance:</title>
      <link>https://err.no/personal/blog/tech/2007-02-06-12-38_powerless_disks/</link>
      <pubDate>Tue, 06 Feb 2007 12:38:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2007-02-06-12-38_powerless_disks/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Plug all the power plugs back in.  Not just almost all of them.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>contentless_ping.pl 0.3 released</title>
      <link>https://err.no/personal/blog/tech/2007-01-07-12-05_contentless_ping_0.3_released/</link>
      <pubDate>Sun, 07 Jan 2007 12:05:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2007-01-07-12-05_contentless_ping_0.3_released/</guid>
      <description>&lt;p&gt;A small update of my &lt;a href=&#34;http://err.no/src/contentless_ping.pl&#34;&gt;contentless ping&lt;/a&gt; script has now been
released.  First, it&amp;rsquo;s a bit more configurable, thanks to some patches
sent to me by way of Martin F. Krafft.  Secondly, it now rate limits, so
you can&amp;rsquo;t get people kicked off channels by pinging them repeatedly.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Locally administrated MAC addresses</title>
      <link>https://err.no/personal/blog/tech/2007-01-02-12-09_locally_administered_mac_addresses/</link>
      <pubDate>Tue, 02 Jan 2007 12:09:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2007-01-02-12-09_locally_administered_mac_addresses/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://etbe.blogspot.com/2007/01/multiple-ethernet-devices-in-xen.html&#34;&gt;Russel Coker&lt;/a&gt; writes about using multiple Ethernet devices in
Xen and wonders about if there is something similar to RFC1918
addresses, but for Ethernet.  Apparently, there is, they&amp;rsquo;re called
&amp;ldquo;Locally Administered Addresses&amp;rdquo;.  To make a local address, just set the
seventh bit to one.  You probably want to make the eigth bit a zero too,
unless it&amp;rsquo;s a multicast address.  &lt;a href=&#34;http://en.wikipedia.org/wiki/MAC_address&#34;&gt;Wikipedia&lt;/a&gt; has more, as usual.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>A moderately complicated OpenWRT setup</title>
      <link>https://err.no/personal/blog/tech/2006-12-30-23-25_a_moderately_complicated_openwrt_setup/</link>
      <pubDate>Sat, 30 Dec 2006 23:25:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2006-12-30-23-25_a_moderately_complicated_openwrt_setup/</guid>
      <description>&lt;p&gt;At home, I have had a setup with a wireless router for quite a while.
It&amp;rsquo;s more or less a stock &lt;a href=&#34;http://openwrt.org&#34;&gt;OpenWRT&lt;/a&gt; setup, but I have split the joined
all the wired ports into one virtual interface (actually, I think
they&amp;rsquo;re just on one VLAN) and split off the wireless.  The wireless is
open to the world, but I have a fair amount of packet filters there so
it doesn&amp;rsquo;t get too annoying.  Some people have no shame and run
bittorrent and other file sharing utilities on other people&amp;rsquo;s open
wireless.&lt;/p&gt;
&lt;p&gt;Anyway, my setup is no longer so simple.  I bought a WRT54GL to provide
better reception in other parts of the flat and wanted to join those
two.  After a little bit of reading, I found what I wanted: &lt;a href=&#34;http://en.wikipedia.org/wiki/Wireless_Distribution_System&#34;&gt;WDS&lt;/a&gt;.
Due to a previous misconfiguration of the WRT54GS, the &lt;a href=&#34;http://en.wikipedia.org/wiki/Wireless_Distribution_System&#34;&gt;WDS&lt;/a&gt;
connection was joined onto the br0/LAN segment and not the wireless
segment.  That was easily enough fixed, but it&amp;rsquo;s always a bit scary to
change network settings on headless devices.  (I did manage to lock
myself out, but I could ssh through in from the wireless network, so I
just used the WRT54GL to bounce through.)  Once that bit was up, I could
set up &lt;a href=&#34;http://en.wikipedia.org/wiki/Wireless_Distribution_System&#34;&gt;WDS&lt;/a&gt;, I did as the &lt;a href=&#34;http://wiki.openwrt.org/OpenWrtDocs/Configuration#head-aba1228974499bb5dcaffdb2c3d45b07bcab2013&#34;&gt;documentation&lt;/a&gt; told me and did it with
&lt;code&gt;lazywds&lt;/code&gt; (anyone can do &lt;a href=&#34;http://en.wikipedia.org/wiki/Wireless_Distribution_System&#34;&gt;WDS&lt;/a&gt; with you) enabled.  It worked, so I
turned it off and rebooted both routers (again..), and it still worked.
Yay!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Initial impressions of the Samsung Z5F</title>
      <link>https://err.no/personal/blog/tech/2006-12-13-22-25_samsung_z5f/</link>
      <pubDate>Wed, 13 Dec 2006 22:25:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2006-12-13-22-25_samsung_z5f/</guid>
      <description>&lt;p&gt;I have been walking to and from work lately and have become increasingly
restless over not having anything to listen to, so I bought a small
media player, a Samsung Z5F.  First impression is it&amp;rsquo;s tiny.  Really
tiny and I used a little while to get used to touch-buttons.  Upgrading
the firmware is trivial, both from Linux and Windows: the firmware
download is a &lt;code&gt;zip&lt;/code&gt; file, inside there&amp;rsquo;s &lt;code&gt;.dat&lt;/code&gt; file which you place in
the root directory.  When you disconnect, the player says &amp;ldquo;new firmware
detected.  Upgrade?&amp;rdquo;, I answered yes (who wouldn&amp;rsquo;t?  It gives me 30%
better battery life and gapless MP3 playback), it rebooted, upgraded
itself and rebooted again.  After a long (probably 15-20 seconds) wait
where it just displayed the Samsung logo, during which I was a bit
scared it was bricked, it booted up fine.&lt;/p&gt;
&lt;p&gt;It works well, it plays music and podcasts, but I have run into one
strange problem with it.  I was about 1/3 through the latest episode of
&lt;a href=&#34;http://lugradio.org/&#34;&gt;Lugradio&lt;/a&gt; when I wanted to go ten seconds back to catch
something somebody said, but it entirely failed to seek backwards.  It
seems like it either doesn&amp;rsquo;t support seeking in big &lt;code&gt;.ogg&lt;/code&gt; files or
doesn&amp;rsquo;t support seeking in big files or doesn&amp;rsquo;t support seeking in
&lt;code&gt;.ogg&lt;/code&gt; files.  Anyway, annoying bug.  I&amp;rsquo;m going to download the MP3
instead to see if it has the same problem or not.&lt;/p&gt;
&lt;p&gt;Apart from that, it&amp;rsquo;s a lovely, tiny little player with 44 hours of
battery life and 4GB storage.  Nice little toy.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update (2006-12-26):&lt;/em&gt;  I got an email from one of the firmware
developers about the problem of seeking in large Ogg Vorbis streams
and this is now fixed.  The fix isn&amp;rsquo;t public yet, but is somewhere in
Samsung&amp;rsquo;s QA chain.  And the problem is only large Ogg Vorbis files,
not large MP3s, so it can be worked around in most cases.  &lt;strong&gt;Yay!&lt;/strong&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Javascript, Greasemonkey and clipboards</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2006-12-08-22-21_greasemonkey_clipboards_and_other_javascript_fun/</link>
      <pubDate>Fri, 08 Dec 2006 22:21:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2006-12-08-22-21_greasemonkey_clipboards_and_other_javascript_fun/</guid>
      <description>&lt;p&gt;One of the jobs of an archive administrator in Ubuntu processing sync
requests.  The job is fairly simple:  read a sync request (in the form
of a bug report), make sure it includes the relevant information and is
either filed by or seconded by a person with the appropriate
permissions.  Then, it&amp;rsquo;s downloading the source, injecting it into the
correct queue and marking the bug as closed.&lt;/p&gt;
&lt;p&gt;The by far most boring bit of this is actually closing the bugs:
opening the bug report, clicking on the relevant task, marking as &amp;ldquo;Fix
released&amp;rdquo;, assigning to myself, pasting the update report from an editor
and clicking &amp;ldquo;submit&amp;rdquo;.  Rinse and repeat, today for 73 bugs.&lt;/p&gt;
&lt;p&gt;To help this, I started looking into writing a greasemonkey script.
Just add a button besides the submit button which would then be labeled
DTRT or something like it, but ran into some trouble which is really
obvious: Javascript run in the content&amp;rsquo;s security context can&amp;rsquo;t access
your clipboard.  A small hack to &lt;code&gt;greasemonkey.js&lt;/code&gt; fixed this and I now
have a shiny &lt;code&gt;GM_fromClipboard&lt;/code&gt; function.  After playing around with
this for a while, I thought it wouldn&amp;rsquo;t help me at all since the
javascript is called in the page content&amp;rsquo;s security context, but any
event listeners I add seemingly aren&amp;rsquo;t.  Nice.  (This is of course due
to the whole concept of closures and how Javascript works.)&lt;/p&gt;
&lt;p&gt;Anyway, I ended up with &lt;a href=&#34;http://err.no/src/lp_pasteandmark.user.js&#34;&gt;a script&lt;/a&gt; that does the right thing.
It needs a &lt;a href=&#34;http://err.no/patches/greasemonkey_GM_fromClipboard.diff&#34;&gt;greasemonkey patch&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Live CD on disk</title>
      <link>https://err.no/personal/blog/tech/2006-11-26-22-57_live_cd_on_disk/</link>
      <pubDate>Sun, 26 Nov 2006 22:57:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2006-11-26-22-57_live_cd_on_disk/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.enricozini.org//2006/tips/live-cd-on-removable-disk.html&#34;&gt;Enrico&lt;/a&gt; writes about putting a live CD on a removable disk.  I
added the support in &lt;code&gt;casper&lt;/code&gt; for doing this almost a year ago and it
has saved me lots of debugging time.  Booting the live CD that way is
almost as fast as booting an installed system.  If you couple this with
using the persistent storage support in &lt;code&gt;casper&lt;/code&gt;, you can get the
configure-on-boot support together with persistency.&lt;/p&gt;
&lt;p&gt;In a later update, slh is quited saying that xresprobe doesn&amp;rsquo;t work on
AMD64.  This is wrong, I wrote that support based on code by Matthew
Garret a little more than nine months ago.  I wouldn&amp;rsquo;t recommend
incorporating it in new-written code, but rather use &lt;code&gt;libx86&lt;/code&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>A replacement for screen.  Ish.</title>
      <link>https://err.no/personal/blog/tech/2006-11-17-07-27_screen_retty_and_friends/</link>
      <pubDate>Fri, 17 Nov 2006 07:27:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2006-11-17-07-27_screen_retty_and_friends/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://fortytwo.ch/blog/archives/2006/11/#e2006-11-16T15_22_25.txt&#34;&gt;Adrian von Bidder&lt;/a&gt; writes about retty, a tool to make processes
reattach to your terminal.  While useful, it seems mostly like a
limited version of &lt;a href=&#34;http://cryopid.berlios.de/&#34;&gt;cryopid&lt;/a&gt; which seems even more insane and
crackful, but quite cool nevertheless.  I have not had a chance to
actually try &lt;a href=&#34;http://cryopid.berlios.de/&#34;&gt;cryopid&lt;/a&gt; yet though, so if any of you have,
please blog about your experiences with it.  Oh, and please package it,
somebody.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Releasing Ubuntu</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2006-10-19-23-40_random_things_to_remember_when_releasing/</link>
      <pubDate>Thu, 19 Oct 2006 23:40:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2006-10-19-23-40_random_things_to_remember_when_releasing/</guid>
      <description>&lt;p&gt;So, the Ubuntu release candidate was released today.  As a release
manager, it&amp;rsquo;s a fascinating process.  First the development where there
is relativetly little central control:  People work on their specs and
my job as a relase manager is to roll new alpha/snapshot releases every
couple of weeks.  Those are lightly tested (does it boot and install on
at least one machine?) and if a derivative or an architecture isn&amp;rsquo;t
ready, well, then it isn&amp;rsquo;t ready.&lt;/p&gt;
&lt;p&gt;Beta, the release candidate and the release are completely different
beasts.  We have test plans, people are assigned tests and so on.  In
addition, we have a freeze which in total lasts about a week for beta,
two weeks for release.  Every upload has to be hand-checked and
approved.  As the release grows nearer, the bugs have to be more severe
in order for an upload to be approved and in the end it&amp;rsquo;s more or less a
full commitment &amp;ldquo;we have this, we have tested this thoroughly and there
is no way we can do a full test and still release on schedule&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;At some point, it gets scary.  There is just one command left to run;
&lt;code&gt;sync-mirrors&lt;/code&gt;.  No arguments, just the command.  I pushed the button,
and we are now live.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Contentless ping annoying</title>
      <link>https://err.no/personal/blog/tech/2006-10-10-12-05_contentless_pings/</link>
      <pubDate>Tue, 10 Oct 2006 12:05:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2006-10-10-12-05_contentless_pings/</guid>
      <description>&lt;p&gt;People tend to just ping me on IRC, which is annoying and useless.  If
people say something like &lt;code&gt;tfheen: I have this problem with blah.  Do you know a workaround?&lt;/code&gt; I can just respond later when I&amp;rsquo;m
awake or around.  Instead, people are going: &lt;code&gt;tfheen: ping?&lt;/code&gt; and I
pong five hours later and they&amp;rsquo;re not around.  Annoying for all parts.&lt;/p&gt;
&lt;p&gt;To counter this, I have now written a small irssi script which
responds to contentless pings with &amp;ldquo;You sent me a contentless ping.
This is a contentless pong.  Please provide a bit of information about
what you want and I&amp;rsquo;ll respond when I am around.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The script is &lt;a href=&#34;http://err.no/src/contentless_ping.pl&#34;&gt;available&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The Top Ten Unix Shell Commands</title>
      <link>https://err.no/personal/blog/tech/memes/2006-09-23-08-53_top_ten_unix_commands/</link>
      <pubDate>Sat, 23 Sep 2006 08:53:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/memes/2006-09-23-08-53_top_ten_unix_commands/</guid>
      <description>&lt;p&gt;A bit surprising, really.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;: tfheen@thosu ~ &amp;gt; history 1|awk &#39;{print $2}&#39;|awk &#39;BEGIN {FS=&amp;quot;|&amp;quot;} {print $1}&#39;|sort|uniq -c | sort -nr |head -n 10
  21477 ls
  18170 cd
  10640 ssh
   9257 sudo
   5559 less
   3015 grep
   2407 bzr
   2101 ps
   1980 man
   1980 debuild
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For those of you wondering why there is no editor on the list; I use
emacs and it&amp;rsquo;s in the 11th place (with 1903 runs).  I tend to let it run
for a while and open more than one file, so it doesn&amp;rsquo;t get that high on
the list.  I also &lt;code&gt;cd&lt;/code&gt; and &lt;code&gt;ls&lt;/code&gt; a lot.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Švyturys 1784 Ekstra</title>
      <link>https://err.no/personal/blog/beer/2006-09-20-22-44_%C5%A1vyturys_1784_ekstra/</link>
      <pubDate>Wed, 20 Sep 2006 22:44:00 +0200</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/beer/2006-09-20-22-44_%C5%A1vyturys_1784_ekstra/</guid>
      <description>&lt;p&gt;A Lithiuanian light lager, 0.33 bottle.  Colour is light straw while the
foam is pure white.  As most lagers, this is filtered and not
bottle-conditioned.  The foam leaves some signs behind, but not much.
Smell is not very particular in any direction; a bit fresh and maybe a
hint of summer, but not very strong.&lt;/p&gt;
&lt;p&gt;The beer tastes a bit like an ale with the rounder, more friendly taste
than the fizzy and almost angry lagers.  Decent amounts of carbonation,
but absolutely not too much.  Medium bitterness with a tiny, tiny hint
of citrus.&lt;/p&gt;
&lt;p&gt;All in all, an interesting enough light beer, but those aren&amp;rsquo;t among my
favourites, so it falls through because of that.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Formulating iCalendar in SQL</title>
      <link>https://err.no/personal/blog/tech/2006-09-19-22-56_icalendar_and_sql/</link>
      <pubDate>Tue, 19 Sep 2006 22:56:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2006-09-19-22-56_icalendar_and_sql/</guid>
      <description>&lt;p&gt;I am currently working on something which hopefully end up being a good
calendar server.  The goal is to make it easy to add new frontends such
as a CalDAV frontend, a Web frontend, etc.&lt;/p&gt;
&lt;p&gt;So far, I am just working on getting the data model right.  The
&lt;a href=&#34;http://tools.ietf.org/html/rfc2445&#34;&gt;iCalendar RFC&lt;/a&gt; has a data model which I am trying to formulate
into SQL, something which is ending up being quite hard.  &lt;a href=&#34;http://blogs.jigzaw.com/?p=53&#34;&gt;Shannon
Clark&lt;/a&gt; blogs about why calendars are hard, and all of
those issues are issues I am running up against when trying to make the
data model.&lt;/p&gt;
&lt;p&gt;The main problem seems to be related to time zones, more closely: &amp;ldquo;How
do you store timezone information in your database&amp;rdquo;.  The easy (but
wrong) solution is to just normalise everything to UTC.  This will not
handle the case of events crossing timezone changes, such as to or from
daylight savings.&lt;/p&gt;
&lt;p&gt;What I am currently considering is making sure all data in the database
is stored in UTC, but also store the original time zone information.
While a bit more complex, this allows applications to get back the same
timezone they put in (I am not convinced Evolution will be happy if the
timezones are renamed, for instance) and it allows my application to
generate recurring events properly.  My main issue with this is having
the application responsible for making sure the data in the database
makes sense, but without putting half my app in PL/perl, I can not see a
way around that.&lt;/p&gt;
&lt;p&gt;Oh, and if anybody has great ideas on how to represent timezones in a
relational database (postgres), please do &lt;a href=&#34;mailto:tfheen@err.no&#34;&gt;mail me&lt;/a&gt; or grab me on IRC or
something similar.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Common mistakes foreigners make when writing English</title>
      <link>https://err.no/personal/blog/tech/2006-09-13-13-43_common_typos/</link>
      <pubDate>Wed, 13 Sep 2006 13:43:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2006-09-13-13-43_common_typos/</guid>
      <description>&lt;p&gt;If you are using &amp;ldquo;loose&amp;rdquo; when you mean the opposite of win, please stop.
Use &amp;ldquo;lose&amp;rdquo;.  Loose is the opposite of tight.&lt;/p&gt;
&lt;p&gt;Similarly, &amp;ldquo;noone&amp;rdquo; is (almost always) wrong.  You mean &amp;ldquo;no one&amp;rdquo;.  Noone
is an obsolete form of &amp;ldquo;noon&amp;rdquo; (mid-day).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>X broken in Dapper</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2006-08-24-11-36_broken_x_in_ubuntu/</link>
      <pubDate>Thu, 24 Aug 2006 11:36:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2006-08-24-11-36_broken_x_in_ubuntu/</guid>
      <description>&lt;p&gt;&lt;em&gt;(and what we want to do to avoid similar problems in the future)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A few days ago, a &lt;a href=&#34;https://launchpad.net/distros/ubuntu/+source/xorg-server/+bug/57153&#34;&gt;broken xserver-xorg-core&lt;/a&gt; was
uploaded to &lt;code&gt;dapper-updates&lt;/code&gt;.  This caused, unsurprisingly, a large
amount of bug reports.  A fixed package was uploaded about 12 hours
after the first bug report came in.  We also pointed all the
&lt;code&gt;$countrycode.archive.ubuntu.com&lt;/code&gt; (&lt;code&gt;se.archive.ubuntu.com&lt;/code&gt;,
&lt;code&gt;au.archive.ubuntu.com&lt;/code&gt;, etc) to archive.ubuntu.com to speed up the
propagation of the fix.  Even so, it hit far, far too many users.&lt;/p&gt;
&lt;p&gt;Incidentially, the distro team is currently in a sprint in Wiesbaden,
Germany and we had a large discussion this morning about both how to
handle such situations when they happen (and recover from them, mostly
in the technical sense) and how to prevent them from happening in the
first place.  The latter is obviously more important as we won&amp;rsquo;t have to
recover if there is not a problem in the first place.  Note that those
ideas listed below were ideas and not finished procedures and we are
going to write up a proper policy document.&lt;/p&gt;
&lt;p&gt;Ideas for prevention ranged form using &lt;code&gt;$distro-proposed&lt;/code&gt; and explicit
call for testers of that to getting more code review for updates.
The current review process for updates to &lt;code&gt;$distro-updates&lt;/code&gt; is a review
by the release manager who accepts it into &lt;code&gt;$distro-updates&lt;/code&gt;.  This
update passed that review even though the update was faulty, so even if
we had another reviewer, it might have passed that review too.
Using &lt;code&gt;$distro-proposed&lt;/code&gt; does not prevent the problem from affecting
anybody, it just changes the group affected with the goal that the group
choosing to enable &lt;code&gt;$distro-proposed&lt;/code&gt; will hopefully be able to recover
more easily.&lt;/p&gt;
&lt;p&gt;Recovery ideas ranged from being able to put an update onto a user&amp;rsquo;s
machine whether he wanted it or not to snapshot/rollback support and
having some kind of a &amp;ldquo;safe mode&amp;rdquo; where it would give you a kdrive-based
VESA X server and tools to fix your system.  I&amp;rsquo;m not sure what we would
do if we managed to break one of those tools (or the &amp;ldquo;safe-mode&amp;rdquo; X
server), though.&lt;/p&gt;
&lt;p&gt;We all agreed that being open about the problem, the cause of the
problem and how we are working to solve it is important.  Downplaying
the severity or making jokes or sarcastic comments about the fix
(&amp;ldquo;Ooops, we did it again&amp;rdquo;) is bad and something we shouldn&amp;rsquo;t do.  (And I
don&amp;rsquo;t think we did it this time either.)  No response is equally bad and
something we should work hard to avoid.&lt;/p&gt;
&lt;p&gt;Hopefully, we will have a procedure in place in a little while which
tells us how to handle such an emergency when it happens and we will be
deploying safeguards to prevent it from happening again while not ending
up paralysing us and making us unable to deploy updates to
&lt;code&gt;$distro-updates&lt;/code&gt; as this is something we need to be able to.&lt;/p&gt;
&lt;p&gt;While this post is fairly critical of the current set of policies and
procedures, I have tried hard to avoid pointing fingers at anybody in
particular.  I would much rather have us have a positive and
constructive discussion about how to avoid similar problems in the
future than a discussion on who is to blame.  The points and views in
this post is also those of my own and not any kind of official
communication from Canonical or Ubuntu.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ubuntu dapper for SPARC released</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2006-06-16-13-06_dapper_sparc_released/</link>
      <pubDate>Fri, 16 Jun 2006 13:06:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2006-06-16-13-06_dapper_sparc_released/</guid>
      <description>&lt;p&gt;A bit later than the others, with a bit of manual hacking of
&lt;code&gt;debian-cd&lt;/code&gt; scripts as well as the &lt;code&gt;publish-release&lt;/code&gt; script (so we
didn&amp;rsquo;t lose the other arches) and with a great effort from Fabio, Adam
and Celso, Dapper for SPARC (with Niagara support) is now out.  It got
delayed due to the &lt;code&gt;tg3&lt;/code&gt; NIC on the T1000 and the kernel not playing
to nicely together.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hackergotchi for Robot101</title>
      <link>https://err.no/personal/blog/tech/debian/2006-06-04-21-25_robot101_hackergotchi/</link>
      <pubDate>Sun, 04 Jun 2006 21:25:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2006-06-04-21-25_robot101_hackergotchi/</guid>
      <description>&lt;p&gt;Since I&amp;rsquo;m impatient and Robot101 didn&amp;rsquo;t respond within ten minutes of me
pinging him on IRC, I&amp;rsquo;m just posting the result of his request for a
hackergotchi.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://err.no/images/2006-06-04-robot101.jpeg&#34; alt=&#34;Robot101&#34;&gt;&lt;/p&gt;
&lt;p&gt;Above is JPEG, but there&amp;rsquo;s an
&lt;a href=&#34;http://err.no/images/2006-06-04-robot101.xcf&#34;&gt;XCF&lt;/a&gt; available too,
with full transparency goodness, etc.&lt;/p&gt;
&lt;p&gt;Next time, it&amp;rsquo;d be useful to have a starting image where the head is bit
more than 180x230 pixels since doing cropping and resizes and such
tend to end with the image not being great.&lt;/p&gt;
&lt;p&gt;Also, my space bar is failing and I&amp;rsquo;ll have to call IBM when I get home.
I&amp;rsquo;m actually quite disappointed that I seem to have worn out the space
bar in about a year and a half.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Am I spoiled?</title>
      <link>https://err.no/personal/blog/tech/memes/2006-04-22-11-23_spoiled_or_not/</link>
      <pubDate>Sat, 22 Apr 2006 11:23:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/memes/2006-04-22-11-23_spoiled_or_not/</guid>
      <description>&lt;p&gt;(By way of &lt;a href=&#34;http://magnio.livejournal.com/&#34;&gt;magnio&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Go through the list. Tick everything you have or have done. If you can
tick 40 or more, you&amp;rsquo;re spoiled.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;☑ your own cell phone&lt;/li&gt;
&lt;li&gt;☐ a television in your bedroom&lt;/li&gt;
&lt;li&gt;☐ an iPod&lt;/li&gt;
&lt;li&gt;☐ a photo printer&lt;/li&gt;
&lt;li&gt;☐ your own phone line&lt;/li&gt;
&lt;li&gt;☐ TiVo or a generic digital video recorder&lt;/li&gt;
&lt;li&gt;☑ high-speed internet access (i.e., not dialup)&lt;/li&gt;
&lt;li&gt;☐ a surround sound system in bedroom&lt;/li&gt;
&lt;li&gt;☐ DVD player in bedroom&lt;/li&gt;
&lt;li&gt;☐ at least a hundred DVDs&lt;/li&gt;
&lt;li&gt;☑ a childfree bathroom (well, no children yet)&lt;/li&gt;
&lt;li&gt;☑ your own in-house office (I share it with Karianne, but it&amp;rsquo;s still
my own)&lt;/li&gt;
&lt;li&gt;☐ a pool&lt;/li&gt;
&lt;li&gt;☐ a guest house&lt;/li&gt;
&lt;li&gt;☐ a game room&lt;/li&gt;
&lt;li&gt;☑ a queen-size bed&lt;/li&gt;
&lt;li&gt;☑ a stocked bar&lt;/li&gt;
&lt;li&gt;☑ a working dishwasher&lt;/li&gt;
&lt;li&gt;☐ an icemaker&lt;/li&gt;
&lt;li&gt;☐ a working washer and dryer&lt;/li&gt;
&lt;li&gt;☐ more than 20 pairs of shoes&lt;/li&gt;
&lt;li&gt;☐ at least ten things from a designer store&lt;/li&gt;
&lt;li&gt;☐ expensive sunglasses (what&amp;rsquo;s expensive?  I think mine cost about 400
NOK, which is about 50€)&lt;/li&gt;
&lt;li&gt;☐ framed original art (not lithographs or prints)&lt;/li&gt;
&lt;li&gt;☐ Egyptian cotton sheets or towels&lt;/li&gt;
&lt;li&gt;☑ a multi-speed bike&lt;/li&gt;
&lt;li&gt;☑ a gym membership&lt;/li&gt;
&lt;li&gt;☑ large exercise equipment at home (well, an exercise bike, large
enough)&lt;/li&gt;
&lt;li&gt;☐ your own set of golf clubs&lt;/li&gt;
&lt;li&gt;☐ a pool table&lt;/li&gt;
&lt;li&gt;☐ a tennis court&lt;/li&gt;
&lt;li&gt;☐ local access to a lake, large pond, or the sea&lt;/li&gt;
&lt;li&gt;☑ your own pair of skis&lt;/li&gt;
&lt;li&gt;☑ enough camping gear for a weekend trip in an isolated area&lt;/li&gt;
&lt;li&gt;☐ a boat&lt;/li&gt;
&lt;li&gt;☐ a jet ski&lt;/li&gt;
&lt;li&gt;☐ a neighborhood committee membership&lt;/li&gt;
&lt;li&gt;☐ a beach house or a vacation house/cabin&lt;/li&gt;
&lt;li&gt;☐ wealthy family members (what&amp;rsquo;s wealthy?, affluent maybe, but
certainly not wealthy)&lt;/li&gt;
&lt;li&gt;☐ two or more family cars&lt;/li&gt;
&lt;li&gt;☐ a walk-in closet or pantry&lt;/li&gt;
&lt;li&gt;☐ a yard&lt;/li&gt;
&lt;li&gt;☑ a hammock&lt;/li&gt;
&lt;li&gt;☐ a personal trainer&lt;/li&gt;
&lt;li&gt;☑ good credit&lt;/li&gt;
&lt;li&gt;☐ expensive jewelry&lt;/li&gt;
&lt;li&gt;☐ a designer bag that required being on a waiting list to get&lt;/li&gt;
&lt;li&gt;☑ at least $100 cash in your possession right now&lt;/li&gt;
&lt;li&gt;☐ more than two credit cards bearing your name (not counting gas cards or debit cards)&lt;/li&gt;
&lt;li&gt;☑ a stock portfolio&lt;/li&gt;
&lt;li&gt;☑ a passport&lt;/li&gt;
&lt;li&gt;☐ a horse&lt;/li&gt;
&lt;li&gt;☐ a trust fund (either for you or created by you)&lt;/li&gt;
&lt;li&gt;☐ private medical insurance&lt;/li&gt;
&lt;li&gt;☑ a college degree, and no outstanding student loans&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;☐ shop for non-needed items for yourself (like clothes, jewelry,
electronics) at least once a week&lt;/li&gt;
&lt;li&gt;☐ do your regular grocery shopping at high-end or specialty stores&lt;/li&gt;
&lt;li&gt;☐ pay someone else to clean your house, do dishes, or launder your
clothes (not counting dry-cleaning)&lt;/li&gt;
&lt;li&gt;☐ go on weekend mini-vacations&lt;/li&gt;
&lt;li&gt;☐ send dinners back with every flaw&lt;/li&gt;
&lt;li&gt;☐ wear perfume or cologne (not body spray)&lt;/li&gt;
&lt;li&gt;☐ regularly get your hair styled or nails done in a salon&lt;/li&gt;
&lt;li&gt;☐ have a job but don&amp;rsquo;t need the money OR&lt;/li&gt;
&lt;li&gt;☐ stay at home with little financial sacrifice&lt;/li&gt;
&lt;li&gt;☐ pay someone else to cook your meals&lt;/li&gt;
&lt;li&gt;☐ pay someone else to watch your children or walk your dogs&lt;/li&gt;
&lt;li&gt;☐ regularly pay someone else to drive you&lt;/li&gt;
&lt;li&gt;☐ expect a gift after you fight with your partner&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Are you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;☐ an only child&lt;/li&gt;
&lt;li&gt;☐ married/partnered to a wealthy person&lt;/li&gt;
&lt;li&gt;☐ baffled/surprised when you don&amp;rsquo;t get your way&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Have you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;☐ been on a cruise&lt;/li&gt;
&lt;li&gt;☑ traveled out of the country&lt;/li&gt;
&lt;li&gt;☑ met a celebrity&lt;/li&gt;
&lt;li&gt;☐ been to the Caribbean&lt;/li&gt;
&lt;li&gt;☑ been to Europe (Well, I live there)&lt;/li&gt;
&lt;li&gt;☑ BEEN TO HONG KONG&lt;/li&gt;
&lt;li&gt;☐ been to Hawaii&lt;/li&gt;
&lt;li&gt;☐ been to New York&lt;/li&gt;
&lt;li&gt;☐ eaten at the space needle in Seattle&lt;/li&gt;
&lt;li&gt;☐ been to the Mall of America&lt;/li&gt;
&lt;li&gt;☐ been on the Eiffel tower in Paris&lt;/li&gt;
&lt;li&gt;☐ been on the Statue of Liberty in New York&lt;/li&gt;
&lt;li&gt;☐ moved more than three times because you wanted to&lt;/li&gt;
&lt;li&gt;☑ dined with local political figures (actually more of a national&lt;/li&gt;
&lt;li&gt;political figure)&lt;/li&gt;
&lt;li&gt;☑ been to both the Atlantic coast and the Pacific coast (Atlantic,&lt;/li&gt;
&lt;li&gt;multiple times around Europe.  Pacific, in Australia and Hong Kong)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Did you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;☐ go to another country for your honeymoon (No, but we&amp;rsquo;re going to)&lt;/li&gt;
&lt;li&gt;☐ hire a professional photographer for your wedding or party&lt;/li&gt;
&lt;li&gt;☐ take riding or swimming lessons as a child&lt;/li&gt;
&lt;li&gt;☐ attend private school&lt;/li&gt;
&lt;li&gt;☐ have a Sweet 16 birthday party thrown for you&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;24, so a bit more spoiled than Magni.  Not that much, though.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>HaandBryggeriet Porter</title>
      <link>https://err.no/personal/blog/beer/2006-04-20-18-34_haandbryggeriet_porter/</link>
      <pubDate>Thu, 20 Apr 2006 18:34:00 +0200</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/beer/2006-04-20-18-34_haandbryggeriet_porter/</guid>
      <description>&lt;p&gt;In Drammen, a bit outside Oslo, there&amp;rsquo;s a small brewery called
&amp;ldquo;HaandBryggeriet&amp;rdquo; (meaning &amp;ldquo;The Hand Brewery&amp;rdquo;).  Among their beers is a
porter which I picked up some weeks ago.  Today, I decided to taste it.&lt;/p&gt;
&lt;p&gt;The bottle is not the same as the somewhat-standard Nøgne Ø bottles
which have become common lately, but one which has a bit less of a neck
and a bit rounder.  The beer itself is bottle-conditioned, unpasturised
and unfiltered, so the usual precaution of leaving the last cm or so in
the bottle applies.&lt;/p&gt;
&lt;p&gt;Dark beer, as a porter should be.  It doesn&amp;rsquo;t have much fizz, nor does
it have much foam.  A bit too little, in fact, but I don&amp;rsquo;t mind too much
about that.  The taste is slightly bitter, with lots of chocolate and
coffee.  Somewhat sweet and very nice.  Only a shame it&amp;rsquo;s just a
half-litre bottle.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Bryghuset Svaneke Påske bryg</title>
      <link>https://err.no/personal/blog/beer/2006-04-15-18-02_bryghuset_svaneke_paaske_bryg/</link>
      <pubDate>Sat, 15 Apr 2006 18:02:00 +0200</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/beer/2006-04-15-18-02_bryghuset_svaneke_paaske_bryg/</guid>
      <description>&lt;p&gt;A fairly light beer made for Easter.  Bryghuset Svaneke is a small
brewery on the Danish island of Bornholm.  They make tiny batches, just
about 1000 liters.  The beer itself is a somewhat-fruity ale. Not too
much foam which lies down quickly.  Carbonation is on the same level as
most pilseners, so fairly carbonated, but it&amp;rsquo;s naturally carbonated on
bottle.&lt;/p&gt;
&lt;p&gt;All in all a nice Easter beer from a small and nice brewery.  I had a
bottle of it last year too, but can&amp;rsquo;t remember what it tasted like then,
except it was a whole lot cheaper.  This time, I bought it from
Vinmonopolet (the state-run wine, spirits and strong beer monopoly)
where it costs a whole lot more than in Danish supermarket.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Incrementing Zone serials</title>
      <link>https://err.no/personal/blog/tech/debian/2006-03-31-17-27_zone_serials/</link>
      <pubDate>Fri, 31 Mar 2006 17:27:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2006-03-31-17-27_zone_serials/</guid>
      <description>&lt;p&gt;&lt;code&gt;-*- zone -*-&lt;/code&gt; in one of the first two lines of the file.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Flight 5 released</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2006-03-12-00-28_flight-5_released/</link>
      <pubDate>Sun, 12 Mar 2006 00:28:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2006-03-12-00-28_flight-5_released/</guid>
      <description>&lt;p&gt;So, I did my first Ubuntu release today.  Not a real release, but it
felt real enough anyway.  Flight 5, the fifth alpha release of Ubuntu
6.04 is out.  Colin was nice (as usual) and helped me through the whole
process and it was quite painless.  Yay, fun.  Even though it was work
on a Saturday.  Also a big thanks to Adam for tag-teaming with me and
making sure that most of the issues were taken care of when I came in on
Friday.&lt;/p&gt;
&lt;p&gt;Also:  &lt;em&gt;PENGUINS&lt;/em&gt;.  Even though &amp;ldquo;little penguin&amp;rdquo; is a silly name.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>i18n done the wrong way.</title>
      <link>https://err.no/personal/blog/tech/2006-01-25-12-19_misunderstood_i18n/</link>
      <pubDate>Wed, 25 Jan 2006 12:19:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2006-01-25-12-19_misunderstood_i18n/</guid>
      <description>&lt;p&gt;From &lt;code&gt;evolution&lt;/code&gt;&amp;rsquo;s &lt;code&gt;widgets/misc/e-dateedit&lt;/code&gt;, a custom date field:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    e_utf8_strftime (buffer, sizeof (buffer), _(&amp;quot;%m/%d/%Y&amp;quot;), &amp;amp;tmp_tm);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You see that &lt;code&gt;_(&amp;quot;%m/%d/%Y&amp;quot;)&lt;/code&gt; there?  That means you&amp;rsquo;ll only have a sane
(that is, non-American) date format if you&amp;rsquo;re running with &lt;code&gt;LC_MESSAGES&lt;/code&gt;
set to the format you prefer for dates and such.  It also means extra
work for the translator as well as possible errors due to translators
having a personal preferred way to write dates.  Using &amp;ldquo;%x&amp;rdquo; instead
fixes the problem (verified by binary patching
&lt;code&gt;/usr/lib/evolution/2.6/libemiscwidgets.so.0.0.0&lt;/code&gt;, since I don&amp;rsquo;t have a
very recent evolution source handy) and gives me nice and (semi-)sane
dates.&lt;/p&gt;
&lt;p&gt;Bug not yet filed due to me being aboard an aeroplane.&lt;/p&gt;
&lt;p&gt;Now I just have to fix the way to write dates in &lt;code&gt;nb_NO.UTF-8&lt;/code&gt; into the
same as ISO-8601, but that should be easy enough.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update. I meant %x, not %c, of course&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How to configure XKB to give you a compose button</title>
      <link>https://err.no/personal/blog/tech/debian/2006-01-23-22-06_compose_using_xkb/</link>
      <pubDate>Mon, 23 Jan 2006 22:06:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2006-01-23-22-06_compose_using_xkb/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://ze-dinosaur.livejournal.com/3495.html&#34;&gt;Eric Dorland&lt;/a&gt; wonders how
to enable the Compose key just using XKB.  Personally, I use my caps
lock key for that, and using&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        Option          &amp;quot;XkbOptions&amp;quot;    &amp;quot;compose:caps&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in &lt;code&gt;/etc/X11/xorg.conf&lt;/code&gt;, that&amp;rsquo;s easy enough.&lt;/p&gt;
&lt;p&gt;Other options are &lt;code&gt;compose:ralt&lt;/code&gt;, &lt;code&gt;compose:rwin&lt;/code&gt;, &lt;code&gt;compose:menu&lt;/code&gt; and
&lt;code&gt;compose:rctrl&lt;/code&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>On humans failing Turing tests</title>
      <link>https://err.no/personal/blog/tech/debian/2006-01-11-09-16_turing_tests/</link>
      <pubDate>Wed, 11 Jan 2006 09:16:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2006-01-11-09-16_turing_tests/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://adam.rosi-kessel.org/weblog/this_weblog/humans_fall_turing_test.html&#34;&gt;Adam Rosi-Kessel&lt;/a&gt; writes about humans failing Turing tests.  Apart
from speculating why this is happening, a workaround could be to use CSS
(or javascript) to hide the input box, or possibly the same for
disabling it.  I imagine most spambots don&amp;rsquo;t parse the CSS or run the
javascript.  Of course, the text saying &amp;ldquo;please don&amp;rsquo;t write anything
here&amp;rdquo; should be kept.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Casper, the friendly little ghost</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2006-01-10-22-08_casper/</link>
      <pubDate>Tue, 10 Jan 2006 22:08:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2006-01-10-22-08_casper/</guid>
      <description>&lt;p&gt;Everybody who has used an Ubuntu live cd over the last nine months or so
has used casper.  It started out as a special udeb, called by the
debian-installer code to bootstrap a live environment.  While d-i is
fairly flexible, this was stretching the limits and not really a great
solution.  Amongst the problems were user interactivity halfway through
the boot and a very slow boot.&lt;/p&gt;
&lt;p&gt;In the middle of December, mdz asked me if I could take a look at
implementing the
&lt;a href=&#34;http://wiki.ubuntu.com/SimplifiedLiveCD&#34;&gt;SimplifiedLiveCD&lt;/a&gt;
specification.  As I had played a bit with casper already, I did.
Casper is nothing like what it used to be, it now uses initramfs, so no
user interactivity after the bootloader.  It uses unionfs where
available, which &lt;a href=&#34;http://people.ubuntu.com/~tfheen/live-bootcharts/unionfs-dapper-20051212-1.png&#34;&gt;speeds it up a fair bit&lt;/a&gt;
(compare to
&lt;a href=&#34;http://people.ubuntu.com/~tfheen/live-bootcharts/devmapper-dapper-20051215-1.png&#34;&gt;devmapper + cloop&lt;/a&gt;), and if the cd image has
squashfs, it uses that too, which makes it &lt;a href=&#34;http://people.ubuntu.com/~tfheen/live-bootcharts/unionfs-squashfs-dapper-20051216-1.png&#34;&gt;even
faster&lt;/a&gt;.  Boot time improvements from around 368 to
about 231 seconds is fairly good, but I hope to get it even lower.&lt;/p&gt;
&lt;p&gt;What I really, really like about casper however is how hackable it is.
I added cd integrity check in less than a day (modulo some bugs in
usplash I had to fix).  Today, I integrated it with the new usplash in
initramfs, so we actually have progress in the initramfs as well.
(Instead of &amp;ldquo;mounting root file system&amp;rdquo; taking about 40 seconds.)&lt;/p&gt;
&lt;p&gt;Another neat feature is the persistence support.  It will now look for
filesystems with the label &lt;code&gt;casper-cow&lt;/code&gt; (that will be changed to
&lt;code&gt;ubuntu-live-rw&lt;/code&gt;, I think) if &lt;code&gt;persistent&lt;/code&gt; is seen on the kernel command
line.  This makes it easy to drag your setup around with just an USB key
and any Ubuntu live cd.&lt;/p&gt;
&lt;p&gt;Next out is getting keyboard selection better and more speedups.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Social dysfunction: happy</title>
      <link>https://err.no/personal/blog/tech/memes/2006-01-08-19-18_i_am_happy.txt/</link>
      <pubDate>Sun, 08 Jan 2006 19:18:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/memes/2006-01-08-19-18_i_am_happy.txt/</guid>
      <description>&lt;p&gt;I have no idea how happy can be a social dysfunction, but here we go:&lt;/p&gt;
&lt;table border=&#34;1&#34; width=&#34;355&#34; cellspacing=&#34;0&#34; cellpadding=&#34;0&#34; name=&#34;qgtable2&#34;&gt;
&lt;tr&gt;
&lt;td align=&#34;center&#34;&gt;
&lt;font size=&#34;+2&#34;&gt;Your Social Dysfunction:&lt;br /&gt;Happy&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;
You&#39;re a happy person - you have a good amount of self-esteem, and are
socially healthy.  While this isn&#39;t a social dysfunction per se, you&#39;re
definitely not normal.  Consider yourself lucky: you walk that fine line
between &#39;normal&#39; and being outright narcissistic.  You&#39;re rare - which
is something else to be happy about.&lt;br /&gt;&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table name=&#34;qgtable&#34; width=&#34;350&#34; height=&#34;350&#34; cellpadding=&#34;0&#34;
cellspacing=&#34;0&#34; border=&#34;0&#34; style=&#39;background:
url(http://www.quizgalaxy.com/result_images/social-dysfunction-bg.jpg);
background-repeat: no-repeat;&#39;&gt;
&lt;tbody&gt;
&lt;tr height=&#34;58&#34;&gt;
    &lt;td width=&#34;123&#34;&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr height=&#34;292&#34;&gt;
    &lt;td width=&#34;123&#34;&gt;&lt;/td&gt;
    &lt;td valign=&#34;top&#34; align=&#34;left&#34; border=&#34;0&#34;&gt;&lt;img
src=&#34;http://www.quizgalaxy.com/result_images/locator.gif&#34; border=&#34;0&#34;
/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;center&#34; border=&#34;0&#34;&gt;
&lt;a href=&#34;http://www.quizgalaxy.com/quiz.php?id=72&#34;&gt;Take this quiz&lt;/a&gt; at
&lt;a href=&#34;http://www.quizgalaxy.com&#34;&gt;QuizGalaxy.com&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;&lt;div style=&#34;font-size: 7pt;&#34;&gt;Please note that we aren&#39;t, nor
do we claim to be, psychologists.  This quiz is for fun and
entertainment only.  Try not to freak out about your results.&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</description>
    </item>
    
    <item>
      <title>L&#39;Eau Benite</title>
      <link>https://err.no/personal/blog/beer/2006-01-07-18-09_l_eau_benite/</link>
      <pubDate>Sat, 07 Jan 2006 18:09:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/beer/2006-01-07-18-09_l_eau_benite/</guid>
      <description>&lt;p&gt;This is the second of a set of sample beers Karianne and I brought home
from Canada.  It&amp;rsquo;s described as &amp;ldquo;a golden ale with a slightly fruity
taste and a light spicy aromatic flavour&amp;rdquo;.  It&amp;rsquo;s absolutely an ale, but
it mostly reminds me of Stjørdalsøl, the &amp;ldquo;beer&amp;rdquo; Anders served this fall.
Unlike Stjørdalsøl, this is carbonated like normal beer.  What&amp;rsquo;s special
about this compared to a regular ale is the taste of burnt or smoked
barley.  As long as the taste is not too strong, I find it quite good,
but too much (as is the case with Stjørdalsøl), it just gets
overwhelming and makes the beer undrinkable.&lt;/p&gt;
&lt;p&gt;The body is relativetly thin, as is the case with regular ales.
Carbonation is a bit on the high side compared to the rest of the beer.
The ale is more of a spring or summer drink than something to drink
around the turn of the year.&lt;/p&gt;
&lt;p&gt;So, all in all an interesting beer, but not one I&amp;rsquo;m going to drink much
more of in the future (just the fact that you can&amp;rsquo;t get it outside of
Canada limits the chance I&amp;rsquo;ll see it again anyway).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Abusing usplash</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2006-01-05-09-57_abusing_usplash/</link>
      <pubDate>Thu, 05 Jan 2006 09:57:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2006-01-05-09-57_abusing_usplash/</guid>
      <description>&lt;p&gt;Last night, I ended up hacking on the &lt;code&gt;usplash&lt;/code&gt; and &lt;code&gt;casper&lt;/code&gt; codebases
until about 0500 (local time) in the morning (mostly due to the
developer status meeting at 0200 UTC).&lt;/p&gt;
&lt;p&gt;usplash had a fairly icky bug where it would choke and die if the fifo
filled up and it got &amp;ldquo;incomplete&amp;rdquo; commands.  No longer, it now uses a
buffer which it fills up and then processes, handling partial commands
and such correctly.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;casper-md5check&lt;/code&gt; is a tool which does md5summing according to a list of
files, similar to the regular &lt;code&gt;md5sum&lt;/code&gt; program, but with one notable
exception: it does progress information through usplash.  So, since the
live CD has a huge file which is the compressed live file system, just
doing a per-file progress bar would be silly and inaccurate.  It
therefore does a size-based progress bar which looks quite neat.&lt;/p&gt;
&lt;p&gt;If the debian-cd config has already been updated, just pulling down
today&amp;rsquo;s daily cd and choosing &amp;ldquo;integrity check&amp;rdquo; should show you the nice
little hack.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Mail based tracking systems: RT</title>
      <link>https://err.no/personal/blog/tech/debian/2005-12-26-11-17_mail_based_tracking_systems/</link>
      <pubDate>Mon, 26 Dec 2005 11:17:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-12-26-11-17_mail_based_tracking_systems/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://blog.philkern.de/archives/108-Mail-based-tracking-system.html&#34;&gt;Philipp
Kern&lt;/a&gt;
asks about mail-based tracking systems.  Even though he specifically
says &amp;ldquo;no&amp;rdquo; to RT, I would recommend it.  The source is very hackable and
making up commands for changing ticket properties is easy.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fakecat (re)licencing</title>
      <link>https://err.no/personal/blog/tech/debian/2005-11-28-08-12_fakecat_relicence/</link>
      <pubDate>Mon, 28 Nov 2005 08:12:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-11-28-08-12_fakecat_relicence/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.tribulaciones.org/blog/computers/software/pyblosxom-fakecat_26-11-2005&#34;&gt;Jose Carlos Garcia
Sogo&lt;/a&gt;
writes that I&amp;rsquo;ve not put a licence on my &lt;a href=&#34;http://err.no/pyblosxom/plugins/fakecat.py&#34;&gt;fakecat plugin for
pyblosxom&lt;/a&gt;.  This has now
been fixed.  Also, please do send me patches even in the cases where I
have forgotten to licence it appropriately.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ccache and configuration</title>
      <link>https://err.no/personal/blog/tech/2005-11-27-22-23_ccache/</link>
      <pubDate>Sun, 27 Nov 2005 22:23:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-11-27-22-23_ccache/</guid>
      <description>&lt;p&gt;As &lt;a href=&#34;http://www.grassouille.org/blog/index.php/Debian/051124&#34;&gt;Benjamin
Drieu&lt;/a&gt; noted,
&lt;code&gt;ccache&lt;/code&gt; is a wonderful tool.  He complains about the configuration
needed, which in the Debian package is really, really small.  Just do
&lt;code&gt;PATH=/usr/lib/ccache:$PATH&lt;/code&gt; in your &lt;code&gt;.bashrc&lt;/code&gt; or &lt;code&gt;.zshrc&lt;/code&gt; and it will
be used for all compilations.  Very useful and less cumbersome than
creating the links in &lt;code&gt;~&lt;/code&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GPL, CDDL and derivative works</title>
      <link>https://err.no/personal/blog/tech/debian/2005-11-12-12-43_gpl_cddl_derivative_work/</link>
      <pubDate>Sat, 12 Nov 2005 12:43:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-11-12-12-43_gpl_cddl_derivative_work/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://ianmurdock.com/?p=278&#34;&gt;Ian Murdock&lt;/a&gt; writes a bit about
OpenSolaris and the Nexenta people who are creating a GNU+Solaris based
OS.  He writes a bit about the fact that the Debian community hasn&amp;rsquo;t
exactly embraced their efforts, but have rather been rude to them.  A
small thing caught my eye though:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It seems to me the argument that linking a GPL application to a CDDL
library and asserting that that somehow makes the library a
derivative work of the application is, to say the least, a
stretch—not to mention the fact that we’re talking about libc here, a
library with a highly standard interface that’s been implemented any
number of times and, heck, that’s even older than the GPL itself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&amp;rsquo;s not so much that you make the library a derivative work of the
application as that you are making the application (that is, the binary
&lt;code&gt;/usr/bin/dpkg&lt;/code&gt; or whatever you are linking) a derivative of both the
dpkg source code as well as the libc binary) and this is problematic
when the libc in question is under the CDDL and dpkg is under the GPL.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Nokia 770, initial experiences.  The software version is 1.2005.42-9</title>
      <link>https://err.no/personal/blog/tech/2005-11-12-01-02_nokia_770_inital_experiences/</link>
      <pubDate>Sat, 12 Nov 2005 01:02:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-11-12-01-02_nokia_770_inital_experiences/</guid>
      <description>&lt;p&gt;which is what was shipped with it, and I think there might be a newer
firmware out there which fixes some of the issues.&lt;/p&gt;
&lt;p&gt;I just got my Nokia 770 and I must say it&amp;rsquo;s a nice device.  Some
initial experiences are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;No pen calibration on bootup.  Nice and cool.  All other handheld
devices have that, but the 770 seems to work just fine without it.
Kudos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It&amp;rsquo;s not a PDA.  No PIM thingy built-in, the device asks for its own
name, but not the user&amp;rsquo;s.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It doesn&amp;rsquo;t show that it&amp;rsquo;s running Linux.  I find this quite cool, as
it shows that you can produce devices which run Linux and feel like
they&amp;rsquo;re targetted at non-geeks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The device feels sluggish and lacks feedback when doing stuff,
whether it be closing an application, launching an application and
so on.  This makes it sometimes hard to know whether it has
caught your action or not.  Also, sometimes menus pop up for half a
second, then goes away.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The 770 has support for multiple applications at the same time.
Works well enough, I guess.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I want something to protect the screen, or I know it will develop
scratches from the pencil over time.  I guess I can get something
from a shop in not too long.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When putting the lid on, it&amp;rsquo;s quite neat that it turns off the
screen the moment the lid closes.  I&amp;rsquo;ll have to investigate how they
do this.  &lt;a href=&#34;http://www.figuiere.net/hub/blog/&#34;&gt;Hub&lt;/a&gt; thought it might
be a magnet.  Getting an X-Ray of the whole device would probably
show.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The feed reader needs work, I want to mark stuff as &amp;ldquo;read&amp;rdquo;
explicitly and not just have a rolling list of news where I need to
know where I was.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reduced-size MMC cards appear to be cheap.  Around 30€ for a 512MB
card which should be enough for a fair amount of music.  I need to
find an Ogg Vorbis player as well.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in all, mostly happy, but there are still a bunch of rough edges
which should be smoothed away in a few more revisions.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll see if I can get a development environment up and running on it,
as well as getting a newer firmware onto the device (if I can find it;
I wonder if the developer rootfs on maemo.org is newer or not..), but
all that&amp;rsquo;s for tomorrow.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ubuntu and multiple BTS-es</title>
      <link>https://err.no/personal/blog/tech/debian/2005-10-13-12-01_ubuntu_multiple_btses/</link>
      <pubDate>Thu, 13 Oct 2005 12:01:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-10-13-12-01_ubuntu_multiple_btses/</guid>
      <description>&lt;p&gt;Joey Hess &lt;a href=&#34;http://kitenet.net/~joey/blog/entry/a_bad_taste_in_the_mouth_detailed_ubuntu_patch_review-2005-10-13-03-57.html&#34;&gt;checks out the modifications to his
packages&lt;/a&gt;
in Ubuntu compared to Debian.  I&amp;rsquo;m not going to go into the &amp;ldquo;does Ubuntu
push patches aggressively enough back to Debian&amp;rdquo; debate, but he asks
about what &lt;a href=&#34;https://launchpad.net/malone&#34;&gt;Malone&lt;/a&gt;  is and complaining
that he can&amp;rsquo;t find the relevant bug in &lt;a href=&#34;http://bugzilla.ubuntu.com/&#34;&gt;Ubuntu&amp;rsquo;s
bugzilla&lt;/a&gt;.  Well, for historical and
hopefully soon-to-go-away reasons, Ubuntu has two BTS-es.  Bugzilla is
used for bugs and packages in &lt;code&gt;main&lt;/code&gt;, while Malone is being used for
packages in universe.  Since &lt;code&gt;rbscrobbler&lt;/code&gt; is in Universe, use Malone.
So, &lt;a href=&#34;https://launchpad.net/distros/ubuntu/+sources/rbscrobbler/+bug/2925&#34;&gt;Malone #2925&lt;/a&gt;
is the bug:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When you hit enter in the password entry field, it should act as if
the Ok button were clicked, instead of activating the Ok button.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; Fix broken markup.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hwinfo in Debian/Ubuntu too</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2005-10-12-14-00_hwinfo_here_too/</link>
      <pubDate>Wed, 12 Oct 2005 14:00:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2005-10-12-14-00_hwinfo_here_too/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://linux.blogweb.de/archives/118-What-the-hell.....html&#34;&gt;Stephan Hermann&lt;/a&gt;
complains about the missing hwinfo in Ubuntu.  Well, it&amp;rsquo;s not missing,
it&amp;rsquo;s just a few versions behind:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Package: hwinfo
[...]
Version: 8.38-3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also, the &lt;code&gt;-c&lt;/code&gt; parameter to wget is useful.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Gentoo in minefield</title>
      <link>https://err.no/personal/blog/tech/2005-09-28-09-00_gentoo_in_minefield/</link>
      <pubDate>Wed, 28 Sep 2005 09:00:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-09-28-09-00_gentoo_in_minefield/</guid>
      <description>&lt;p&gt;(ok, this isn&amp;rsquo;t really tech related, but it&amp;rsquo;s about penguins, so.)  &lt;a href=&#34;http://www.cnn.com/2005/WORLD/americas/09/27/falklands.penguins.reut/index.html&#34;&gt;CNN
reports&lt;/a&gt;
that&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The gentoos come up on Kidney Cove and can rest there because it is
in a minefield,&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I knew it all along.  Gentoos like to rest in mine fields.  Insane
penguins.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>I&#39;m an .ogg</title>
      <link>https://err.no/personal/blog/tech/memes/2005-09-27-12-10_i_am_an_ogg/</link>
      <pubDate>Tue, 27 Sep 2005 12:10:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/memes/2005-09-27-12-10_i_am_an_ogg/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.bbspot.com/News/2004/10/extension_quiz.php&#34;&gt;&lt;img
src=&#34;http://www.bbspot.com/Images/News_Features/2004/10/file_extensions/ogg.jpg&#34; width=&#34;300&#34; height=&#34;90&#34;
border=&#34;0&#34; alt=&#34;You are .ogg Even though many people consider you cool and happening, a lot still find that you&#39;re a bit too weird to hang out with.&#34;&gt;&lt;br&gt;Which File Extension are You?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, I&amp;rsquo;m a container format.  How should that be interpreted?&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Keyboards, enter and return</title>
      <link>https://err.no/personal/blog/tech/2005-09-23-11-02_keyboards_enter_vs_return/</link>
      <pubDate>Fri, 23 Sep 2005 11:02:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-09-23-11-02_keyboards_enter_vs_return/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.gwolf.org//index.php?gadget=blog&amp;amp;action=single_view&amp;amp;id=106&#34;&gt;Gunnar
wonders&lt;/a&gt;
what the strangely-marked ⊼ on apple keyboards is.  It&amp;rsquo;s the enter key,
not to be confused with the return key.  (On most systems, those are
used the wrong way around with (carriage) return key actually completing
the dialog and enter adding a line feed in a multi-line input field.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Document storage systems</title>
      <link>https://err.no/personal/blog/tech/2005-09-15-02-03_document_storage_systems/</link>
      <pubDate>Thu, 15 Sep 2005 02:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-09-15-02-03_document_storage_systems/</guid>
      <description>&lt;p&gt;I got my scanner working today by using the experimental genesys backend
for &lt;a href=&#34;http://www.sane-project.org/&#34;&gt;SANE&lt;/a&gt;.  Now I just need a good system
for storing stuff I scan together with some metadata so I can find it
again later.&lt;/p&gt;
&lt;p&gt;Web-based would be good, but not PHP and not MySQL (though I could fix
the latter of those if the system as such is good).  I&amp;rsquo;ve skimmed
through what&amp;rsquo;s on freshmeat, but didn&amp;rsquo;t find anything which seemed to
work well enough, so I guess I might end up writing my own..&lt;/p&gt;
&lt;p&gt;If anybody has any suggestions, please &lt;a href=&#34;mailto:tfheen@err.no&#34;&gt;drop me a
mail&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Some observations made while configuring my home network</title>
      <link>https://err.no/personal/blog/tech/2005-09-15-01-53_notes_when_setting_up_networks/</link>
      <pubDate>Thu, 15 Sep 2005 01:53:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-09-15-01-53_notes_when_setting_up_networks/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;10.0.0.0/24 is something very different from 10.0.0.0/8 and it appears
Linux doesn&amp;rsquo;t really like to masquerade itself, as it then sends &lt;code&gt;RST&lt;/code&gt;
to the originating host.  Of course, ssh doesn&amp;rsquo;t care about getting an
&lt;code&gt;RST&lt;/code&gt; and just hangs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OpenWRT is quite neat, and my wlan is now separated from the wired
network, which means we can run services such as cups on the wired
network without having to require authentication.  It would be cool to
play around with VLAN tagging, but I think that&amp;rsquo;s for another day.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I need to investigate how to get the internal DNS working properly; I
kinda want to have sensible reverse-DNS for 10.x.x.x addresses.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The whole infrastructure which goes on top of the physical and first
layer of the network is still missing (Kerberos, LDAP, cups, openvpn,
nocatauth or similar).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Watercooling</title>
      <link>https://err.no/personal/blog/tech/2005-09-05-11-59_cooling_liquid/</link>
      <pubDate>Mon, 05 Sep 2005 11:59:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-09-05-11-59_cooling_liquid/</guid>
      <description>&lt;p&gt;Do not ever get cooling liquid into your PCI and AGP slots.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://err.no/images/2005-09-05_cooling-liquid.png&#34; alt=&#34;Burnt PCI slot&#34;&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>I hate cookies</title>
      <link>https://err.no/personal/blog/tech/2005-09-05-09-05_cookies/</link>
      <pubDate>Mon, 05 Sep 2005 09:05:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-09-05-09-05_cookies/</guid>
      <description>&lt;p&gt;I &lt;em&gt;hate&lt;/em&gt; &lt;a href=&#34;http://www.grep.be/blog&#34;&gt;those&lt;/a&gt; &lt;a href=&#34;http://www.opensolaris.org/&#34;&gt;pages&lt;/a&gt;
&lt;a href=&#34;http://www.livejournal.com/&#34;&gt;which&lt;/a&gt;
&lt;a href=&#34;http://quizfarm.com/test.php?q_id=10907&#34;&gt;try&lt;/a&gt;
&lt;a href=&#34;http://www.carteblanche.co.za/&#34;&gt;to&lt;/a&gt; &lt;a href=&#34;http://www.amd.com/us-en/&#34;&gt;set&lt;/a&gt; &lt;a href=&#34;http://trafikanten.no/&#34;&gt;a&lt;/a&gt; &lt;a href=&#34;http://www.hiof.no/&#34;&gt;cookie&lt;/a&gt;
&lt;a href=&#34;https://www.blodbanken.no/&#34;&gt;just&lt;/a&gt; &lt;a href=&#34;https://www.giblod.no/www/News/news.asp&#34;&gt;because&lt;/a&gt; &lt;a href=&#34;http://www.foseid.priv.no/gustav/blog/&#34;&gt;I&lt;/a&gt; &lt;a href=&#34;http://www.apple.com/quicktime/&#34;&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;http://www.oreillynet.com/&#34;&gt;them&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fake categories in pyblosxom</title>
      <link>https://err.no/personal/blog/tech/2005-08-24-08-18_fakecat/</link>
      <pubDate>Wed, 24 Aug 2005 08:18:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-08-24-08-18_fakecat/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.tribulaciones.org/blog/computers/software/meta-categories_23-08-2005&#34;&gt;Jose Carlos Garcia
Sogo&lt;/a&gt;
wonders about how to do pyblosxom meta-categories.  Just using the
&lt;a href=&#34;http://err.no/pyblosxom/plugins/fakecat.py&#34;&gt;fakecat&lt;/a&gt; plugin I wrote
&lt;a href=&#34;http://err.no/personal/blog/tech/2004-05-11-10-02_fake_categories&#34;&gt;about a year
ago&lt;/a&gt;
should work fine, I would think.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>O&#39;hara&#39;s celtic stout</title>
      <link>https://err.no/personal/blog/beer/2005-08-20-21-00_oharas_celtic_stout/</link>
      <pubDate>Sat, 20 Aug 2005 21:00:00 +0200</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/beer/2005-08-20-21-00_oharas_celtic_stout/</guid>
      <description>&lt;p&gt;So, since Anders has continued blogging about
&lt;a href=&#34;http://www.geekhouse.no/~anders/blosxom/blosxom.cgi/2005/08/20#hos-andrew&#34;&gt;beers&lt;/a&gt;,
I figured I might try blogging about interesting beers too.&lt;/p&gt;
&lt;p&gt;I had a beer I bought in Finland, during a beer-shopping spree Magni and
I went on.  Some of the beers were ok-ish, but this is absolutely one of
the good ones.  It&amp;rsquo;s a stout, so it&amp;rsquo;s black.  The head was very small,
but it smelled good.  The dark, sweet (but not overwhelming) smell of a
dark beer.  A bit of chocolate, but not too much of that either.&lt;/p&gt;
&lt;p&gt;The first two or three tastes were when the beer was still a bit too
cold, so it lacked a bit in the body, but once it warmed up that
corrected itself.  Full and nice chocolate/coffee-taste.  The
carbonation is medium, so neither flat nor tounge-biting.&lt;/p&gt;
&lt;p&gt;Unlike some other stouts, this one doesn&amp;rsquo;t feel like it will fill up my
stomach, so it&amp;rsquo;s much more like a porter in that regard.
(Incidentially, porters and red/brown ales are my favourite kind of
beer.)&lt;/p&gt;
&lt;p&gt;All in all, a very nice beer and I hope I&amp;rsquo;ll find more of it in the
future.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Debconf coming to an end</title>
      <link>https://err.no/personal/blog/tech/debian/2005-07-17-01-53_debconf_coming_to_an_enf/</link>
      <pubDate>Sun, 17 Jul 2005 01:53:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-07-17-01-53_debconf_coming_to_an_enf/</guid>
      <description>&lt;p&gt;Slowly, DebConf5 is coming to an end.  It&amp;rsquo;s been great fun, I&amp;rsquo;ve met new
friends and old friends.  There has been interesting discussions about
more or less everything under the sun, and there has been some conflicts
where people (me included) have been singing at six o&amp;rsquo;clock in the
morning, where people have not done as they&amp;rsquo;ve been asked to, but all in
all, I think everybody has had a great time.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a bit sad and strange to see people slowly packing their stuff up,
everything from not letting their things be all over the place to people
actually leaving.  I&amp;rsquo;m looking forward to next year and hope it will be
even more fun.&lt;/p&gt;
&lt;p&gt;I wish to extend a great thanks to the organisers, with special thanks
to mooch and the people who have made the whole of DebConf5 a smooth
experience.  Rock on.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Debconf 5, so far</title>
      <link>https://err.no/personal/blog/tech/debian/2005-07-15-02-19_debconf5/</link>
      <pubDate>Fri, 15 Jul 2005 02:19:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-07-15-02-19_debconf5/</guid>
      <description>&lt;p&gt;Debconf 5 has been a good experience so far.  Mostly, at least.  Talked
with &lt;em&gt;a lot&lt;/em&gt; of people.  Many old friend, some new ones.  Productive
discussions about everything from how to handle &lt;code&gt;libpam-umask&lt;/code&gt; and its
integration with &lt;code&gt;shadow&lt;/code&gt; and possible integration with upstream pam to
more or less an reiteration of last year&amp;rsquo;s discussion on how to handle
Debian contributors who are not (package) maintainers.  Other stuff
we&amp;rsquo;ve done is building a Debian sand castle (with multiarch support),
building multiple pyramids out of empty beer glasses and random other
crazyness.&lt;/p&gt;
&lt;p&gt;Karianne had to go home to Oslo today.  She didn&amp;rsquo;t feel too well, being
tired and feeling unproductive here.  I hope she gets enough rest until
I get home and we can have some nice days before the LARP in the end of
the month.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>pkg-config 0.18 released</title>
      <link>https://err.no/personal/blog/tech/2005-06-27-22-40_pkgconfig_0_18_released/</link>
      <pubDate>Mon, 27 Jun 2005 22:40:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-06-27-22-40_pkgconfig_0_18_released/</guid>
      <description>&lt;p&gt;I just released &lt;a href=&#34;http://pkg-config.freedesktop.org/&#34;&gt;pkg-config 0.18&lt;/a&gt; which fixes some
annoying bugs in earlier versions.  One is the support for
&lt;code&gt;PKG_CONFIG_LIBDIR&lt;/code&gt; which was erronously removed.  Another change is
the removal of some memory leaks.  Those are just small bugs which are
fixed though.  There are a few real changes in there as well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pkg.m4 now has a &lt;code&gt;PKG_CHECK_EXISTS&lt;/code&gt; macro to just check whether
dependencies are fulfilled or not.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PKG_CHECK_MODULES&lt;/code&gt; no longer caches.  This fixes lots of problems
people stumbled into and I&amp;rsquo;m not sure why caching was added in the
first place.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The last and biggest change is the handling of private libraries.
Private libraries are any libraries your library or application uses,
but which are not exposed in the API.  They are needed for static
linking, but otherwise should just be taken care of by inter-library
dependencies.  Examples of private dependencies are &lt;a href=&#34;http://www.cairographics.org/&#34;&gt;Cairo&lt;/a&gt;&amp;rsquo;s
use of &lt;code&gt;libpng&lt;/code&gt; and a library needing &lt;code&gt;libm&lt;/code&gt;.  An example of a public
dependency is GTK+ exposing the GLib api.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How to break lines with the listings package in LaTeX</title>
      <link>https://err.no/personal/blog/tech/2005-06-07-16-35_latex_listings_break_lines/</link>
      <pubDate>Tue, 07 Jun 2005 16:35:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-06-07-16-35_latex_listings_break_lines/</guid>
      <description>&lt;p&gt;LaTeX is a really nice typesetting language and it has a nice tool
called &lt;code&gt;listings&lt;/code&gt; which handles program listings for you.  By default,
listings doesn&amp;rsquo;t break lines.  Why it doesn&amp;rsquo;t do that is beyond me, but
I&amp;rsquo;m sure the author has his reasons.  It does however have support for
breaking lines quite easily.  The trick is using something along the
lines of:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;\lstset{
basicstyle=\small,
showstringspaces=false,
language={},
breaklines=true,
breakatwhitespace=true,
prebreak={\mbox{\hfill$\hookleftarrow$}}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;which renders into&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://err.no/images/screenshots/2005-06-07-listings-pagebreak.png&#34; alt=&#34;A line of code with a break symbol at the end&#34;&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The sky is falling</title>
      <link>https://err.no/personal/blog/tech/2005-06-06-20-32_the_sky_is_falling/</link>
      <pubDate>Mon, 06 Jun 2005 20:32:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-06-06-20-32_the_sky_is_falling/</guid>
      <description>&lt;p&gt;Ok, the sky is definitively falling.  Or Hell freezing over (which it
definitively feels like, walking outside today).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://ftp.debian.org/dists/stable/Release&#34;&gt;Sarge is released&lt;/a&gt; (Read
the Description line)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.apple.com&#34;&gt;Apple&lt;/a&gt; is moving away from PowerPC chips
and &lt;a href=&#34;http://www.apple.com/pr/library/2005/jun/06intel.html&#34;&gt;switching to Intel&lt;/a&gt; instead.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Dr. Biella</title>
      <link>https://err.no/personal/blog/tech/debian/2005-05-26-01-37_dr_biella/</link>
      <pubDate>Thu, 26 May 2005 01:37:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-05-26-01-37_dr_biella/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;21:09 -!- biella is now known as dr_biella&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Congratulations!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Evolution-Backend-TDB 0.2 released.</title>
      <link>https://err.no/personal/blog/tech/2005-05-20-13-12_evolution-backend-tdb_0.2_released/</link>
      <pubDate>Fri, 20 May 2005 13:12:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-05-20-13-12_evolution-backend-tdb_0.2_released/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve finally gotten around to releasing version 0.2 of the tdb backend
for evolution-data-server.  The main changes are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No longer needs the evolution tree to build, it just needs the
library packages&lt;/li&gt;
&lt;li&gt;Some leak fixes, thanks to Ross Burton&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Get it from
&lt;a href=&#34;http://err.no/download/e-d-s/evolution-backend-tdb-0.2.tar.gz&#34;&gt;http://err.no/download/e-d-s/evolution-backend-tdb-0.2.tar.gz&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>LinuxJewellery gone?</title>
      <link>https://err.no/personal/blog/tech/debian/2005-05-18-22-06_linux_jewellery_store_gone/</link>
      <pubDate>Wed, 18 May 2005 22:06:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-05-18-22-06_linux_jewellery_store_gone/</guid>
      <description>&lt;p&gt;A couple of years ago, I stumbled across
&lt;a href=&#34;http://www.linuxjewellery.com&#34;&gt;linuxjewellery&lt;/a&gt;, a jewellery store
selling small brass BSD daemon statues, Apache feathers and various
forms of Debian bracelets, earrings and so on.  Apparently, it&amp;rsquo;s either
misconfigured or has been taken down now, since the only thing I can see
is an empty directory listing:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://err.no/images/2005-05-18-linux_jewellery_store_gone_screenshot.png&#34; alt=&#34;Empty directory
listing&#34;&gt;&lt;/p&gt;
&lt;p&gt;I hope this is just a temporary thing and they&amp;rsquo;ll come back, since even
though I never bought something from them, my Debian swirl necklace is
inspired from them.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>New pymarkdown plugin released</title>
      <link>https://err.no/personal/blog/tech/2005-05-12-09-57_new_pymarkdown/</link>
      <pubDate>Thu, 12 May 2005 09:57:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-05-12-09-57_new_pymarkdown/</guid>
      <description>&lt;p&gt;Inspired (or provoked or whatever) by &lt;a href=&#34;http://kitenet.net/~joey/blog/entry/greylisting_markdown_weblogs-2005-05-12-04-51.html&#34;&gt;Joey Hess&amp;rsquo;s blog entry about
pymarkdown in pyblosxom&lt;/a&gt;.
I decided to fix it up a bit (I also had an outstanding request for
actually putting some usage instruction in there from February or so).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Now actually has a license.  (GPL)&lt;/li&gt;
&lt;li&gt;Includes a short summary on how to get it working with pyblosxom (and
it should work more or less out of the box.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not many big changes, but it will make it possible to use by more people
than just me.&lt;/p&gt;
&lt;p&gt;Get it from &lt;a href=&#34;http://err.no/pymarkdown&#34;&gt;http://err.no/pymarkdown&lt;/a&gt; or my
&lt;a href=&#34;http://arch.err.no/index.cgi/tfheen@err.no--2005/pymarkdown&#34;&gt;arch repository (tfheen@err.no&amp;ndash;2005/pymarkdown&amp;ndash;devo&amp;ndash;0)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; Blah, I suck.  I forgot to actually update the checked-out
version.  Fixed now.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Warbussing (or something like that)</title>
      <link>https://err.no/personal/blog/tech/2005-05-09-15-23_warbussing/</link>
      <pubDate>Mon, 09 May 2005 15:23:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-05-09-15-23_warbussing/</guid>
      <description>&lt;p&gt;Since I don&amp;rsquo;t have a decent media player at the moment, I&amp;rsquo;m using my
laptop for listening to music.  I&amp;rsquo;m going to a talk by Cory Doctorow
tonight, in Oslo.  That means 45 minutes on a plane with a bit less than
an hour on a bus in each end.  Being bored, I&amp;rsquo;ve been running &lt;code&gt;iwlist scan&lt;/code&gt; periodically.  Some fun results I&amp;rsquo;ve had:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ESSID: &amp;ldquo;privat, hold deg unna&amp;rdquo; (private, keep out)&lt;/li&gt;
&lt;li&gt;ESSID: &amp;ldquo;Johnny&amp;rdquo;.  Who guesses where in Oslo I saw this?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A little less than half the networks seems to be running unencrypted.
The biggest number of APs I&amp;rsquo;ve seen at once was 15.  Once I got within
the city proper, I don&amp;rsquo;t think I&amp;rsquo;ve seen less than four or five at any
time.&lt;/p&gt;
&lt;p&gt;I hope the number of unencrypted networks keeps high.  It would be
awesomely cool if we could actually get good, working roaming between
the different networks so you could sit on the bus and actually use the
networks, not just see them.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; Make that 19, not 15.  No, 20. It seems &lt;code&gt;iwlist scan&lt;/code&gt; runs
into a bit of trouble then, truncating the output so it just displays
the MAC address of the AP.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The power is in the name</title>
      <link>https://err.no/personal/blog/politics/2005-05-03-09-10_power_is_in_the_name/</link>
      <pubDate>Tue, 03 May 2005 09:10:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/politics/2005-05-03-09-10_power_is_in_the_name/</guid>
      <description>&lt;p&gt;When travelling back home yesterday, I was bored on the final leg from
Amsterdam to Trondheim so I decided to read the KLM in-flight magazine
(whatever it&amp;rsquo;s called).  This month&amp;rsquo;s issue was about &amp;ldquo;Online&amp;rdquo;,
basically the Internet.  A fairly good issue with a decent amount of
mostly-correct historical material as well as interesting outlooks on
what&amp;rsquo;s to come.&lt;/p&gt;
&lt;p&gt;In the good tradition of such articles, a wordlist was included.  Among
the words was the word &amp;ldquo;bitleg&amp;rdquo; used to describe what would usually be
described as software piracy.  The latter word gives connotations to
murder and robbery.  Bitlegging doesn&amp;rsquo;t have nearly as negative
connotations and describe the issue at hand a lot more calmly and
better.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>TDB backend for evolution-data-server</title>
      <link>https://err.no/personal/blog/tech/2005-04-23-22-22_eds_tdb_backend/</link>
      <pubDate>Sat, 23 Apr 2005 22:22:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-04-23-22-22_eds_tdb_backend/</guid>
      <description>&lt;p&gt;The first, initial version of the libtdb backend for
evolution-data-server is ready.  It seems to work fine so far (for me),
but is probably buggy.  Feedback appreciated.&lt;/p&gt;
&lt;p&gt;To use it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;download the
&lt;a href=&#34;http://err.no/download/e-d-s/evolution-data-server-backend-tdb_0.1.tar.gz&#34;&gt;tarball&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;unpack into &lt;code&gt;evolution-data-server/addressbook/backends&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;adjust &lt;code&gt;evolution-data-server/addressbook/Makefile.am&lt;/code&gt; and
&lt;code&gt;configure.in&lt;/code&gt; appropriately.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;rerun auto*&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;build evolution-data-server.  The backend should now be in
evolution-data-server/addressbook/backends/tdb/.libs/libebookbackendtdb.so
and can either be installed with &lt;code&gt;make install&lt;/code&gt; or just copied to
&lt;code&gt;/usr/lib/evolution-data-server-1.2/extensions/&lt;/code&gt; (adjust as appropriate)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To actually use the backend, you have to add a new type to the e-d-s
backend.  This is sillily complex, but I haven&amp;rsquo;t gotten around to
actually fixing evolution yet.  This is done by running (relative to
your evolution-data-server build tree)
&lt;code&gt;./libedataserver/test-source-list --key=/apps/evolution/addressbook/sources --add-group=&amp;quot;TDB&amp;quot; --set-base-uri=&amp;quot;tdb:///home/tfheen/.evolution/addressbook/local&amp;quot;. Adjust the &lt;/code&gt;/home/tfheen` part if you&amp;rsquo;re not me.  You should then be
able to add a new address book to the TDB category in Evolution.&lt;/p&gt;
&lt;p&gt;Again, feedback is appreciated; this is very much a product of release
early, release often so the installation instructions aren&amp;rsquo;t the best.
Yet, at least.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Evolution-data-server</title>
      <link>https://err.no/personal/blog/tech/2005-04-22-18-27_evolution_data_server/</link>
      <pubDate>Fri, 22 Apr 2005 18:27:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-04-22-18-27_evolution_data_server/</guid>
      <description>&lt;p&gt;Evolution-data-server (or e-d-s for short) seems to be a fairly nice
piece of software.  It&amp;rsquo;s being more and more integrated with the gnome
desktop and other non-gnome applications such as gaim are using it.  I
prefer to be able to use my tools from the command line and I want to
hook e-d-s into gnus so I can actually look up email addresses and
maintain that inside of gnus.&lt;/p&gt;
&lt;p&gt;I started writing some command line tools tonight and discovered that
the API documentation isn&amp;rsquo;t really up to speed.  It lacks a lot of
documentation.  The header files are readable enough that I manage to
navigate with just those and a fair amount of trial and error.  So far,
the command line tool just spits out all the people from all the address
books with no way to search or do anything useful with the information,
but it&amp;rsquo;s a good start.  I just hope integration with bbdb and gnus will
go smooth.&lt;/p&gt;
&lt;p&gt;I was in tridge&amp;rsquo;s talk on ldb this morning.  ldb is a lightweight
database with an LDIF/LDAP frontend which can use tdb, &amp;ldquo;trivial
database&amp;rdquo; as its backend.  E-d-s uses Sleepycat DB as the backend, and
I have some performance problems there, in addition to the fact that
I never liked &lt;code&gt;libdb&lt;/code&gt;.  I therefore started writing a tdb backend for
e-d-s.  It&amp;rsquo;s a lot of cut-and-paste from the file backend, but that just
means I save a lot of time.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Moving to UTF-8</title>
      <link>https://err.no/personal/blog/tech/2005-04-22-18-16_converting_to_utf8/</link>
      <pubDate>Fri, 22 Apr 2005 18:16:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-04-22-18-16_converting_to_utf8/</guid>
      <description>&lt;p&gt;I finally got around to changing my system to a UTF-8 system the other
day.  It was surprisingly easy, but with a few caveats to not annoy
people on Latin-1 IRC channels and such.&lt;/p&gt;
&lt;p&gt;Pterm supports UTF8 just fine, but is evidently not smart enough to
actually pick a unicode font, so I had to tell it explicitly to use one.&lt;/p&gt;
&lt;p&gt;Irssi in stable, testing, unstable, warty and hoary are all too old to
have proper recode support, so I packaged irssi 0.8.10rc5 and uploaded
that to breezy.  This has nice recode support so you can say &amp;ldquo;please use
latin1 while talking to this person&amp;rdquo;.  I&amp;rsquo;ll have to fix that on vawad
too when I get home.&lt;/p&gt;
&lt;p&gt;Apart from that, it meant adjusting a set of dotfiles to not set &lt;code&gt;LANG&lt;/code&gt; if
it is already set, changing the default in the gdm login screen and fix
up the ssh config on vawad to actually allow passthrough of &lt;code&gt;LANG&lt;/code&gt; and
&lt;code&gt;LC_*&lt;/code&gt; environment variables.&lt;/p&gt;
&lt;p&gt;I need to adjust my emacs setup too, but that&amp;rsquo;s not too urgent and it is
fairly simple to do.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Breaking stuff</title>
      <link>https://err.no/personal/blog/tech/2005-04-13-11-27_breaking_stuff/</link>
      <pubDate>Wed, 13 Apr 2005 11:27:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-04-13-11-27_breaking_stuff/</guid>
      <description>&lt;p&gt;Yesterday was all about breaking and not getting stuff to work properly.
First, I broke &lt;a href=&#34;http://pkg-config.freedesktop.org&#34;&gt;pkg-config&lt;/a&gt; with the
0.17 release.  The &lt;code&gt;pkg.m4&lt;/code&gt; included there broke because I&amp;rsquo;m a twit and
misunderstood what James Henstridge said and then failed to test the
changes properly.  0.17.1 was released this morning to fix this issue as
well as the backwards test for whether inter-library dependencies are
supported or not.&lt;/p&gt;
&lt;p&gt;Later in the day, I fumbled around with getting LaTeX to frame a part of
my thesis with a shaded background.  After a lot off googling around, I
found framed.sty which does what I want without any fuss.  Yay.  Now
I&amp;rsquo;ll just have to actually write the content.&lt;/p&gt;
&lt;p&gt;Right now, I&amp;rsquo;m fixing up stuff again.  Jeff Bailey is fixing some bugs
in &lt;code&gt;mkinitrd&lt;/code&gt; for us at work, which is kinda cool to watch through a
&lt;a href=&#34;http://muse.19inch.net/~daf/misc/multiuser-screen.html&#34;&gt;shared screen
session&lt;/a&gt;.  IRC +
shared screen is fun.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ampersands and Planet</title>
      <link>https://err.no/personal/blog/tech/debian/2005-03-27-22-27_ampersands_and_planet/</link>
      <pubDate>Sun, 27 Mar 2005 22:27:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-03-27-22-27_ampersands_and_planet/</guid>
      <description>&lt;p&gt;Basically, the problem with Planet having feeds &amp;ldquo;break&amp;rdquo; it is that
Planet uses an ultra-liberal feed parser which ignores errors (and
thereby breaks the XML spec).  Of course, this means Planet&amp;rsquo;s output
might not be valid either.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve had this discussion with Keybuk a few times, he seems to think
having planet work this way is a feature and not a bug.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>pkgconfig 0.16 released</title>
      <link>https://err.no/personal/blog/tech/2005-03-27-09-54_pkgconfig_0_16_released/</link>
      <pubDate>Sun, 27 Mar 2005 09:54:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-03-27-09-54_pkgconfig_0_16_released/</guid>
      <description>&lt;p&gt;The first &lt;a href=&#34;http://pkgconfig.freedesktop.org/releases/pkgconfig-0.16.0.tar.gz&#34;&gt;pkgconfig
release&lt;/a&gt;
in about 1.5 years is now out.  A bunch of bugfixes, some feature
enhancements.  Please test it and give me feedback.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Download numbers for ftp.se.debian.org</title>
      <link>https://err.no/personal/blog/tech/debian/2005-03-04-18-13_ftp.se_download_numbers/</link>
      <pubDate>Fri, 04 Mar 2005 18:13:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-03-04-18-13_ftp.se_download_numbers/</guid>
      <description>&lt;p&gt;Inspired by Md&amp;rsquo;s efforts to provide numbers showing how many packages
have been downloaded off ftp.it.debian.org, I decided to try to get the
same numbers for another mirror.  The admin of ftp.se volunteered his
logs, and I ran a small, ugly shell snippet[1] on the logs to extract the
number of downloaded packages:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Architecture&lt;/th&gt;
          &lt;th&gt;Downloads&lt;/th&gt;
          &lt;th&gt;%&lt;/th&gt;
          &lt;th&gt;% (with all excluded)&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;i386&lt;/td&gt;
          &lt;td&gt;1204913&lt;/td&gt;
          &lt;td&gt;74.29&lt;/td&gt;
          &lt;td&gt;96.46&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;all&lt;/td&gt;
          &lt;td&gt;372858&lt;/td&gt;
          &lt;td&gt;22.99&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;powerpc&lt;/td&gt;
          &lt;td&gt;23226&lt;/td&gt;
          &lt;td&gt;1.43&lt;/td&gt;
          &lt;td&gt;1.86&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ia64&lt;/td&gt;
          &lt;td&gt;8984&lt;/td&gt;
          &lt;td&gt;0.55&lt;/td&gt;
          &lt;td&gt;0.72&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;sparc&lt;/td&gt;
          &lt;td&gt;4860&lt;/td&gt;
          &lt;td&gt;0.30&lt;/td&gt;
          &lt;td&gt;0.39&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;hppa&lt;/td&gt;
          &lt;td&gt;2326&lt;/td&gt;
          &lt;td&gt;0.14&lt;/td&gt;
          &lt;td&gt;0.19&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;alpha&lt;/td&gt;
          &lt;td&gt;2094&lt;/td&gt;
          &lt;td&gt;0.13&lt;/td&gt;
          &lt;td&gt;0.17&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;amd64&lt;/td&gt;
          &lt;td&gt;1822&lt;/td&gt;
          &lt;td&gt;0.11&lt;/td&gt;
          &lt;td&gt;0.15&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;mipsel&lt;/td&gt;
          &lt;td&gt;407&lt;/td&gt;
          &lt;td&gt;0.03&lt;/td&gt;
          &lt;td&gt;0.03&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;mips&lt;/td&gt;
          &lt;td&gt;248&lt;/td&gt;
          &lt;td&gt;0.02&lt;/td&gt;
          &lt;td&gt;0.02&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;arm&lt;/td&gt;
          &lt;td&gt;219&lt;/td&gt;
          &lt;td&gt;0.01&lt;/td&gt;
          &lt;td&gt;0.02&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;s390&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;0.00&lt;/td&gt;
          &lt;td&gt;0.00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;m68k&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;0.00&lt;/td&gt;
          &lt;td&gt;0.00&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The numbers include some amd64 downloads, but this is such a small
number that it won&amp;rsquo;t have skewed the numbers significantly so they are
included for completeness.&lt;/p&gt;
&lt;p&gt;[1]: &lt;code&gt;bzcat */httpd_2005-02-*.bz2| perl -ne &#39;/_([[:alnum:]]+)\.deb/ and do {$arches{$1}++}; END {foreach $key (keys %arches) { print $arches{$key}, &amp;quot; $key\n&amp;quot;}}&#39; | sort -rn&lt;/code&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Don&#39;t reinvent version control</title>
      <link>https://err.no/personal/blog/tech/debian/2005-03-04-17-14_dont_reinvent_version_control/</link>
      <pubDate>Fri, 04 Mar 2005 17:14:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2005-03-04-17-14_dont_reinvent_version_control/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://julien.danjou.info/blog/index.php/2005/03/03/121-about-my-shell-config&#34;&gt;Julien&lt;/a&gt;,
please don&amp;rsquo;t reinvent the wheel.  Just use a version control system.
Whether you prefer Arch, SVN, CVS or any other is nothing I&amp;rsquo;m going to
tell you to, but you&amp;rsquo;ll save yourself a lot of work by just using a
version control system.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Multiarch working</title>
      <link>https://err.no/personal/blog/tech/2005-02-02-16-50_multiarch_working/</link>
      <pubDate>Wed, 02 Feb 2005 16:50:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-02-02-16-50_multiarch_working/</guid>
      <description>&lt;p&gt;After about a week of &lt;code&gt;gcc&lt;/code&gt; compiles, I have multiarch working now.
Mostly, at least:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(hoary-clean)root@shonap:/tmp# cat hello.c
#include &amp;lt;stdio.h&amp;gt;

int main(int argc, char **argv) {
  fprintf(stderr, &amp;quot;hello multiarched world\n&amp;quot;);
}
(hoary-clean)root@shonap:/tmp#
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A trivial &lt;code&gt;hello.c&lt;/code&gt;.  Then, we have a multiarched libc6 and libc6-dev:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(hoary-clean)root@shonap:/tmp# ls /usr/include/stdio.h
ls: /usr/include/stdio.h: No such file or directory
(hoary-clean)root@shonap:/tmp# ls /usr/include/i386-linux/stdio.h
/usr/include/i386-linux/stdio.h
(hoary-clean)root@shonap:/tmp#
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Matching libraries:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(hoary-clean)root@shonap:/tmp# ls /usr/lib/libc.so /lib/libc.so.6
ls: /usr/lib/libc.so: No such file or directory
ls: /lib/libc.so.6: No such file or directory
(hoary-clean)root@shonap:/tmp# ls -1 /usr/lib/i386-linux/libc.so /lib/i386-linux/libc.so.6
/lib/i386-linux/libc.so.6
/usr/lib/i386-linux/libc.so
(hoary-clean)root@shonap:/tmp#
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, compile, check, run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(hoary-clean)root@shonap:/tmp# gcc-3.4 hello.c -o hello
(hoary-clean)root@shonap:/tmp# file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for
GNU/Linux 2.2.0, dynamically linked (uses shared libs), not stripped
(hoary-clean)root@shonap:/tmp# ldd hello
                libc.so.6 =&amp;gt; /lib/i386-linux/libc.so.6 (0xb7eb1000)
        /lib/ld-linux.so.2 =&amp;gt; /lib/ld-linux.so.2 (0xb7fea000)
(hoary-clean)root@shonap:/tmp#
(hoary-clean)root@shonap:/tmp# ./hello
hello multiarched world
(hoary-clean)root@shonap:/tmp#
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Yay!&lt;/p&gt;
&lt;p&gt;Of course, there are minor problems left, like gcc thinking that it
installs the 64 bit libraries into &lt;code&gt;/usr/lib/i486-linux/x86_64-linux&lt;/code&gt;,
that it currently can&amp;rsquo;t compile for 64 bit due to the symlink from
&lt;code&gt;libgcc_s_64.so&lt;/code&gt; being missing and other minor stuff like that.  It
seems glibc also needs a minor adjustment (just a missing symlink from
&lt;code&gt;i486-linux&lt;/code&gt; to &lt;code&gt;i386-linux&lt;/code&gt; in &lt;code&gt;/usr/include&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;As a final test, I scp-ed the 64 bit binary I built (after having
created the &lt;code&gt;libgcc_s_64&lt;/code&gt; symlink by hand) to an AMD64, and it works
beautifully there.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Multiarch.</title>
      <link>https://err.no/personal/blog/tech/2005-01-25-20-40_multiarch/</link>
      <pubDate>Tue, 25 Jan 2005 20:40:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-01-25-20-40_multiarch/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve gotten multiarch working again today:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root@shonap:/# ls -l /lib/libc-* /lib/ld-linux.so.2
ls: /lib/libc-*: No such file or directory
lrwxrwxrwx  1 root root 22 Jan 25 18:56 /lib/ld-linux.so.2 -&amp;gt; i386-linux/ld-2.3.2.so
root@shonap:/# ls /lib/i386-linux/
ld-2.3.2.so               libm.so.6               libnss_nisplus-2.3.2.so
ld-linux.so.2             libmemusage.so          libnss_nisplus.so.2
libBrokenLocale-2.3.2.so  libnsl-2.3.2.so         libpcprofile.so
libBrokenLocale.so.1      libnsl.so.1             libpthread-0.10.so
libSegFault.so            libnss_compat-2.3.2.so  libpthread.so.0
libanl-2.3.2.so           libnss_compat.so.2      libresolv-2.3.2.so
libanl.so.1               libnss_dns-2.3.2.so     libresolv.so.2
libc-2.3.2.so             libnss_dns.so.2         librt-2.3.2.so
libc.so.6                 libnss_files-2.3.2.so   librt.so.1
libcrypt-2.3.2.so         libnss_files.so.2       libthread_db-1.0.so
libcrypt.so.1             libnss_hesiod-2.3.2.so  libthread_db.so.1
libdl-2.3.2.so            libnss_hesiod.so.2      libutil-2.3.2.so
libdl.so.2                libnss_nis-2.3.2.so     libutil.so.1
libm-2.3.2.so             libnss_nis.so.2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At least, it works for glibc on i386.  I now need to fix up gcc to look
in the right places and whip up a few sample packages.  The nicest thing
about all this is the small size:  it&amp;rsquo;s barely a patch to upstream&amp;rsquo;s
sources and apart from the splitting of packages which is needed, it&amp;rsquo;s a
tiny change to the Debian packaging.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Grabbing port numbers</title>
      <link>https://err.no/personal/blog/tech/2005-01-24-16-22_grabbing_port_numbers/</link>
      <pubDate>Mon, 24 Jan 2005 16:22:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2005-01-24-16-22_grabbing_port_numbers/</guid>
      <description>&lt;p&gt;Since SSL doesn&amp;rsquo;t support more than one virtual host per IP/port pair and I want
to run a few vhosts on my server, I am using port-based SSL-vhosting.
This worked well for a while and I was using 443, 444, 445, 446 and so
on.&lt;/p&gt;
&lt;p&gt;Then, MS comes about and decides they need to use a new port number
since they&amp;rsquo;ve tweaked CIFS a little.  What number do they choose?  445!
And what happens the first time some random hole in their implementation
is found?  The university stops incoming connections to port 445.  Not
rejects or anything nice like that, no.  They just drop the packets on
the floor.&lt;/p&gt;
&lt;p&gt;I just &lt;em&gt;love it&lt;/em&gt; when people make random changes like that without
telling.  And I am so happy about MS grabbing random port numbers.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Small fixes</title>
      <link>https://err.no/personal/blog/tech/2004-12-25-13-38_fixes/</link>
      <pubDate>Sat, 25 Dec 2004 13:38:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-12-25-13-38_fixes/</guid>
      <description>&lt;p&gt;My blog&amp;rsquo;s visual appearance has been overhauled a bit.  It looked the
same for a looong time, but I got bored of it and figured it needed some
fixups to work better.&lt;/p&gt;
&lt;p&gt;In addition, I went through a pile of old posts and fixed up Textile
markup I had left behind.  There&amp;rsquo;s probably still some left, but it
should be better now, at least.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Why unit tests are good for you (or at least for your code)</title>
      <link>https://err.no/personal/blog/tech/2004-12-23-14-52_unittests_are_good_for_you/</link>
      <pubDate>Thu, 23 Dec 2004 14:52:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-12-23-14-52_unittests_are_good_for_you/</guid>
      <description>&lt;p&gt;Old version of pymarkdown:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Ran 75 tests in 0.349s

FAILED (failures=57, errors=2)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ouch.&lt;/p&gt;
&lt;p&gt;New version of pymarkdown:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Ran 75 tests in 0.450s

OK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;New version of pymarkdown available from &lt;a href=&#34;http://err.no/pymarkdown/&#34;&gt;http://err.no/pymarkdown/&lt;/a&gt; or
&lt;a href=&#34;http://arch.err.no/&#34;&gt;my arch repository&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>More on PGP mails.</title>
      <link>https://err.no/personal/blog/tech/2004-12-19-23-05_more_on_pgp/</link>
      <pubDate>Sun, 19 Dec 2004 23:05:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-12-19-23-05_more_on_pgp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://roland.entierement.nu/index.php/archives/2004/12/17/pgp-global-directory/&#34;&gt;Roland
Mas&lt;/a&gt;
complained about that PGP.com doesn&amp;rsquo;t tell him what key he&amp;rsquo;s verifying.
Well, they do.  At least they tell me if I go to the web page listed in
the mail.  (And the fingerprint is in the mail as well.)  Still not good
that they want me to sign their signing key, but not as bad as Roland&amp;rsquo;s
post says.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PGP.com on crack with their Global Directory.</title>
      <link>https://err.no/personal/blog/tech/2004-12-17-07-04_pgp_global_directory_crack/</link>
      <pubDate>Fri, 17 Dec 2004 07:04:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-12-17-07-04_pgp_global_directory_crack/</guid>
      <description>&lt;p&gt;So, I guess more or less &amp;ldquo;everybody&amp;rdquo; has gotten a mail from pgp.com
asking them to verify it so it can be included in their Global
Directory.  (Which I guess is just a glorified, web-based keyserver
which spams you every six months.)  However, I decided to actually click
the verify link, and was very much surprised with the directions on the
page after the confirm page:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To ensure that your PGP software trusts keys verified by this directory,
you must download and trust this directory&amp;rsquo;s Verification Key.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Download the Verification Key&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;After downloading, import the Verification Key into your PGP software.
Then, sign the key with your key and mark it as Trusted. Please see
the documentation for your PGP software for specific instructions on
trusting a key.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What?  They want me to mark a random key downloaded off some random web
page as trusted &lt;em&gt;and&lt;/em&gt; sign it?  I wonder what crack they have been
smoking.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>My textbook, on MS-DOS security.</title>
      <link>https://err.no/personal/blog/tech/2004-12-11-21-02_msdos_security_textbook/</link>
      <pubDate>Sat, 11 Dec 2004 21:02:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-12-11-21-02_msdos_security_textbook/</guid>
      <description>&lt;p&gt;This semester, I&amp;rsquo;m taking a class which is called &amp;ldquo;Management of Very
Large Data Volumes&amp;rdquo;.  The textbook, for some weird, weird reason talks a
fair amount about MS-DOS.  Apart from the fact that it&amp;rsquo;s about ten years
old, so all the numbers are really wrong, the book is bearable.&lt;/p&gt;
&lt;p&gt;However, once in a while, I come across sections which I wonder if are
there just to make me cry (the textbook is in Norwegian, so any
translation errors are mine):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;MSDOS&amp;rsquo; file system is a bit too simple.  Among other things, the
security is not cared for well enough.  The directory ought to show
who has created or owns the file as well as the time the file was
created and when it was last changed.  With regards to security and
rights, a minimum requirement is the file should have an associated
password.  In fact, it ought to be one password for writing and
perhaps another password for deletion and extending the file.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;First, &amp;ldquo;a bit too simple&amp;rdquo; is an exaggeration, MS-DOS does barely have a
file system at all.  And security?  Well, it has none, so I guess saying
&amp;ldquo;not cared for well enough&amp;rdquo; is a bit of an understatement.  Then a bit
of fairly reasonable requirements, but I really wonder what the author
thought about when he wrote that last part.  Is he really serious that
all files should have three passwords associated with them?  I would so
much rather use either normal UNIX-based user/group/other permissions or
ACLs.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The Canonical Matarò conference</title>
      <link>https://err.no/personal/blog/tech/ubuntu/2004-12-11-13-51_mataro_conference/</link>
      <pubDate>Sat, 11 Dec 2004 13:51:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/ubuntu/2004-12-11-13-51_mataro_conference/</guid>
      <description>&lt;p&gt;Four months have passed since the last Canonical Conference, which
happened in Oxford.  The December conference, nicknamed &amp;ldquo;The Matarò
Sessions&amp;rdquo; was held in Matarò, just outside of Barcelona in Spain.&lt;/p&gt;
&lt;p&gt;The travel to the conference was uneventful.  Plane from Trondheim to
Amsterdam, a bit more than an hour in Amsterdam, then plane further on
to Barcelona.  I called Fabbione after I came through customs.  He
arrived at a different terminal than I, so I headed over there and we
met up.  Train to Matarò itself and then a short walk to the hotel.  We
then went out and ate some food at a nearby Chinese place.&lt;/p&gt;
&lt;p&gt;Karianne arrived in the early afternoon on Monday.  Even though we were
only separated for a day, it was nice to see her again.  Most of the day
was taken up with BOFs and we had a bunch of very productive
discussions.  I also got a fair amount of work done, fixing bugs and
uploading packages.&lt;/p&gt;
&lt;p&gt;Tuesday was not such a good day.  The BOFs were a bit less interesting
and I had a hard time concentrating on my tasks.  We went to the Chinese
place again and it was a disaster.  Or, not a disaster, but they didn&amp;rsquo;t
do a very good job.  First, they used ages and ages for getting me food.
Then they took even longer getting Karianne her food.  Then they gave my
food to somebody else (yes, you.  The sharks at the end of the table.
You know who you are).  Then Karianne got her main course.  Then she got
her starter.  I waited a fair bit more for my main course to arrive.  It
was good when I got it, and I had gotten my starter, luckily.&lt;/p&gt;
&lt;p&gt;Wednesday was a bit more productive again, getting a bunch of bugs
squashed and fun BOFs.  Actually, this was the day some serious
crack-smoking projects started, namely Quick Boot.  As part of this,
&amp;ldquo;hotplug should start all hardware-related init-scripts&amp;rdquo; came along.
(So hotplug detects you have a sound card and starts alsa-base.  It
detects you have a network interface and configures, and so on.)
Daniel Stone made the X startup a lot faster as well, eliminating a fair
bunch of loops and file system overhead.&lt;/p&gt;
&lt;p&gt;I started working on fixing some Openoffice.org bugs on Thursday.  It
has a problem where it currently links the normal &lt;code&gt;libtl645.so&lt;/code&gt; to
&lt;code&gt;libgnomevfs&lt;/code&gt;, which is of course wrong.  The patch ended up being
fairly simple, and I&amp;rsquo;m liking the build system a bit.  Scary!  One of
the nice things about Openoffice&amp;rsquo;s build system is it saves the applied
patch.  This means you can&amp;rsquo;t break it by editing a patch without
removing it, unlike dpatch (for instance).  We went to a very nice
resturant in the evening, where somebody stole Karianne&amp;rsquo;s camera.  She&amp;rsquo;s
insured and all that, but it&amp;rsquo;s a nuisance nonetheless.&lt;/p&gt;
&lt;p&gt;Karianne left on Friday, just after Amaya and a bit before helix
arrived.  I worked a bit more on Openoffice, including an upload, but it
didn&amp;rsquo;t build due to some silliness.  The problem of testing Openoffice&amp;rsquo;s
build system is fairly large, even with &lt;code&gt;ccache&lt;/code&gt; it takes a couple of
hours to build.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t do much on Saturday, got up, breakfast and hung about a little
before leaving for the train station.  It has been a good week and I&amp;rsquo;ve
gotten a lot of work done.  Seeing all the crazy canonical people have
been fun as well, with lots of interesting technical and non-technical
discussions.  I&amp;rsquo;m sorry I had to leave early, but my last two exams are
happening on Monday and Friday, and I should really start preparing for
those.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GNOME is not a window manager</title>
      <link>https://err.no/personal/blog/tech/debian/2004-11-26-09-46_gnome_is_not_a_wm/</link>
      <pubDate>Fri, 26 Nov 2004 09:46:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-11-26-09-46_gnome_is_not_a_wm/</guid>
      <description>&lt;p&gt;Wouter &lt;a href=&#34;http://www.livejournal.com/users/wouterverhelst/46098.html&#34;&gt;blogged a
bit&lt;/a&gt; about
how he has problems with using GNOME because it lacks sloopy focus.
Really, what you are complaining about is that metacity doesn&amp;rsquo;t have
sloppy focus.  Then use a different window manager.  Please just change
what you have in &lt;code&gt;/desktop/gnome/applications/window_manager/current&lt;/code&gt; to
E or whatever you prefer.  I run a perfectly usable GNOME desktop with
openbox as my WM.  Works fine, and I have sloppy focus.  I don&amp;rsquo;t like
flipping desktops with my mouse so I haven&amp;rsquo;t investigated how to do
that.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>freedesktop.org, fooishbar.org compromised</title>
      <link>https://err.no/personal/blog/tech/2004-11-16-14-28_freedesktop.org_compromised/</link>
      <pubDate>Tue, 16 Nov 2004 14:28:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-11-16-14-28_freedesktop.org_compromised/</guid>
      <description>&lt;p&gt;This is more of a heads-up for people who wonder why freedesktop.org
doesn&amp;rsquo;t answer (or why fooishbar.org, daniels&amp;rsquo; box is down).  The hosts
were compromised a short while ago and they are being worked on.  fd.o
will hopefully be back in a few days, with new and beefier hardware.
Daniel has a &lt;a href=&#34;http://www.livejournal.com/~fooishbar/&#34;&gt;blog&lt;/a&gt; on LJ where
he gives updates.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>RSS 0.91 sucks</title>
      <link>https://err.no/personal/blog/tech/2004-11-16-12-30_rss_091_sucks/</link>
      <pubDate>Tue, 16 Nov 2004 12:30:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-11-16-12-30_rss_091_sucks/</guid>
      <description>&lt;p&gt;I changed the base URL of my feed last night, which made Planet Debian
think all my posts were new.  RSS 0.91 doesn&amp;rsquo;t have a GUID field or
something similar, so it sucks.  Going to switch to RSS2 and Atom soon,
I think, to avoid something similar in the future.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Last night&#39;s IBM vs MS debate (or open source vs commercial software)</title>
      <link>https://err.no/personal/blog/tech/2004-11-10-12-28_ibm_vs_ms/</link>
      <pubDate>Wed, 10 Nov 2004 12:28:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-11-10-12-28_ibm_vs_ms/</guid>
      <description>&lt;p&gt;Last night, I was at a debate between IBM and Microsoft on the
benefits of open source software and commercial software
respectively.  I know that commerical doesn&amp;rsquo;t imply closed-source, so
what the debate was really about was open versus closed source
software.  Shame the organizers didn&amp;rsquo;t grasp the difference.&lt;/p&gt;
&lt;p&gt;It was a good debate.  Microsoft&amp;rsquo;s people were a lot better than IBM&amp;rsquo;s
people, both because they were good and also because IBM had two
salespeople and only one technical guy.  It didn&amp;rsquo;t help that the
technical guy was from Skåne in Sweden, which made him hard to
understand.&lt;/p&gt;
&lt;p&gt;The debate started with MS and IBM talking a bit about standards and
innovation.  MS complained about standardization processes taking a
long time, which means it will in many cases slow innovation.
Standards are also costly.  Patents were briefly covered, and IBM said
they were granted about 4 to 5000 patents per year.  MS stumbled on
their part of the facts, claiming that TCP/IP was invented by Tim
Berners-Lee 15 years ago.  (He was probably talking about HTTP, to his
defense.)&lt;/p&gt;
&lt;p&gt;Anders Christensen had a short talk about different licenses used at
the department of computer and information science, which was short,
fun and to the point.  IBM talked a little bit about the GPL and GNU;
it was hard to hear what the guy was saying, it was in Swedish and the
guy was a bit fluffy.  Not very easy to describe, but his words were
often high-flying and hard to grasp.&lt;/p&gt;
&lt;p&gt;MS then talked proprietary licenses and why they thought they were
good.  They tried to say &amp;ldquo;we can show you the source as well&amp;rdquo;, through
their Shared Source program.  (But we&amp;rsquo;ll only show you our deepest
secrets if you are a NSA, the IT department of the police or similar.)
Of course, they had to FUD a little with saying that you have to watch
the license if you use open source software.  This is correct, but it
applies equally well to proprietary software.  If you use third-party
software in your application, you have to understand the license, no
matter whether the license is free or not.&lt;/p&gt;
&lt;p&gt;The IBM people clearly hadn&amp;rsquo;t done their homework, as one of them said
(paraphrased): &amp;ldquo;Open source is no longer only used on open source
platforms&amp;rdquo;, while this is how it all started.  In the early days of
the GNU project, the platforms weren&amp;rsquo;t free, it&amp;rsquo;s only recently (last
ten years or so) that you have been able to run fully free operating
systems.&lt;/p&gt;
&lt;p&gt;MS were asked whether they though the profit motivation of proprietary
software {companies} could interfere with user rights.  They didn&amp;rsquo;t
think so, which amazed me a bit.  Isn&amp;rsquo;t that fairly obvious, that in
certain situations, a company may want to do something which isn&amp;rsquo;t in
the users&amp;rsquo; interest, in order to earn money?&lt;/p&gt;
&lt;p&gt;The next part was &amp;ldquo;Innovation&amp;rdquo;.  IBM was getting increasingly boring
to listen to, saying a fair amount of self-evident things and being
completely non-agressive, which was sad to see.  MS pointed out that
patents in many cases are just used for bartering between companies
rather than having a single company exploiting the invention for a
long time.  This is probably the case, but what about the small and
poor who can&amp;rsquo;t afford a license (or who doesn&amp;rsquo;t get a license, even if
they have the money)?  Patents are supposed to help innovation, but in
many cases, it helps stopping innovation just as much.  MS showed the
common misunderstanding that free software is only based on volunteer
and &amp;ldquo;random&amp;rdquo; contributions.  This might have been the case ten years
ago, but that hasn&amp;rsquo;t been true for a long time.&lt;/p&gt;
&lt;p&gt;The next big chunk was security.  MS said they were a high-profile
target with 94% market share.  Their biggest problems are worms and
email-based viruses rather than script kiddies, which are a bigger
problem for the Linux and UNIX world.  It seems also MS is taking
security more seriously; last year they took all their developers
through both &amp;ldquo;how to code more securely&amp;rdquo; training.  In addition, they
spent six months going through all their code with an eye on
security.  Why they didn&amp;rsquo;t catch the &amp;ldquo;what does scripting do in a mail
reader&amp;rdquo; problem, I have no idea.&lt;/p&gt;
&lt;p&gt;I got some eye-opening quotes from them as well.  &amp;ldquo;We do not tell
about security problems before we have a fix ready [&amp;hellip;] anything else
would be irresponsible.&amp;rdquo;  This is fine, assuming that&amp;rsquo;s MS are the
only ones who have found the bug and that there&amp;rsquo;s no way to protect
oneself apart from patching.  That&amp;rsquo;s two fairly big assumes.&lt;/p&gt;
&lt;p&gt;They also claimed responsibility for finding bugs before anybody else
does &amp;ndash; &amp;ldquo;We have the responsibility for finding bugs on our platform
in time&amp;rdquo;. (Before they are found by somebody else and exploited.)&lt;/p&gt;
&lt;p&gt;MS repeated their claim that they are often hit because they are big.
To a certain degree, that&amp;rsquo;s probably correct.  On the other hand;
where are all the apache, mysql and postgresql worms we should be
seeing, then?  They also claimed that they fix security-related bugs
faster than the open source world.  I don&amp;rsquo;t think that&amp;rsquo;s correct, but
I didn&amp;rsquo;t have the statistics there, so I couldn&amp;rsquo;t whack them with
anything.&lt;/p&gt;
&lt;p&gt;Again, they talked a bit of technology development (which is really
just another way of saying more innovation).  MS claimed to innovate
for the better of their users.  Later, they got a question about their
embrace-and-extend attitude around Kerberos 5, where they gave the
worst answer I heard the whole evening.  They claimed that
certification was important and that the other Kerberos 5
implementations weren&amp;rsquo;t certified with the MS server.  Well, Kerberos
5 is a standard, and it was extended a bit (in an incompatible
fashion) by MS with their Active Directory.  (Which is really just a
Kerberos 5 and LDAP server with a fancy GUI.)&lt;/p&gt;
&lt;p&gt;One more quote: &amp;ldquo;All our [MS&amp;rsquo;] file formates were originally designed
to talk to printers [&amp;hellip;] We are doing the world a favor by not
opening them up.&amp;rdquo;  Funny, yes.  However, many people need to read
those formats with other programs than they were originally created
with.&lt;/p&gt;
&lt;p&gt;MS claimed to give full hardware-freedom.  I was tempted to add: &amp;ldquo;As
long as you run on Intel (or compatible) platforms, sure&amp;rdquo;.  The also
gave some incredible FUD, that the linux kernel has had eight trojans
in different parts of the source.  I know of the one attack on a CVS
mirror of the bitkeeper kernel repository, but none others.&lt;/p&gt;
&lt;p&gt;All in all, an interesting debate, MS were defending themselves quite
well, but they were mostly on the defense.  IBM were weak and
blunt-toothed, which was sad.  The audience wasn&amp;rsquo;t so weak and pressed
home when the answers were just avoiding the question.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PHP-ers writing perl</title>
      <link>https://err.no/personal/blog/tech/2004-11-09-10-16_perl_php/</link>
      <pubDate>Tue, 09 Nov 2004 10:16:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-11-09-10-16_perl_php/</guid>
      <description>&lt;p&gt;Today, I had the dubious pleasure of hacking a bit of perl which
clearly wasn&amp;rsquo;t written by a Perl coder, but rather somebody who
learned &amp;ldquo;programming&amp;rdquo; by hacking together PHP or something similar.&lt;/p&gt;
&lt;p&gt;Take this little piece of code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;print &amp;quot;&amp;lt;DIV CLASS=\&amp;quot;caption\&amp;quot;&amp;gt;&amp;quot;;
my $tmp = &amp;amp;htmlize_caption ($info{$pathname}{&#39;comment&#39;}, &#39;slide&#39;);
print $tmp;
print &amp;quot;&amp;lt;/DIV&amp;gt;\n&amp;quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;unecessary temporary variable&lt;/li&gt;
&lt;li&gt;ugly &amp;ldquo;-escaping&lt;/li&gt;
&lt;li&gt;three print statements and one assignment rather than a single print
statement.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This code should rather read:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;print qq[&amp;lt;DIV CLASS=&amp;quot;caption&amp;quot;&amp;gt;],
      htmlize_caption($info{$pathname}{&#39;comment&#39;}, &#39;slide&#39;),
      qq[&amp;lt;/DIV&amp;gt;\n];
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;printf qq[&amp;lt;DIV CLASS=&amp;quot;caption&amp;quot;&amp;gt;%s&amp;lt;/DIV&amp;gt;], 
          htmlize_caption($info{$pathname}{&#39;comment&#39;}, &#39;slide&#39;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(Really, it should be using templates, but if you aren&amp;rsquo;t using
templates, well, then you aren&amp;rsquo;t.)&lt;/p&gt;
&lt;p&gt;The code doesn&amp;rsquo;t use strict, but it uses &lt;code&gt;my&lt;/code&gt;, it uses long, long,
long sequences of &lt;code&gt;print&lt;/code&gt; instead of chaining them or templating.&lt;/p&gt;
&lt;p&gt;If you are going to write perl, please learn the language properly
rather than writing huge scripts which are hard to fix and maintain.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PWM fan controller</title>
      <link>https://err.no/personal/blog/tech/2004-11-02-00-25_pwm_fancontroller/</link>
      <pubDate>Tue, 02 Nov 2004 00:25:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-11-02-00-25_pwm_fancontroller/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve talked a fair amount about my fan controller project earlier, but
today, the project entered a new phase.  I got it running on my own
hardware (earlier, I used a friends STK500 development board, and his
computer and so on, so I actually had no code from then).  The basic
stuff is working: I can adjust the speed from 0% to 90% duty cycle
using the small switches.&lt;/p&gt;
&lt;p&gt;I now need to get the code needed for a serial protocol going and I&amp;rsquo;m
all set.  The code is fairly easy, about 60 lines of C so far and I&amp;rsquo;m
hoping the serial code will be easy as well.  In addition, I need to
make a proper board with real connectors and everything.&lt;/p&gt;
&lt;p&gt;I also took a few &lt;a href=&#34;http://err.no/bilder/2004-11-02/&#34;&gt;pictures&lt;/a&gt;, so
it&amp;rsquo;s apparent for the world I can&amp;rsquo;t solder at all.  The Atmel Mega32
microcontroller is a cute piece of hardware, though.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Contentfilter (or mod_replace, or whatever) for pyblosxom</title>
      <link>https://err.no/personal/blog/tech/2004-11-01-13-22_pyblosxom_contentfilter/</link>
      <pubDate>Mon, 01 Nov 2004 13:22:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-11-01-13-22_pyblosxom_contentfilter/</guid>
      <description>&lt;p&gt;Annoyed at Liferea not handling Daniel Silverstone putting
&amp;amp;hellip; entities in his blog feed (which really isn&amp;rsquo;t the fault
of him, nor of Liferea, but rather of Planet, which doesn&amp;rsquo;t make sure
it spits out valid XML.  So I threw together a small piece of code
translating said entity to the unicode equivalent.  Stop-gap measure,
sure, but it works.&lt;/p&gt;
&lt;p&gt;In case you are interested, the code is as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;__author__ = &amp;quot;Tollef Fog Heen&amp;quot;
__version__ = &amp;quot;0 (2004-11-01)&amp;quot;
__url__ = &amp;quot;http://err.no/personal/blog&amp;quot;

def cb_postformat(args):
    request = args[&amp;quot;request&amp;quot;]
    entry_data = args[&amp;quot;entry_data&amp;quot;]
    for k in entry_data.keys():
        entry_data[k] = entry_data[k].replace(&amp;quot;&amp;amp;hellip;&amp;quot;, &amp;quot;&amp;amp;#8230;&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    
    <item>
      <title>New camera</title>
      <link>https://err.no/personal/blog/tech/2004-10-13-18-18_camera/</link>
      <pubDate>Wed, 13 Oct 2004 18:18:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-10-13-18-18_camera/</guid>
      <description>&lt;p&gt;When I came back from Oslo last night and took in my mail, I discovered
that a shop had the fairly new Sony P150 at a bargain.  As I had also
gotten a fairly big tax return, I decided to buy it.  It takes really
nice pictures and is just as fast as the P100, which I played with
earlier.&lt;/p&gt;
&lt;p&gt;Now I just need to get an extra battery and a big chunk of memory.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Spamassassin and available memory</title>
      <link>https://err.no/personal/blog/tech/2004-10-06-15-08_spamassassin_memory_exhaustion/</link>
      <pubDate>Wed, 06 Oct 2004 15:08:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-10-06-15-08_spamassassin_memory_exhaustion/</guid>
      <description>&lt;p&gt;It seems like the new Spamassassin 3 has some &lt;em&gt;serious&lt;/em&gt; problems
relating to memory usage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;7122 root      15   0  660m 332m 4692 D  0.0 43.8   8:18.64 spamd
7123 nobody    15   0  287m 257m 4692 D  0.0 34.0   0:17.01 spamd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As my server &amp;ldquo;only&amp;rdquo; has 768MB memory, this causes some problems, in
fact, it uses the full 512MB of swap it also has.&lt;/p&gt;
&lt;p&gt;This has happened three times in the last hour, and is now getting
unbearable.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>WebDAV</title>
      <link>https://err.no/personal/blog/tech/debian/2004-10-03-23-43_webdav/</link>
      <pubDate>Sun, 03 Oct 2004 23:43:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-10-03-23-43_webdav/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://julien.danjou.info/blog/index.php/2004/10/03/70-encrypted-files-transfers&#34;&gt;Julien
Danjou&lt;/a&gt;
seems to be looking for &amp;ldquo;a viable file transfer protocol with encryption
support&amp;rdquo; and mentions that HTTPS isn&amp;rsquo;t a file transfer protocol.  I
disagree &amp;ndash; if you combine HTTPS and DAV, you have a fairly ok file
transfer protocol, which gets rid of a lot of the problems surrounding
FTP.  Though, you are still stuck with the problem of the user your web
server is running as will own all your files.  It should be possible to
fix, either by doing some apache magic or by using a DAV server which
setuid()s to the user doing the access.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>ARM fun</title>
      <link>https://err.no/personal/blog/tech/2004-09-26-04-12_arm_fun/</link>
      <pubDate>Sun, 26 Sep 2004 04:12:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-09-26-04-12_arm_fun/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve gotten my hands on &lt;a href=&#34;http://store.earthlcd.com/s.nl/c.318770/sc.7/category.298/.f&#34;&gt;small ARM development
board&lt;/a&gt;
with a LCD touchscreen.  It&amp;rsquo;s a nice piece of hardware, has serial,
ethernet and runs on 5V.  I&amp;rsquo;ve gotten the toolchain working nicely on
another box (since you really don&amp;rsquo;t want to compile anything on a 75MHz
ARM box with 16MB RAM).  Works fine now, and I&amp;rsquo;m happy, and I hope the
owner will be so as well.&lt;/p&gt;
&lt;p&gt;I really want to get my hands on one of those boards permanently &amp;ndash;
there&amp;rsquo;s a lot you can do with such a small unit which should be able to
run on batteries fairly easily.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Chasing bugs.</title>
      <link>https://err.no/personal/blog/tech/2004-09-22-00-31_chasing_bugs/</link>
      <pubDate>Wed, 22 Sep 2004 00:31:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-09-22-00-31_chasing_bugs/</guid>
      <description>&lt;p&gt;Evolution 2.0 does not work properly on AMD64 in Ubuntu.  Tracing this
bug, I eventually found out it&amp;rsquo;s no fault of Evolution.  Neither is it
the fault of evolution-data-server, which I had the culprit for a long
time.  It then looked like the bug was in ORBit, which it wasn&amp;rsquo;t, I was
merely confusing myself with debug output.&lt;/p&gt;
&lt;p&gt;On returning to evolution-data-server, I eventually found something
weird in the file backend.  It was, for some reason, unable to open a
new libdb database.  Weird, I thought.  Looked up, and it failed with
EINVAL.  Googling a bit around, I found out this can be caused by the
the usage of the &lt;code&gt;DB_THREAD&lt;/code&gt; flag to &lt;code&gt;DB-&amp;gt;open&lt;/code&gt;.  Hacking a bit more
around, I found out that evolution at least starts without it.  Woo,
goodie.&lt;/p&gt;
&lt;p&gt;So, how do I make the system support &lt;code&gt;DB_THREAD&lt;/code&gt;?  Recompile glibc.  Of
course, enabling NPTL on amd64 causes a whole lot of other failures.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Sigh&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>SVN sucks, again.</title>
      <link>https://err.no/personal/blog/tech/2004-09-17-13-57_svn_sucks/</link>
      <pubDate>Fri, 17 Sep 2004 13:57:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-09-17-13-57_svn_sucks/</guid>
      <description>&lt;p&gt;Why does Subversion require write access to check out anything of the
repository?  That&amp;rsquo;s so totally broken.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>A followup on the email clients thread - gnus</title>
      <link>https://err.no/personal/blog/tech/2004-08-30-10-08-gnus-review/</link>
      <pubDate>Mon, 30 Aug 2004 10:08:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-08-30-10-08-gnus-review/</guid>
      <description>&lt;p&gt;Some people recommended I take a look at gnus as an IMAP client.  I
cheated, since I had most of my gnus setup already in place.  Gnus is
like a battleship &amp;ndash; it is big and sturdy, but a bit slow.  (It probably
didn&amp;rsquo;t help that I ran it over a forwarded SSH X connection.)  It has
good IMAP support, it seems.&lt;/p&gt;
&lt;p&gt;Gnus also has this excellent concept of &amp;ldquo;only show folders with unread
mails in them&amp;rdquo;, this means that I don&amp;rsquo;t get a zillion folders lying
about without anything interesting in them.  Listing them is a short &lt;code&gt;L&lt;/code&gt;
away, so it&amp;rsquo;s not a big issue to find them when you need them.  Also,
autosubscribing to new groups is easy, just add &lt;code&gt;^nnimap&lt;/code&gt; to the
&lt;code&gt;gnus-auto-subscribed-groups&lt;/code&gt; variable.   It would be nicer if it used
the subscribed list from the server, but evidently, it&amp;rsquo;s not going to do
that.&lt;/p&gt;
&lt;p&gt;I guess a screenshot is also in order, so you can see how well-ordered
gnus is, compared to wanderlust.
&lt;img src=&#34;http://err.no/images/2004-08-30-gnus.png&#34; alt=&#34;Gnus screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;(And no comments on me having a lot on unread mail, gnus seems to act up
a bit until I&amp;rsquo;ve entered all the folders with it, showing the total
number of mails, not the unread number.)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>A followup on the email clients thread - wanderlust</title>
      <link>https://err.no/personal/blog/tech/2004-08-30-10-06-wl-review/</link>
      <pubDate>Mon, 30 Aug 2004 10:06:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-08-30-10-06-wl-review/</guid>
      <description>&lt;p&gt;As I got a bunch of feedback from different people about different
clients, I promised to try them and give some feedback on how they
worked.&lt;/p&gt;
&lt;p&gt;So, I&amp;rsquo;ve taken a look at wanderlust.  It&amp;rsquo;s written in elisp, but by some
Japanese.  I generally dislike software written by Japanese people as
their docs suck (most Japanese can&amp;rsquo;t write English, it seems), so it is
often difficult to get working.  So also with wanderlust.  After a bit
of wrestling, I discovered that it was using openssl for handling the
SSL tunnel, while openssl was really unhappy about the fact that my mail
server is using a self-signed certificate.  After putting said
certificate into the right place and whacking &lt;code&gt;c_rehash&lt;/code&gt; to do the right
thing, it now seems to work fairly well.&lt;/p&gt;
&lt;p&gt;Wanderlust is fast, very fast.  I really dislike the default folder
overview, mostly for two reasons: it is cluttered:
&lt;img src=&#34;http://err.no/images/2004-08-30-wanderlust.png&#34; alt=&#34;Wanderlust
screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;And there is no way to sort the folders on criteria.  I don&amp;rsquo;t want to
maintain a &lt;code&gt;.folders&lt;/code&gt; file with all my folders, they are created on
the mail server automatically, and I want my MUA to pick them up as
they appear.&lt;/p&gt;
&lt;p&gt;If somebody knows how to customize the folder look a bit, I might stay
with wanderlust.  Also, getting it to actually understand that IMAP
folders form a tree would be most useful.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PyMarkdown</title>
      <link>https://err.no/personal/blog/tech/2004-08-24-00-52_pymarkdown/</link>
      <pubDate>Tue, 24 Aug 2004 00:52:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-08-24-00-52_pymarkdown/</guid>
      <description>&lt;p&gt;John Gruber has a Text-to-HTML system, called &lt;a href=&#34;http://daringfireball.net/projects/markdown/&#34;&gt;Markdown&lt;/a&gt;.
&lt;a href=&#34;http://daringfireball.net/projects/markdown/&#34;&gt;Markdown&lt;/a&gt; resembles wiki syntax in most ways and seems a
bit more well-designed than Textile.  I decided I wanted &lt;a href=&#34;http://daringfireball.net/projects/markdown/&#34;&gt;Markdown&lt;/a&gt;
for my blog.  However, &lt;a href=&#34;http://daringfireball.net/projects/markdown/&#34;&gt;Markdown&lt;/a&gt; is written in Perl, while
I&amp;rsquo;m using PyBlosxom, so I needed to convert it to python.  It took a
few hours, but it seems to be working fairly well now.  In addition, I
converted all my old posts to the new syntax.  A fair bit of work, but
I think it&amp;rsquo;s totally worth it.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m too tired to actually publish the pymarkdown source right now, but
I&amp;rsquo;ll do that once I have woken up tomorrow.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Email filtering</title>
      <link>https://err.no/personal/blog/tech/2004-08-22-17-14_email_filtering/</link>
      <pubDate>Sun, 22 Aug 2004 17:14:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-08-22-17-14_email_filtering/</guid>
      <description>&lt;p&gt;Erich Schubert &lt;a href=&#34;http://blog.drinsama.de/erich/2004/08/22#2004082202-email&#34;&gt;commented a
bit&lt;/a&gt; on &lt;a href=&#34;http://err.no/personal/blog/tech/2004-08-19-09-30_more_email_clients&#34;&gt;my
post&lt;/a&gt;
concerning filtering.  He just wants his filter to run on his server.
I agree, that&amp;rsquo;s where I want it to run as well.  However, sometimes I
subscribe to a mailing list, then realize a bit too late what I should
have filtered on, so I have some mails I&amp;rsquo;d like to get refiltered.  As
I am lazy, I would very much the suggestion from my MUA to be somewhat
intelligent.  Call it intelligent refiling support or something like
that.  It is also a nice way to check that your mails will actually be
filed in the right folder when you get more mails that will hit the
rule.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>More about email clients - filtering</title>
      <link>https://err.no/personal/blog/tech/2004-08-19-09-30_more_email_clients/</link>
      <pubDate>Thu, 19 Aug 2004 09:30:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-08-19-09-30_more_email_clients/</guid>
      <description>&lt;p&gt;One of the things I forgot when listing up what a good email client
should do is good integration with the filtering system.  Sometimes,
mail is misfiltered, so I want to rerun it through the filter.  Also,
when saying &amp;ldquo;move this mail&amp;rdquo;, the MUA should use the filter to decide
on a sensible default.  Obviously, this doesn&amp;rsquo;t work too well with
IMAP, so either one has to invent an extension to the IMAP protocol or
have the same filtering on both the client and the server.  The latter
would be an acceptable compromise to me, but both mailfilter/procmail
needs to be extended (to be able to tell a program &amp;ldquo;given this mail,
where would you put it, and please don&amp;rsquo;t run any side effects&amp;rdquo;) and
email clients need to be extended to use it.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Email clients</title>
      <link>https://err.no/personal/blog/tech/2004-08-19-01-40_email_clients/</link>
      <pubDate>Thu, 19 Aug 2004 01:40:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-08-19-01-40_email_clients/</guid>
      <description>&lt;p&gt;I ended up in a discussion about email clients on #debian-devel today.
I tend to do that once in a while, and most people don&amp;rsquo;t understand why
I think that all the current email clients are lacking in one way or
another.  I don&amp;rsquo;t think my list is too unreasonable; what I want in a
client is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;scriptability.  A non-scriptable client is totally useless.  This
has to be on many levels, from &amp;ldquo;please use
out-$YEAR.out-$YEAR-$MONTH as the outbox&amp;rdquo;, to &amp;ldquo;please look at what
email address this is sent to and use the same address as my reply
address&amp;rdquo;.  I also want to be able to customize what the quoting
should look like, strip Outlook&amp;rsquo;s terrible &amp;ldquo;AW: &amp;quot; and &amp;ldquo;SV: &amp;quot; instead
of the regular &amp;ldquo;Re: &amp;quot; from as the reply marker from the subject
field.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fairly fast.  It doesn&amp;rsquo;t have to be a speed demon, but I have around
1 million emails, and it needs to be able to handle that.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Good folder support.  Given the number of mails I have, I tend to
microorganize them a bit.  This means I need a way to see what
folders contains unread mail and flagged mail&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IMAP support.  Preferably good, with caching and everything.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then I have other small things like GPG support, the possibility to
change user interfaces.  Also, good mailing list support is preferable.&lt;/p&gt;
&lt;p&gt;I have found three mail user agents which all covers a couple of the
areas well, but none of them covers it all.  The three are gnus, mutt
and Mozilla Thunderbird.&lt;/p&gt;
&lt;p&gt;Gnus has excellent scriptability, is dog slow, has good folder support,
but I don&amp;rsquo;t know about its IMAP support.  It covers the rest of the
requirements fairly well.&lt;/p&gt;
&lt;p&gt;Mutt is fair when it comes to scriptability, is fast, crappy folder
support, crappy IMAP support but covers the rest well.&lt;/p&gt;
&lt;p&gt;Mozilla Thunderbird is supposed to be scriptable (but I don&amp;rsquo;t know about
Javascript and XUL), is fairly fast, very good folder support (for
unread mails, it hasn&amp;rsquo;t really grasped the concept of flagging messages,
I think), very good IMAP support, but lousy mailing list support.&lt;/p&gt;
&lt;p&gt;Those are what I think about them.  You might disagree and some of them
might fit you well, I&amp;rsquo;m just trying to explain to people why I am going
to end up writing my own client &amp;ndash; since none of the ones I know do what
I want, the way I want them to.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>SVN on crack</title>
      <link>https://err.no/personal/blog/tech/2004-08-18-12-06_svn_crack/</link>
      <pubDate>Wed, 18 Aug 2004 12:06:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-08-18-12-06_svn_crack/</guid>
      <description>&lt;p&gt;Subversion is on crack:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; : tfheen@yiwaz ..xternal/pkg-mailman/trunk &amp;gt; svn up    
 svn: Working copy &amp;#39;.&amp;#39; locked
 svn: run &amp;#39;svn cleanup&amp;#39; to remove locks (type &amp;#39;svn help cleanup&amp;#39; for details)
 : tfheen@yiwaz ..xternal/pkg-mailman/trunk &amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Oh well, let&amp;rsquo;s try something else, then:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  : tfheen@yiwaz ..xternal/pkg-mailman/trunk &amp;gt; svn cleanup
  svn: In directory &amp;#39;&amp;#39;
  svn: Error processing command &amp;#39;delete-entry&amp;#39; in &amp;#39;&amp;#39;
  svn: Working copy &amp;#39;upstream&amp;#39; not locked
  : tfheen@yiwaz ..xternal/pkg-mailman/trunk &amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Good crack!&lt;/p&gt;
&lt;p&gt;What about the upstream/ directory, then?&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  : tfheen@yiwaz ..kg-mailman/trunk/upstream &amp;gt; svn up
  svn: Invalid editor anchoring; at least one of the input paths is not a directory and there was no source entry
  : tfheen@yiwaz ..kg-mailman/trunk/upstream &amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Good crack, I&amp;rsquo;m going to move this into arch or something.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Last day..</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-08-03-09-53_last_day/</link>
      <pubDate>Tue, 03 Aug 2004 09:53:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-08-03-09-53_last_day/</guid>
      <description>&lt;p&gt;This is my last day at Hardware.no this summer.  It feels a bit weird,
going back to university again after this long.  It feels like a long
time, even though it has just been about two months.  I&amp;rsquo;ve been working
a lot on registrar stuff, and I hope it will end up going the right way.
NORID&amp;rsquo;s not too happy, which I kindof understand, and cleaning up after
other&amp;rsquo;s not any fun, but it has to be done.&lt;/p&gt;
&lt;p&gt;In addition, I&amp;rsquo;ve fixed numerous small items on the servers, such as
gotten a working apt repository, fixed the backup a few times, worked on
moving the servers from one hosting centre to another and so on.  It has
been quite eventful.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m looking forward to getting back to Trondheim and my studies, and
also seeing Karianne again, it being about a week since we saw each
other last time.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fan controller</title>
      <link>https://err.no/personal/blog/tech/2004-08-02-01-18_fan_controller/</link>
      <pubDate>Mon, 02 Aug 2004 01:18:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-08-02-01-18_fan_controller/</guid>
      <description>&lt;p&gt;Yay, I finally made the amplification step for my software-controlled
fan controller project.  It was fairly easy, it&amp;rsquo;s just a non-biased
normal transistor circuit with a protection diode (as I&amp;rsquo;m controlling
fans, which have motors) and a &amp;ldquo;brake&amp;rdquo; resistor on the base of the
transistor.&lt;/p&gt;
&lt;p&gt;I do really need to fix my soldering skills, I&amp;rsquo;m totally out of date and
having trouble with the iron.&lt;/p&gt;
&lt;p&gt;The next step is programming a micro-controller to do pulse width
modulation and then hook it up to the fan.  From there, it&amp;rsquo;ll just be
fun and easy.  I also need to make a bunch of those.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Forgetful repairmen</title>
      <link>https://err.no/personal/blog/tech/2004-07-17-14-48_stupid_technicians/</link>
      <pubDate>Sat, 17 Jul 2004 14:48:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-07-17-14-48_stupid_technicians/</guid>
      <description>&lt;p&gt;Some time ago, I had my laptop repaired and the motherboard replaced.
After a while, I started to wonder where the sound went.  Today, I was
bored of not having some kinds of sounds, so I popped the laptop case
open and discovered that the technician who had replaced the
motherboard had forgotten to replace the cable for the loudspeakers.
(Though, to call them loudspeakers is quite an exaggeration.  They
make sounds, period, nothing more.)&lt;/p&gt;
&lt;p&gt;After replacing the cable and closing the case, the laptop was a happy
beast again, now with sounds coming out of it.  It&amp;rsquo;s annoying that
those who fixed it didn&amp;rsquo;t do the job properly, they probably have a
check-out list of some kind which the forgot to follow, or they were
just being lazy.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>20 questions to a better personality</title>
      <link>https://err.no/personal/blog/tech/debian/2004-07-09-11-46_20_questions_to_a_better_personality/</link>
      <pubDate>Fri, 09 Jul 2004 11:46:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-07-09-11-46_20_questions_to_a_better_personality/</guid>
      <description>&lt;p&gt;(as per the &lt;a href=&#34;http://hokev.brinkster.net/quiz/default.asp?quiz=Better%2BPersonality&amp;amp;page=1&#34;&gt;20 Questions to a Better
Personality&lt;/a&gt;
test)&lt;/p&gt;
&lt;blockquote&gt;Wackiness: 22/100&lt;br&gt;
Rationality: 62/100&lt;br&gt;
Constructiveness: 60/100&lt;br&gt;
Leadership: 44/100&lt;/blockquote&gt;
&lt;blockquote&gt;
  You are an SRCF--Sober Rational Constructive Follower. This makes
  you a White House staffer. You are a tremendous asset to any
  employer, cool under pressure, productive, and a great
  communicator. You feel the need to right wrongs, take up slack,
  mediate disputes and keep the peace. This comes from a secret fear
  that business can&#39;t go on without you--or worse, that it can.
&lt;/blockquote&gt;
&lt;blockquote&gt;
  If you have a weakness, it is your inability to say &#34;no.&#34;
  While your peers respect you, they find it difficult to resist
  taking advantage of your positive attitude and eagerness to take on
  work. You depend on a good manager to keep you from sinking under
  the weight and burning out.
&lt;/blockquote&gt;
&lt;p&gt;Doesn&amp;rsquo;t sound too wrong.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Chaos</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-07-09-01-15_today/</link>
      <pubDate>Fri, 09 Jul 2004 01:15:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-07-09-01-15_today/</guid>
      <description>&lt;p&gt;Yesterday and today has mostly been chaotic.  Lots of small things to
be taken care of, including more registrar work.  Most of that should
now be up-to-date, and I hope to keep it that way.  Ate shrimps by the
dockside today, which was nice.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Last week (or so)</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-07-06-22-28_last_week/</link>
      <pubDate>Tue, 06 Jul 2004 22:28:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-07-06-22-28_last_week/</guid>
      <description>&lt;p&gt;We were going to move all the servers from our old ISP to a new one,
and in order to prepare a bit for all eventualities, we moved a single
server on Thursday.  It was a good experience, and we discovered stuff
like the fact that the network was broken.  Or rather, it wasn&amp;rsquo;t up
yet.  One of the people from the network provider was there and we
chatted a bit before deciding on we would leave the server in the rack
and he&amp;rsquo;d call me if he had any problems getting the network up and
running.  It was up sometime on Friday, so that was nice.&lt;/p&gt;
&lt;p&gt;Friday, we ran about finding missing pieces we needed for the move.
In addition, I got some more registrar work done.  An SSL certificate
was ordered but it got hung up somewhere in Thawte&amp;rsquo;s system.&lt;/p&gt;
&lt;p&gt;Monday, we ran even more about, this time actually finding the parts
we needed.  The servers were shut down at 2200, we finished getting
them out of the rack and into the trunk of Amund&amp;rsquo;s car a little after
2400.  Getting the servers into the new rack didn&amp;rsquo;t take too much
time, but configuring everything correctly took a while.  We had some
issues with Apache&amp;rsquo;s virtual hosts and DNS, but it got worked out.  I
also managed to misconfigure the mail server (or rather, its DNS
entry) somewhat, so the route ended up somewhere in Italy.  We
finished at about 0730, and even though everything wasn&amp;rsquo;t triple
checked, we were so tired that going home was the best option.&lt;/p&gt;
&lt;p&gt;As I came into work at 1300 today, Tuesday, I got a pile of stuff
thrown onto me: the mail server didn&amp;rsquo;t work properly, a few hosts were
misconfigured and so on.  Fixed this and sent in the two change
requests to NORID so we ended up with three DNS servers operational
again.&lt;/p&gt;
&lt;p&gt;Had some food with Anders and Amund at Peppes before fixing tying up
some loose threads.  Ended up discussing my fan control project with
Amund before going home.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Broken posts on Planet Debian.</title>
      <link>https://err.no/personal/blog/tech/debian/2004-07-06-22-15_broken_posts/</link>
      <pubDate>Tue, 06 Jul 2004 22:15:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-07-06-22-15_broken_posts/</guid>
      <description>&lt;p&gt;Am I the only one who is annoyed at the
&lt;a href=&#34;http://zinosat.blogspot.com/2004/07/planet-debian-here-i-am.html&#34;&gt;late&lt;/a&gt;,
&lt;a href=&#34;http://debian-pure64.blogspot.com/2004/07/added-to-planet-debian.html&#34;&gt;broken&lt;/a&gt;
&lt;a href=&#34;http://natalian.org/archives/2004/06/26/x-interface/&#34;&gt;posts&lt;/a&gt;
&lt;a href=&#34;http://phython.blogspot.com/2004/07/so-from-anonymous-comment-my-eye.html&#34;&gt;at&lt;/a&gt;
&lt;a href=&#34;:http://planet.debian.net&#34;&gt;Planet Debian&lt;/a&gt; ?&lt;/p&gt;
&lt;p&gt;Please people: fix your feeds.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GUADEC over, ACPI working.</title>
      <link>https://err.no/personal/blog/tech/2004-06-30-22-39_guadec_over/</link>
      <pubDate>Wed, 30 Jun 2004 22:39:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-06-30-22-39_guadec_over/</guid>
      <description>&lt;p&gt;GUADEC is over and I&amp;rsquo;m currently sitting on the train back home.  It&amp;rsquo;s
been a good conference, meeting new and old people.  The talks were
ok-ish, but I realize that the real reason I go to conferences is the
people.  Chatting about both technical and non-technical issues is
something I learn a lot from.  In addition to the DDs there, the
Skolelinux people, random GNOME/Ximian/Novell/RedHat hackers, I had the
pleasure of meeting Bdale&amp;rsquo;s family.&lt;/p&gt;
&lt;p&gt;At conferences, I have a tendency to run into Matthew Garrett, and I did
this time as well.  He helped me get ACPI working again, even though we
didn&amp;rsquo;tmange to fix it properly.  (Using a couple of patches off
&amp;ldquo;the kernel bugzilla&amp;rdquo;:bugzilla.kernel.org.)  I fiddled around with it on
the train and it seems the ACPI controller doesn&amp;rsquo;t like to have its
interrupt method (level or edge) fiddled with while restoring, so I just
added it to the mask of reserved interrupts.   It now seems to work just
fine, suspend - resume - suspend works, and I think my network card
works after resume.  Yay, yay, yay!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Cross installations</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-06-26-00-56_cross_installations/</link>
      <pubDate>Sat, 26 Jun 2004 00:56:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-06-26-00-56_cross_installations/</guid>
      <description>&lt;p&gt;Most of today was spent helping webdeal with one of their Opteron
servers.  They are more used to Intel hardware and *BSD, while said
machine runs Linux.  They have had some performance problems with
another one, so I helped them tune this one a bit, and it ended up
with fairly nice performance.&lt;/p&gt;
&lt;p&gt;After some food, I went to the server room and continued to work on
the server, now reinstalling it with Debian (we had done the tests in
a Debian chroot inside a Mandrake installation, since that was the CD
I had available).  Unfortunately, I had to cross-install using the
already existing installation as the Woody CD didn&amp;rsquo;t find the RAID
controller.  It worked fairly well, but during this process the whole
circuit breaker decided that the rack had overloaded it, so it threw
itself and the whole rack went quite silent quite fast.  After a few
phone calls and running about, I managed to get it all running again,
just a few systems needed a manual fsck.&lt;/p&gt;
&lt;p&gt;Got the system installed and left the server room, tired but happy.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Racks going silent.</title>
      <link>https://err.no/personal/blog/tech/2004-06-26-00-34_silent_racks./</link>
      <pubDate>Sat, 26 Jun 2004 00:34:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-06-26-00-34_silent_racks./</guid>
      <description>&lt;p&gt;A rack losing its power and then all the UPSes failing makes a hell of
a lot of noise before becoming very, very quiet.  And then it makes a
lot of noise when you make the power come back.&lt;/p&gt;
&lt;p&gt;Note to others: Do not, I repeat, do not attach a full rack of servers
to one 10 amp circuit, and do not attach the UPS-es to each other so
you&amp;rsquo;ll be sure to overload the whole shebang.&lt;/p&gt;
&lt;p&gt;Yeah, and fix stuff, don&amp;rsquo;t document workarounds when the fix is easy.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Semiproductive day</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-06-24-16-57_semiproductive/</link>
      <pubDate>Thu, 24 Jun 2004 16:57:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-06-24-16-57_semiproductive/</guid>
      <description>&lt;p&gt;This hasn&amp;rsquo;t been the most productive of days, I&amp;rsquo;ve been doing a little
registrar work and cleanups, but not very much.  A bit tired after last
night.  Apart from the registrar work, I&amp;rsquo;ve written a draft requirements
spec for a project, which will be quite interesting once it goes live.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Signing keys, finally</title>
      <link>https://err.no/personal/blog/tech/debian/2004-06-24-13-49_signing_keys/</link>
      <pubDate>Thu, 24 Jun 2004 13:49:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-06-24-13-49_signing_keys/</guid>
      <description>&lt;p&gt;Finally got around to signing all the keys from Debconf 4.  I ran into a
couple of problems, some related to the tool I&amp;rsquo;m using, gpgmailsign
(which, after what I&amp;rsquo;ve understood, works fairly similarly to
&lt;a href=&#34;http://www.netsplit.com/software/signkey/&#34;&gt;Keybuk&amp;rsquo;s signkey&lt;/a&gt; ), some
related to the fact that some people don&amp;rsquo;t have any encryption keys
connected to their key at all, which is in theory fine, but I really
don&amp;rsquo;t want to diverge from my usual way of signing keys.  Another
problem which popped up was GPG messing up (no valid OpenPGP data
found), missing key on keyserver, etc.  If you&amp;rsquo;re still missing my
signature from Debconf, drop me a mail and I&amp;rsquo;ll see what I can do.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Registrar work.</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-06-23-01-47_registrar_work/</link>
      <pubDate>Wed, 23 Jun 2004 01:47:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-06-23-01-47_registrar_work/</guid>
      <description>&lt;p&gt;Today was just spent doing registrar work.  Tedious work where you have
to get it exactly right, else you get the application refused (though,
with an explanation).  All the domains we administer should now be in
order, but I believe I&amp;rsquo;ll need at least another day to clean out the
last small problems.  We are going to change ISP in a few weeks, which
means lots of work if the DNS isn&amp;rsquo;t set up properly.  (Or rather, it
means &lt;em&gt;even more&lt;/em&gt; lots of work if the DNS isn&amp;rsquo;t set up properly.)&lt;/p&gt;
&lt;p&gt;As always, we discussed around a bit and I begun helping out another guy
with a broken file system, but I didn&amp;rsquo;t get around to actually fixing
it, so I&amp;rsquo;ll have to look into that tomorrow or so.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Meetings and registrar work</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-06-22-01-44_meetings/</link>
      <pubDate>Tue, 22 Jun 2004 01:44:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-06-22-01-44_meetings/</guid>
      <description>&lt;p&gt;Friday, I managed to actually get some work done.  Anders brought back
one of the servers from the server room on Thursday, and the reason for
it being broken was one of the coolers having come loose.  The cpu was
fairly burnt, and after a short while, I gave up getting it to work.
Left work early to meet up with Karianne.&lt;/p&gt;
&lt;p&gt;Monday, I&amp;rsquo;ve been mostly in a board meeting.  We discussed for some
hours, slowly getting through the list of items we were to process.  Due
to an oversight, we had to cut the meeting short, so we&amp;rsquo;ll continue on
Wednesday.  Will be fun, I guess..&lt;/p&gt;
&lt;p&gt;The rest of the day, I spent doing registrar stuff, going through the
huge pile of mess that is our current set of domains.  It&amp;rsquo;ll be good
once it&amp;rsquo;s cleaned up, but right now, it&amp;rsquo;s a huge pile of work, just
waiting for me to go through it tomorrow.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>User interfaces - appliances and tools</title>
      <link>https://err.no/personal/blog/tech/2004-06-19-13-05_user_interfaces/</link>
      <pubDate>Sat, 19 Jun 2004 13:05:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-06-19-13-05_user_interfaces/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.golden-gryphon.com/blog/manoj/&#34;&gt;Manoj&lt;/a&gt; writes a bit about
[appliances versus
tools](&lt;a href=&#34;http://www.golden-gryphon.com/blog/manoj/software/manoj.2004.06.17.golden_gryphon%5D&#34;&gt;http://www.golden-gryphon.com/blog/manoj/software/manoj.2004.06.17.golden_gryphon]&lt;/a&gt;.
He&amp;rsquo;s saying what I&amp;rsquo;ve been trying to say about user interfaces for a
long time: A bit simplified, you can divide the &amp;ldquo;cost&amp;rdquo; of using an UI
into two parts: One initial cost, which is what it takes to learn the
interfaces, and one running cost, which is how much it costs to use an
interface after you&amp;rsquo;ve learnt it.  Of course, this is a bit
simplified, since learning a tool is not binary, but I still think the
comparison holds.&lt;/p&gt;
&lt;p&gt;For tools which you use seldom, you care a lot about the initial cost,
since you will incur that many times as you have to re-learn the user
interfaces.  An example would be an ATM.  For a complex tool, such as
my use of a computer, the running cost is what matters.  If I have to
spend a week to learn a tool I&amp;rsquo;m going to use a lot, it&amp;rsquo;s worth it.&lt;/p&gt;
&lt;p&gt;However, as Manoj points out, this is not only a result of complexity:
Both ATMs and general purpose computers are complex beasts, and an axe
is a lot simpler than a refrigerator (mechanically speaking).  The HCI
term &amp;ldquo;affordance&amp;rdquo; doesn&amp;rsquo;t quite cut it either, as it is more about how
easy an interface is to learn. On the other hand, an axe affords a lot
of things, that is, it doesn&amp;rsquo;t give you much guidance on how to use
it.  A refrigerator door affords opening, it&amp;rsquo;s one of the few things
you can do with it.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Busy, busy.  Tie-work.</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-06-17-23-59_busybusy/</link>
      <pubDate>Thu, 17 Jun 2004 23:59:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-06-17-23-59_busybusy/</guid>
      <description>&lt;p&gt;Yesterday, I was mostly working on domain and registrar stuff.  Fairly
simple stuff, but it takes a lot of work to get everything working
properly and the infrastructure set up.  It seems like most parts are
coming to the right place, even though it feels like I&amp;rsquo;m doing nothing
at work for the time being.  I think I&amp;rsquo;m fairly efficient, but most of
my work goes into making others be able to get their work done, which
is a good thing, but it&amp;rsquo;s still fairly frustrating for me, as it feels
bad getting paid for doing &amp;ldquo;nothing&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Today, I started out with a general assembly in Opera Software.  Then,
I got to work; I nearly got into the office before I had other work to
do and ended up in some discussion or another.  We had a small
emergency when Anders plugged a computer into the non-crossed uplink
port on the switch as well as the uplink itself.  Everything died and
we used about thirty minutes to track down the problem.  Then, it was
lunch, and after that, Stein Magnus came in and we went out and
discussed some work he&amp;rsquo;ll be doing for us this summer.&lt;/p&gt;
&lt;p&gt;Got back in, then headed off for the server room where we moved a few
computers out of one of the racks and into the next one.  Went fairly
ok.  I also debugged why mju (actually, she&amp;rsquo;s called &amp;ldquo;my&amp;rdquo;, since
that&amp;rsquo;s the Norwegian spelling) didn&amp;rsquo;t seem to come up properly after a
boot.  It seems like 2.4 and 2.6 number the network interfaces
differently.  Anders picked up alfa and took a taxi back to the office
while I headed off for the NUUG barbecue, which was nice.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Work, work, work</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-06-15-23-38_workworkwork/</link>
      <pubDate>Tue, 15 Jun 2004 23:38:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-06-15-23-38_workworkwork/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been meaning to blog about what I&amp;rsquo;ve been doing each day at work,
since it will make my life a lot better at the end of the weeks and end
of the summer.  Of course, I haven&amp;rsquo;t done so far, but I&amp;rsquo;m trying to
start now.&lt;/p&gt;
&lt;p&gt;Last Friday was my first day of work this summer.  Most of the day was
spent trying to set myself up, getting DHCP working, saying &amp;ldquo;Hi&amp;rdquo; to
everybody and so on.&lt;/p&gt;
&lt;p&gt;Yesterday, Monday, was spent in meetings.  We met about what we&amp;rsquo;re going
to do this summer, the future direction of the company and so on, and so
on.  Not too much fun, but still fairly needed to do.  We&amp;rsquo;re going to
have both a board meeting and a shareholder&amp;rsquo;s meeting the first Monday.&lt;/p&gt;
&lt;p&gt;Today, we got access cards to the new server room, which was good.
Talked a bit with everybody, and we have a huge bunch of work to do,
both work to be done, and it also seems like there&amp;rsquo;s a shadow hanging
over us, something which we have to fix and talk about.  It sucks and
will take time, but it&amp;rsquo;s absolutely necessary.&lt;/p&gt;
&lt;p&gt;Worked a bit on registrar stuff as well, which was good to get started
on.  There&amp;rsquo;s a bunch of work there as well, and a nice, big backlog to
start with.  Will be fun tomorrow.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Blogging on paper</title>
      <link>https://err.no/personal/blog/tech/2004-06-06-16-54_blogging_on_paper/</link>
      <pubDate>Sun, 06 Jun 2004 16:54:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-06-06-16-54_blogging_on_paper/</guid>
      <description>&lt;p&gt;I find myself blogging a lot on paper lately.  Though blogging, being a
short form of the word weblogging, it then becomes an oxymoron, and
they&amp;rsquo;re not available to anybody before I get around to typing them in.&lt;/p&gt;
&lt;p&gt;I really don&amp;rsquo;t know the reason for this trend of mine, but I have a few
guesses:  The first and foremost is that my laptop is kinda broken with
all the ACPI problems and stability problems with the motherboard.  (And
that IBM claims otherwise.)  Another reason is the instant-on capability
of paper.  I just pick up my notebook and a pen or pencil and start
writing.  My laptop doesn&amp;rsquo;t do that at the moment, since I broke ACPI
when upgrading to 2.6.  Those two reasons means paper is less fiddly
when it comes to writing down thoughts just there.&lt;/p&gt;
&lt;p&gt;I hope me seeing it as fiddly doesn&amp;rsquo;t mean I&amp;rsquo;m getting bored of
computers, which would be a disaster as they are quite a big part of my
life.  To test this theory, I&amp;rsquo;ll fix all the outstanding issues (like
ACPI sleep states) once I get the motherboard fixed.  Of course, it
still doesn&amp;rsquo;t address the issues of a laptop being more or less useless
outdoors or the severly limited battery life.  Because of the sucky
battery life, and the weight of my current laptop, I wish for a new one,
either an IBM X40, the HP 4010 or one of the smaller Fujitsu Lifebooks.
All should have around ten hours with an extra battery pack clipped on.
Of course, I won&amp;rsquo;t buy one until the current one is worn out.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Electronic equipment and planes</title>
      <link>https://err.no/personal/blog/tech/2004-06-06-16-17_planes_electronic_equipment/</link>
      <pubDate>Sun, 06 Jun 2004 16:17:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-06-06-16-17_planes_electronic_equipment/</guid>
      <description>&lt;p&gt;Each time you fly from somewhere to somewhere else, the crew go through
the same procedure before take-off: Turn off all radio receivers and
transmitters during the whole flight, and during take-off and landing,
please turn off all electronic equipment.&lt;/p&gt;
&lt;p&gt;The call for turning off transmitters, I can understand, though why you
should turn off receivers, I am not sure.  The call to turn off stuff
like CD players and such is just silly; yes, they contain a small
electromotor which will emit a bit of noise, but if the navigational
systems of the plane are that suspecible to jamming and malfunction, I
am really, really scared of flying.&lt;/p&gt;
&lt;p&gt;The problem of having a rule like the one above is that you make those
who know the factors involved question your judgement and make them
ignore other rules which might actually matter.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Yahoo breaking SMTP standards.</title>
      <link>https://err.no/personal/blog/tech/2004-05-13-22-03_breaking_standards/</link>
      <pubDate>Thu, 13 May 2004 22:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-05-13-22-03_breaking_standards/</guid>
      <description>&lt;p&gt;For some random reason, I logged into my &lt;a href=&#34;http://groups.yahoo.com&#34;&gt;Yahoo
Groups&lt;/a&gt; account today.  I saw my mail was set
as &amp;ldquo;soft bouncing&amp;rdquo;.  Hmm, weird, I thought.  Of course, it was my
greylisting that had eaten a few messages.  Yes, eaten.  For some
reason, it seems Yahoo doesn&amp;rsquo;t retry delivering mails which gets
refused by a 4xx response, they just drop them.  Ugly and stupid.
I&amp;rsquo;ve now whitelisted yahoo.com in my mail setup, but that&amp;rsquo;s just
because I want to get mails from said lists.&lt;/p&gt;
&lt;p&gt;They have intentionally broken SMTP standards, something which really,
really disappoints me; I thought they were one of the honorable
companies, but apparently not.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fake categories for pyblosxom</title>
      <link>https://err.no/personal/blog/tech/2004-05-11-10-02_fake_categories/</link>
      <pubDate>Tue, 11 May 2004 10:02:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-05-11-10-02_fake_categories/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been missing two features for pyblosxom, one is a &amp;ldquo;fake category&amp;rdquo;
concept, so I can feed Planet Debian not just stuff from my &lt;code&gt;tech&lt;/code&gt; and
&lt;code&gt;tech/Debian&lt;/code&gt; categories, but also stuff from the other categories.
In fact, I just want to exclude the diary, since it&amp;rsquo;s probably boring
for most people.&lt;/p&gt;
&lt;p&gt;So, inspired by aj&amp;rsquo;s
&lt;a href=&#34;http://azure.humbug.org.au/~aj/blosxom/plugins/fakecat/&#34;&gt;fakecat&lt;/a&gt; for
blosxom, I did mostly the same for pyblosxom.  The code is in my
&lt;a href=&#34;http://err.no/pyblosxom/plugins&#34;&gt;plugins directory&lt;/a&gt;, as
&lt;a href=&#34;http://err.no/pyblosxom/plugins/fakecat.py&#34;&gt;fakecat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(The other feature I&amp;rsquo;m missing is the ability to file entries in
multiple categories, but that&amp;rsquo;s for another day.)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Mozilla Thunderbird and macros</title>
      <link>https://err.no/personal/blog/tech/2004-05-06-12-35_mozilla-thunderbird_macros/</link>
      <pubDate>Thu, 06 May 2004 12:35:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-05-06-12-35_mozilla-thunderbird_macros/</guid>
      <description>&lt;p&gt;You would think making a macro or shortcut for moving the currently
marked message to another folder (namely, my &amp;ldquo;spam&amp;rdquo; folder) would be
easy?  No, it&amp;rsquo;s not.  The documentation for the API is non-existent
and there are close to zero samples around.  If somebody has a
javascript snippet that moves a message to another folder, using
Mozilla Mail (or Thunderbird, that shouldn&amp;rsquo;t matter), I&amp;rsquo;d appreciate
it a lot.&lt;/p&gt;
&lt;p&gt;Apart from that, thunderbird actually quite nice to work with now.
I&amp;rsquo;ve installed a bunch of extensions so quoted text is shaded and
such, which helped a bit.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Checking for mail in all folders with mozilla-thunderbird.</title>
      <link>https://err.no/personal/blog/tech/2004-05-06-09-12_mozilla_thunderbird_check_all_mail/</link>
      <pubDate>Thu, 06 May 2004 09:12:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-05-06-09-12_mozilla_thunderbird_check_all_mail/</guid>
      <description>&lt;p&gt;Yay, it took a little, and why this is not an option somewhere in the
options panel, I don&amp;rsquo;t know.  To check for mail in all IMAP folders,
add the following to ~/.mozilla-thunderbird/default/&amp;lt;random crap&amp;gt;/prefs.js&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Check for new mail in ALL imap folders
user_pref(&amp;quot;mail.check_all_imap_folders_for_new&amp;quot;, true);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(Thanks to whoevers&amp;rsquo; blog I found that it.  I&amp;rsquo;ve lost the link
already.)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Stupid, stupid defaults</title>
      <link>https://err.no/personal/blog/tech/2004-05-03-03-14_stupid_defaults/</link>
      <pubDate>Mon, 03 May 2004 03:14:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-05-03-03-14_stupid_defaults/</guid>
      <description>&lt;p&gt;Why does Thunderbird default to using a cleartext connection to the
IMAP server?  I&amp;rsquo;m actually a bit surprised it even has it as an
option.  Cleartext authentication might have been ok ten years ago,
but it&amp;rsquo;s not ok today.&lt;/p&gt;
&lt;p&gt;This caused my second password change this week.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Perl poems</title>
      <link>https://err.no/personal/blog/tech/2004-04-23-00-12_perl_poems/</link>
      <pubDate>Fri, 23 Apr 2004 00:12:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-04-23-00-12_perl_poems/</guid>
      <description>&lt;p&gt;Inspired by &lt;a href=&#34;http://kitenet.net/~joey/blog/entry/gearing_up-2004-04-21-22-38.html&#34;&gt;joeyh&amp;rsquo;s apocalypse link&lt;/a&gt;
I decided to read the 12th Perl apocalypse.  Interesting read, and it
seems like Perl is turning into an even better and cooler language.&lt;/p&gt;
&lt;p&gt;While reading through it, it occured to me how perl6 will make it
easier and more fun to write poems in it.  Even cooler and more fun
than perl5 poems.  I am looking forward to actually having the
language working and play with it.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hardware sucks.  Really.</title>
      <link>https://err.no/personal/blog/tech/2004-04-15-01-32_hardware_sucks/</link>
      <pubDate>Thu, 15 Apr 2004 01:32:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-04-15-01-32_hardware_sucks/</guid>
      <description>&lt;p&gt;As you have noticed, both &lt;a href=&#34;http://planet.debian.net&#34;&gt;Planet Debian&lt;/a&gt; and
my &lt;a href=&#34;http://err.no/personal/blog/&#34;&gt;blog&lt;/a&gt; has been down for some days.
This is due to hardware failure, and me being about 500kms away unable
to fix it.&lt;/p&gt;
&lt;p&gt;Today, I started at the task.  I thought the problem was the main hard
drive, which I no longer really think, but who cares.  I removed the
hard drive and copied the contents over to a new one.  After a little
fiddling, it seemed to work fine.  Of course, it didn&amp;rsquo;t work fine, it
just looked like it.  fsck complained about &amp;ldquo;trying to access beyond
end of partition&amp;rdquo; and similar, fun, errors.  Of course, it was wrong,
and after a little head-scratching, I gave up and repartitioned the
disk.&lt;/p&gt;
&lt;p&gt;So far, so good, but then the system died completely while I was
working on it.  Picking out all the eight hard drives, then putting
them back in, one by one.  Yeah, and the RAM slot on the motherboard
is placed in such a way that you have to remove all the memory in
order to move any of the hard disks.  Excellent design.&lt;/p&gt;
&lt;p&gt;Then, once that was fixed, the box refused to get on the net.  It
would receive packets, but not send any.  Naturally, it made me angry,
and I decided to break the network card, which I did.  Two pieces.  To
add injury to insult, I had the misfortune of nearly trampling my left
foot with my right one, so my foot hurt as well, not just my pride.&lt;/p&gt;
&lt;p&gt;I left for Bjørn-Ove&amp;rsquo;s food and a few glasses of port and other
wine instead.  Much better, and thanks.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Vawad down, now up.</title>
      <link>https://err.no/personal/blog/tech/2004-04-09-17-34_vawad_down/</link>
      <pubDate>Fri, 09 Apr 2004 17:34:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-04-09-17-34_vawad_down/</guid>
      <description>&lt;p&gt;The host hosting both my blog and &amp;ldquo;Planet Debian&amp;rdquo;:planet.debian.net
has been down for about 34 hours, and has recently been rebooted.  I&amp;rsquo;m
not sure why it decided to kill itself, except that the kernel logs
have interesting IRQ errors.  I&amp;rsquo;ll look a bit more at it when I return
on Wednesday, but until then, I&amp;rsquo;m hoping she&amp;rsquo;ll be able to work fine.&lt;/p&gt;
&lt;p&gt;Sorry for the downtime, I hope it won&amp;rsquo;t repeat itself.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Disassembling my laptop</title>
      <link>https://err.no/personal/blog/tech/2004-04-06-14-03_laptop_disassembly/</link>
      <pubDate>Tue, 06 Apr 2004 14:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-04-06-14-03_laptop_disassembly/</guid>
      <description>&lt;p&gt;My laptop hasn&amp;rsquo;t been too stable recently, it has had problems with
locking up for short amounts of time, randomly doing weird stuff and
confusing the mouse a bit.  Today, I finally got around to picking it
apart.  The keyboard included a huge amount of dust and hair, the heat
pipe to the CPU was clogged with dust, and for some reason, the
loudspeakers (even though calling them loudspeakers feel a bit silly)
were disconnected, so I reconnected them.&lt;/p&gt;
&lt;p&gt;All in all, my laptop is a lot happier now, and so am I.  I&amp;rsquo;m just
hoping it will stay nice and well-behaving.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Going to Brazil</title>
      <link>https://err.no/personal/blog/tech/debian/2004-04-05-10-20_brazil/</link>
      <pubDate>Mon, 05 Apr 2004 10:20:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-04-05-10-20_brazil/</guid>
      <description>&lt;p&gt;??00:09 &amp;lt; stockholm&amp;gt; Mithrandir: book your flight, your talk was taken.??&lt;/p&gt;
&lt;p&gt;Yay, I&amp;rsquo;m going to Brazil!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hacking</title>
      <link>https://err.no/personal/blog/tech/2004-04-03-00-25_hacking/</link>
      <pubDate>Sat, 03 Apr 2004 00:25:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-04-03-00-25_hacking/</guid>
      <description>&lt;p&gt;The power supply on my laptop has been flaky for a while, but today, in the
car, I used a car power supply which was fine and stable.  I figured that
&lt;em&gt;something&lt;/em&gt; in my normal power supply was broken, but I didn&amp;rsquo;t know what.
After a bit of inspection, it showed that the connector on the power supplies
were a little bit different.  Not much, and I fixed that by way of a little
soldering.  Of course, it didn&amp;rsquo;t help, so I tore most of the plug apart,
soldered it and taped it together.  Not too nice, but a lot more stable than
earlier.  Once I get back to Oslo or Trondheim, I&amp;rsquo;ll buy the needed parts and
solder it properly, but for now, it&amp;rsquo;ll do.&lt;/p&gt;
&lt;p&gt;After hacking that, I wanted to get on the internet to talk to my girlfriend
and download mail.  We had brought a nice pile of Ciscos, and my father&amp;rsquo;s
laptop had a working modem.  (Except that the modem turned out to be
non-working.)  None of the Ciscos wanted to play nice, but after I while I got
on the net with his laptop (through an USB interface to the base station for
the cordless phone).  Verifying that the number was correct helped a bit.
Also, turning on debugging is fairly useful.  So, after about six hours of
fooling around with the router, I got online.  A bit more than I expected, but
know I know a little more about how IOS is put together and what the thought
processes are like.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Laptops and heat</title>
      <link>https://err.no/personal/blog/tech/2004-04-02-13-28_laptops_heat/</link>
      <pubDate>Fri, 02 Apr 2004 13:28:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-04-02-13-28_laptops_heat/</guid>
      <description>&lt;p&gt;Up until now, I have been most satistified with my laptop.  It&amp;rsquo;s light enough,
fast enough and has a decent screen.  Lately, two problems have begun to prop
up:  The first is the AC adapter being broken.  Actually, it&amp;rsquo;s not the adapter,
it&amp;rsquo;s the the plug in the computer itself.  I have actually managed to wear that
more or less out.  A quick visit to IBM should fix that, though.  The second
problem has to do with heat.  Either, the newer 2.6 kernels are really, really
funky when it comes to power management, or the CPU has turned old and grumpy
and decided to get a bit hotter.  Of course that gives me fair amount of
problems, since the system then locks up intermittently, loses keystrokes and
so on.  I wonder what to do about this, since the system gets increasingly
unuseable for me, and my laptop is turning from something I really, really
enjoy working with into some sort of monster I have to fight instead.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Why open systems are good (or why cars suck)</title>
      <link>https://err.no/personal/blog/tech/2004-04-02-12-09_open_systems/</link>
      <pubDate>Fri, 02 Apr 2004 12:09:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-04-02-12-09_open_systems/</guid>
      <description>&lt;p&gt;This is written while on my way en route from Oslo to Hemsedal, where my father
has his cabin.  (He is driving, so don&amp;rsquo;t worry about me blogging while driving,
I don&amp;rsquo;t even have a driving license.)  About three minutes after we started
driving, dad said &amp;ldquo;oh, we forgot to bring any CDs&amp;rdquo;.  I looked at the CD player
in the car.  No sound inputs, of course.  How silly: I have a fair amount of
music on my laptop, but I can&amp;rsquo;t use it in the car, just because of a design
defiency in the car&amp;rsquo;s CD player.&lt;/p&gt;
&lt;p&gt;My mind started wandering, and a little later, I decided that what was missing
wasn&amp;rsquo;t a mini-jack connector to the stereo, it was a proper bus.  The car
should have an USB (or bluetooth or something else, fairly nice and cheap)
interface.  Not just for audio (which would be nice, the stereo would just show
up as a sound card to the laptop), but also for getting stats such as speed,
direction, fuel comsumption and any other data the car is registering.&lt;/p&gt;
&lt;p&gt;Of course, since people who design cars aren&amp;rsquo;t open-source people and don&amp;rsquo;t
think in terms of open systems communicating through well-defined and nice
protocols, everything I have described here are just wild dreams.  Would be
cool if they came true, though.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Naming of hosts</title>
      <link>https://err.no/personal/blog/tech/2004-03-31-02-39_naming/</link>
      <pubDate>Wed, 31 Mar 2004 02:39:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-03-31-02-39_naming/</guid>
      <description>&lt;p&gt;I really, really hate it when you either run out of host names (so
stuff like planets are definetely out, at least for me.  My girlfriend
is sticking to them for the time being, though.), or when you have
name collisions (so using the common names from Lord of The Rings is
silly).  My solution is to use pwgen as an inspiration.  It gives
meaningless, but perfectly usable names.  So far, I have yiwaz (my
laptop), vojei (my router), vawad (the box I run my IRC screen on and
a bit more), aija (a second laptop of mine), aine (my powerpc box),
and soon, I&amp;rsquo;ll have the honor of naming my AMD64 box.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The door hack</title>
      <link>https://err.no/personal/blog/tech/2004-03-16-01-28_doorhack/</link>
      <pubDate>Tue, 16 Mar 2004 01:28:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-03-16-01-28_doorhack/</guid>
      <description>&lt;p&gt;The evening was well spent.  A friend came over and helped build a
project we&amp;rsquo;ve been talking a lot about at Samfundet: an interface for
opening the door from a computer.  Naturally, we had to connect this
to an IRC bot, so now we can open the door by saying &amp;ldquo;dør!&amp;rdquo;
(Norwegian for &amp;ldquo;door&amp;rdquo;) on IRC.  Not a very hard project, except we
wasted a bit of time with some wrongly sized resistors because of a
silly calculation error.&lt;/p&gt;
&lt;p&gt;The interface is a parallell cable connected to an optocoupler, whose
inputs are in parallell with a 220 Ohm resistor.  The output is
coupled directly to a wall knob which one can punch to open the door
as well.  (That&amp;rsquo;s the reason why we started the project in the first
place: we were too lazy to walk over and punch the button.)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Greylisting</title>
      <link>https://err.no/personal/blog/tech/debian/2004-03-14-15-55_greylisting/</link>
      <pubDate>Sun, 14 Mar 2004 15:55:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-03-14-15-55_greylisting/</guid>
      <description>&lt;p&gt;Some friends of mine were running about and saying nice things about
greylisting, so I decided to try it and see how it works out.  I
actually have a full in-exim-implementation now.  It would have been
cool if exim had some sort of db4 write support or something, but I&amp;rsquo;ve
gone with postgresql instead.  The implementation in exim is as
follows:&lt;/p&gt;
&lt;p&gt;In the main part, I have&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; GRAYLIST_TEST = SELECT CASE \
                  WHEN now() - block_expires &amp;gt; 0 THEN 2 \
                  ELSE 1 \
                 END \
                 FROM relaytofrom \
                 WHERE relay_ip=&amp;#39;${quote_pgsql:$sender_host_address}&amp;#39; \
                 AND from_domain=&amp;#39;${quote_pgsql:$sender_address_domain}&amp;#39;

 GRAYLIST_ADD  = INSERT INTO relaytofrom (relay_ip, from_domain) \
                 VALUES ( &amp;#39;${quote_mysql:$sender_host_address}&amp;#39;, \
                 &amp;#39;${quote_mysql:$sender_address_domain}&amp;#39;)

 hide pgsql_servers = localhost/greylisting/exim/password
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, in the DATA acl, I have&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  warn    set acl_m7 = ${lookup pgsql{GRAYLIST_TEST}{$value}{0}}

  defer   message = Greylisted - please try again a little later
          condition      = ${if eq{$acl_m7}{0}{1}}
          condition      = ${lookup pgsql{GRAYLIST_ADD}{yes}{no}}
  defer   condition      = ${if eq{$acl_m7}{1}{1}}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Why the data part, you may ask.  The reason is quite simple, I don&amp;rsquo;t
want to break callouts at all.  Also, this server is on 100MBit so I
don&amp;rsquo;t care about any wasted bandwidth.&lt;/p&gt;
&lt;p&gt;The table definition is fairly simple:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;create&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; relaytofrom
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        id              serial,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        relay_ip        inet,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        from_domain     varchar(&lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt;), 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        block_expires   &lt;span style=&#34;color:#66d9ef&#34;&gt;timestamp&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt; now()&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;(interval &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;60 seconds&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        record_expires  &lt;span style=&#34;color:#66d9ef&#34;&gt;timestamp&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt; now()&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;(interval &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1 week&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        origin_type     varchar(&lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;DEFAULT&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;AUTO&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#66d9ef&#34;&gt;CHECK&lt;/span&gt; (origin_type &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;MANUAL&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;AUTO&amp;#39;&lt;/span&gt;)) &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        create_time     &lt;span style=&#34;color:#66d9ef&#34;&gt;timestamp&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt; now() &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hope this helps somebody to get a little less spam.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>sync-dotfiles-repos</title>
      <link>https://err.no/personal/blog/tech/2004-03-09-09-41_sync-dotfiles-repos/</link>
      <pubDate>Tue, 09 Mar 2004 09:41:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-03-09-09-41_sync-dotfiles-repos/</guid>
      <description>&lt;p&gt;By popular demand, I&amp;rsquo;m just including my &lt;code&gt;sync-dotfiles-repos&lt;/code&gt;, aka
&lt;code&gt;svn2cvs&lt;/code&gt; script here.  I hope it&amp;rsquo;s useful for somebody, and comments
and patches are appreciated.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#! /bin/sh -e&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#exec &amp;gt; /tmp/commit.log  2&amp;gt;&amp;amp;1 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; HOME&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/home/tfheen
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; CVSROOT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$HOME&lt;span style=&#34;color:#e6db74&#34;&gt;/cvsroot&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; SVNROOT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$HOME&lt;span style=&#34;color:#e6db74&#34;&gt;/svn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; TMPDIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;tempfile --prefix syncdotfiles&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; rm -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$TMPDIR&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; mkdir $TMPDIR
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; cd $TMPDIR
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# ok, now we are fairly safe.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; cvs -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$CVSROOT&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; co dotfiles
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; svn export --force file://$SVNROOT/trunk/dotfiles
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; cd dotfiles
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; file in &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;find -type f -not -path &lt;span style=&#34;color:#ae81ff&#34;&gt;\*&lt;/span&gt;CVS&lt;span style=&#34;color:#ae81ff&#34;&gt;\*&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     FILE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;basename $file&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     DIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;dirname $file&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! grep -q &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^/&lt;/span&gt;$FILE&lt;span style=&#34;color:#e6db74&#34;&gt;/&amp;#34;&lt;/span&gt; $DIR/CVS/Entries ; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         cvs add $file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; cvs commit -m&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Automatic commit from SVN&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; rm -rf $TMPDIR
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Dirtyness and networks</title>
      <link>https://err.no/personal/blog/tech/2004-03-06-18-53_network_crawling/</link>
      <pubDate>Sat, 06 Mar 2004 18:53:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-03-06-18-53_network_crawling/</guid>
      <description>&lt;p&gt;Most of the day was spent crawling around inside the student society.
Inside, as in, beneath floors, inside walls and on top of ceilings.
We were of course wiring the student society, one of the last areas is
now finally switching from 10Base-2 (thin ethernet, coax) to a 100Mbit
switched TP infrastructure.  Tiring, but fun nonetheless.  Those areas
haven&amp;rsquo;t seen anything resembling cleaning equipment in about a hundred
years (when the society was built), so we ended up quite dirty.&lt;/p&gt;
&lt;p&gt;Looking forward to the concert tonight, if I manage to stay awake,
since I&amp;rsquo;ve only slept three hours last night.  It&amp;rsquo;s hard to stay up
partying. :)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>New multiarch proposal</title>
      <link>https://err.no/personal/blog/tech/debian/2004-02-25-01-32_multiarch/</link>
      <pubDate>Wed, 25 Feb 2004 01:32:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-02-25-01-32_multiarch/</guid>
      <description>&lt;p&gt;Finally got around to writing up a new &lt;a href=&#34;http://err.no/debian/amd64-multiarch-2&#34;&gt;multiarch
proposal&lt;/a&gt;.  Of course, it
caused a lot of debate on #debian-devel, but that was just as
expected.  Comments are of course welcome&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>SVN with mod_dav</title>
      <link>https://err.no/personal/blog/tech/2004-02-16-14-45_svn_dav/</link>
      <pubDate>Mon, 16 Feb 2004 14:45:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-02-16-14-45_svn_dav/</guid>
      <description>&lt;p&gt;I actually got around to setting up SVN with mod_dav today.  Apart
from the fact that OpenSSL is a piece of shit and causes problems if
you have non-ASCII characters in any of the fields.  It seems to work
fine, even commits over HTTP.  Feels a bit weird, though.&lt;/p&gt;
&lt;p&gt;By the way: Gentoo sucks.  Error messages are overrated and I want to
install Debian on this box.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PyBlosxom and textile plugin weirdness</title>
      <link>https://err.no/personal/blog/tech/2004-02-16-00-03_pybloxsom_textile/</link>
      <pubDate>Mon, 16 Feb 2004 00:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-02-16-00-03_pybloxsom_textile/</guid>
      <description>&lt;p&gt;Just discovered something a bit weird.  Or, perhaps not very weird,
but I got a little bit confused.  Textile supports &lt;code&gt;pre&lt;/code&gt; tags just
fine.  It&amp;rsquo;s just that the plugin reflows the text if it doesn&amp;rsquo;t start
with a space.  So, in order to actually get preformatted text, I have
to both use &lt;code&gt;pre&lt;/code&gt; and a leading space.  Weird.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>DELAYED queue and Mailman hacking</title>
      <link>https://err.no/personal/blog/tech/debian/2004-02-15-23-50_delayed_queue_and_mailman/</link>
      <pubDate>Sun, 15 Feb 2004 23:50:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-02-15-23-50_delayed_queue_and_mailman/</guid>
      <description>&lt;p&gt;Got back home today and was a bit tired so instead of going dancing, I
decided to hack Mailman.  Moved the repository to Alioth, set things
up fairly ok (at least I think so) and converted the whole system to
dpatch.  Also created a mailing list so my co-maintainers will soon be
able to help out.&lt;/p&gt;
&lt;p&gt;Sesse asked about whether the DELAYED queue was fixed after the
break-in, which it, to the best of my knowledge isn&amp;rsquo;t.  So I hacked up
a small script to run as a DELAYED queue.  I think it works as well,
and there are already two NMUs in, so it&amp;rsquo;ll be nice to see if it works
and we can actually have a working DELAYED queue again.  It should be
possible to upload to it through something like:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; [tfheen_delayed]
 method = scp
 fqdn = gluck.debian.org
 incoming = ~tfheen
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;in dput.cf&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>pycategories filter</title>
      <link>https://err.no/personal/blog/tech/debian/2004-02-12-02-35_more_dotsvn/</link>
      <pubDate>Thu, 12 Feb 2004 02:35:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-02-12-02-35_more_dotsvn/</guid>
      <description>&lt;p&gt;Of course, I had to fix pycategories as well.  Fix is trivial&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; elist[:]:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.svn&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; i:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                elist&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;remove(i)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;just after the lines reading&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        elist &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; tools&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Walk(root)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        elist &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [mem[len(root):] &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; mem &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; elist]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>.svn directories showing up</title>
      <link>https://err.no/personal/blog/tech/debian/2004-02-12-02-23_dotsvn/</link>
      <pubDate>Thu, 12 Feb 2004 02:23:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-02-12-02-23_dotsvn/</guid>
      <description>&lt;p&gt;Of course, after converting my blog to SVN, it seems like pyblosxom
decided that traversing through all my .svn dirs was an excellent
idea.  I disagree, of course.  After finding out that the filter
plugin on Pyblosxom&amp;rsquo;s home page wasn&amp;rsquo;t there, I sat down and wrote my
own.  Fairly trivial and also hard-coded.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cb_prepare&lt;/span&gt;(args):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    request &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; args[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;getData()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; entry &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; data[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;entry_list&amp;#39;&lt;/span&gt;][:]:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        filename &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; entry&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;filename&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/.svn&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; filename:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            data[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;entry_list&amp;#39;&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;remove(entry)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s all that was needed.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>svn2cvs, dotfiles</title>
      <link>https://err.no/personal/blog/tech/2004-02-12-01-52_svn2cvs/</link>
      <pubDate>Thu, 12 Feb 2004 01:52:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-02-12-01-52_svn2cvs/</guid>
      <description>&lt;p&gt;SVN already has cvs2svn.  I needed something to do this the other way
around.  You probably think I&amp;rsquo;m crazy.  I&amp;rsquo;m not (at least not because
of this).  I already have the biggest part of my dotfiles in CVS and
have a working setup through joeyh&amp;rsquo;s
&lt;a href=&#34;http://www.kitenet.net/~joey/sshcvs/&#34;&gt;sshanoncvs&lt;/a&gt; which works fine.  I
want to play around with subversion, so I have converted my CVS
repository to SVN.  Howerver, my home directory is checked out on a
lot of boxes which don&amp;rsquo;t have any SVN client installed.  So, I rather
add a post-commit hook which updates my dotfiles each time I commit to
the SVN repository.  Quite neat.&lt;/p&gt;
&lt;p&gt;Once I get some sort of decent access controls set up for this, I&amp;rsquo;ll
just post a link to the script, but if you want a copy in the
meantime, just drop me a mail.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Plane tickets</title>
      <link>https://err.no/personal/blog/tech/debian/2004-02-09-04-39_plane_tickets/</link>
      <pubDate>Mon, 09 Feb 2004 04:39:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-02-09-04-39_plane_tickets/</guid>
      <description>&lt;p&gt;Got home from a party Sunday morning (at 0800, after a party), checked
my mail and there were my plane tickets.  Opensourceworldconference,
here I come!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hairy installation</title>
      <link>https://err.no/personal/blog/tech/2004-02-04-02-50_hairy_installation/</link>
      <pubDate>Wed, 04 Feb 2004 02:50:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-02-04-02-50_hairy_installation/</guid>
      <description>&lt;p&gt;I think I have done one of the most hairy installations of Debian ever
today.  The situation: a host with a MegaRAID card, remotely, behind a
firewall, to get Debian installed.  No serial console.&lt;/p&gt;
&lt;p&gt;First, you ssh through the firewall.  Then you ssh to a machine on the
internal network and run rdesktop to another internal server.  From
that rdesktop session, you run Internet Explorer and connect to the
internal management card on the machine to be installed and get a text
console through a Java applet.&lt;/p&gt;
&lt;p&gt;Ok, so now you have a connection to the machine to be installed.  It
has its Debian CD in the CD-ROM player.  Reboot the system, boot it,
using video=vga16:off, since the text console doesn&amp;rsquo;t handle the frame
buffer at all.  Once it&amp;rsquo;s up, we chose Norwegian keyboard.  Of course
the installer doesn&amp;rsquo;t find the megaraid card.  Out to a shell, and
because of the choosing of a Norwegian keyboard, / is nowhere to be
seen.  After searching a bit around and mounting /dev/hda at /dev/a we
did recover the slash.  So, after discovering that being able to
unpack the 5.7MB big drivers.tgz somewhere, we decide to reboot with a
different ramdisk_size.  64MB is good.&lt;/p&gt;
&lt;p&gt;So, reboot, repeat the procedure, though this time with American
keyboard instead, since it actually works (and is a norwegian
keyboard; something is clearly wrong somewhere, but sometimes two
wrongs make a right).  mkfs.ext2 /dev/ram1, mount it at /tmp2, unpack
/cdrom/dists/stable/main/disks/current/bf2.4/drivers.tgz to /tmp2,
unpack modules.tgz in there again, insmod the megaraid module (which
is in /tmp2/lib/modules/2.4.18-bf2.4/drivers/kernel/scsi/megaraid.o),
do the install.&lt;/p&gt;
&lt;p&gt;So far, so good, I thought.  Of course I was wrong.  The kernel
installed didn&amp;rsquo;t have initrd with the megaraid driver on, nor were it
compiled in, so back to square one: boot with huge ramdisk, unpack
drivers.tgz from the cd, unpack modules.tgz, insmod megaraid, mount
/dev/sda5 /target.  Then, chroot into /target, fix up sources.list,
install a kernel, make sure the lilo config is correct, then umount
everything and reboot again.  Woo, it works.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Productive day</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-30-15-00_uploads/</link>
      <pubDate>Fri, 30 Jan 2004 15:00:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-30-15-00_uploads/</guid>
      <description>&lt;p&gt;I overslept class today, so I decided to stay home and do some useful
work instead.  So, I managed to upload a new version of Mailman and
Apache2, this one seems a bit better than the last one, at
least svn still seems to work. Woo.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>No apache 2 upload today</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-29-23-17_apache2_upload/</link>
      <pubDate>Thu, 29 Jan 2004 23:17:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-29-23-17_apache2_upload/</guid>
      <description>&lt;p&gt;I was supposed to do an Apache 2 upload today, but due to work taking
a bit too much time, I ended up not having the time to do it.  Been
hacking apache all afternoon, though not the Debian part of it, just
configuring and fixing it up; it sure is a complex beast.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Upgrades, cleanups and other niceties</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-01-29-23-04_upgrades_cleanups/</link>
      <pubDate>Thu, 29 Jan 2004 23:04:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-01-29-23-04_upgrades_cleanups/</guid>
      <description>&lt;p&gt;Had a drift meeting on IRC where we discussed the crack of epsilon
last week.  Good to have everybody catch up.  After dinner, I upgraded
Advertpro and run the evil localhost proxy hack on the forum, which
should speed it up somewhat.  Also fixed up various other small
stuff.  Tired now.  Sleep.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Multiarch proposal</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-17-02-21_multiarch/</link>
      <pubDate>Sat, 17 Jan 2004 02:21:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-17-02-21_multiarch/</guid>
      <description>&lt;p&gt;Writing multiarch proposals seems to be this week&amp;rsquo;s most popular
sport.  I&amp;rsquo;ve written my own
&lt;a href=&#34;http://err.no/debian/amd64-multiarch&#34;&gt;proposal&lt;/a&gt;.  This one should
address most issues people have, without pissing off anybody too
much.  We need a was to say &amp;ldquo;this package depends on this package with
this architecture&amp;rdquo;, but apart from that, my proposal seems fairly
solid.  (At least nobody&amp;rsquo;s been able to really pick it apart yet.)  It
doesn&amp;rsquo;t attack my sense of aestetics either, unlike some of the other
proposals.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Replaced the ad system</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-01-15-16-53_ad_system/</link>
      <pubDate>Thu, 15 Jan 2004 16:53:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-01-15-16-53_ad_system/</guid>
      <description>&lt;p&gt;The ad system running on zeta.hardware.no was changed today from
Advertpro running under mod_perl to a Tomcat based Java system.  Seems
to work fine so far, though I seriously dislike Tomcat&amp;rsquo;s XML based
config files.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>spam and forwarding from @debian.org</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-15-16-47_spam/</link>
      <pubDate>Thu, 15 Jan 2004 16:47:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-15-16-47_spam/</guid>
      <description>&lt;p&gt;elmo prodded me on IRC that my mail host was refusing spam with a &amp;ldquo;550
Message classified as spam&amp;rdquo;.  While this is correct, it causes
double-bounces to go to &lt;a href=&#34;mailto:postmaster@debian.org&#34;&gt;postmaster@debian.org&lt;/a&gt;, which is
unintentional.  At &lt;a href=&#34;http://itk.samfundet.no/&#34;&gt;Samfundet&lt;/a&gt; we have a
setup which doesn&amp;rsquo;t bounce spam sent to lists, it just accepts it and
nullroutes it.  I don&amp;rsquo;t think that&amp;rsquo;s the right way, but it&amp;rsquo;s better
than annoying postmaster@debian with bounces.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m using exim4, and this is how I solved it.  I replaced my normal
spam-bounce rule:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;     deny message = This message was classified as SPAM
       spam = nobody:true
       condition = ${if &amp;gt;={$spam_score_int}{100}}{1}{0}}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;with:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;     deny message = This message was classified as SPAM
       spam = nobody:true
       condition = ${if and {\
                 {!match{$recipients}{tfheen@err.no}}\
                 {!match{$sender_address}{tfheen@debian.org}}\
                 {&amp;gt;={$spam_score_int}{100}}\
                 }{1}{0}}

     warn message = X-err-Devnull: spam
             log_message = Eaten by spam filter \
                         (score=$spam_score, req=10.0)
             spam = nobody
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In addition, a special router is needed; mine is called
&lt;code&gt;50_err_devnull&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# A special driver that redirect &amp;#34;X-err-Devnull&amp;#34;-ed mail (spam and
# virus sent to mailing lists, see the DATA ACLs) to /dev/null

err_devnull:
        driver = accept
        condition = ${if def:h_X-err-Devnull: {1}{0}}
        transport = devnull
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Finally, the devnull transport:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Archive the mail in /dev/null
devnull:
  debug_print = &amp;#34;T: devnull for $local_part@$domain&amp;#34;
  driver = appendfile
  file = /dev/null
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is a bit hard-coded and could probably be fixed a bit better, but
it seems to work fine for me, at least.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>chasing bugs on amd64</title>
      <link>https://err.no/personal/blog/tech/2004-01-15-00-51_amd64_linker_chasing/</link>
      <pubDate>Thu, 15 Jan 2004 00:51:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-15-00-51_amd64_linker_chasing/</guid>
      <description>&lt;p&gt;amd64 and multiarch seem to be the hot topic of the day.  I&amp;rsquo;ve been
trying to chase down something which I thought was a linker bug.  Of
course, it wasn&amp;rsquo;t a linker bug, it was a silly assumption somewhere in
gcc.  Or, at least I like to believe it is, since else it&amp;rsquo;s a bug
somewhere in my lib64c6 package.  Anyhow, lib64c6-dev and lib64c6 are
almost ready; there are always some bugs which creep in at the last
moment.  Upgrading gcc seemed to fix my problem compiling binaries.&lt;/p&gt;
&lt;p&gt;Most of my evening has been spent discussing how to do 64 bit packages
should be implemented.  The consensus seems to lean towards having
lib64foo and libfoo packages for amd64 and i386 respectively.  How to
fix the -dev package problem is yet to be decided.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>ipv6 finally working</title>
      <link>https://err.no/personal/blog/tech/2004-01-14-00-57_ipv6/</link>
      <pubDate>Wed, 14 Jan 2004 00:57:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-14-00-57_ipv6/</guid>
      <description>&lt;p&gt;I got tired of trying to fix my IPv6 tunnel broker, so I did a clever
hack instead.  On ip-up for my ppp0 (I&amp;rsquo;m running DSL with PPPoA,
probably one of the very few people in Norway doing that, but
nevermind), I ssh into the other tunnel point and set up the tunnel
through that.  After spending a few hours trying to get my gateway to
forward packets from my laptop through the gateway, I managed to lock
myself out of it.  After a little more fiddling it just worked.
Weird.  If I&amp;rsquo;m able to find a fcdsl module which works under 2.6, I&amp;rsquo;ll
try using that instead.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>stockticker with RSS feed</title>
      <link>https://err.no/personal/blog/tech/2004-01-13-11-27_tech/</link>
      <pubDate>Tue, 13 Jan 2004 11:27:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-13-11-27_tech/</guid>
      <description>&lt;p&gt;I got tired of spam from the xanadb.com RSS stockticker, so I rather
wrote my own, based around Finance::YahooQuote and XML::RSS.  To use,
point a RSS consumer at
&lt;a href=&#34;http://err.no/stockticker/?symbol=RHAT&amp;amp;symbol=LNUX&#34;&gt;http://err.no/stockticker/?symbol=RHAT&amp;amp;symbol=LNUX&lt;/a&gt; (or use any other
symbols, of course.  Or just use one). Seems to work fairly well,
feedback appreciated.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>sodipodi PNG export</title>
      <link>https://err.no/personal/blog/tech/2004-01-12-23-35_sodipodi/</link>
      <pubDate>Mon, 12 Jan 2004 23:35:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-12-23-35_sodipodi/</guid>
      <description>&lt;p&gt;Of course, after all my nice talk about
&lt;a href=&#34;http://sodipodi.sourceforge.net&#34;&gt;Sodipodi&lt;/a&gt;, I had to find some
errors.  It seems like the PNG export changes the value of my red.
#932822 was the original color, Sodipodi changed it to #832822.  I
have no idea why.  Anyhow, after a little bit of manual fiddling with
the gimp, the images are now ok.  I should learn how to script the
gimp so that I can do those things automatically.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>hacking logos, sodipodi</title>
      <link>https://err.no/personal/blog/tech/2004-01-12-22-10_hacking_logos/</link>
      <pubDate>Mon, 12 Jan 2004 22:10:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-12-22-10_hacking_logos/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.koffice.org/karbon/&#34;&gt;Karbon14&lt;/a&gt; is unstable, doesn&amp;rsquo;t save
what it says it does and is generally a pain in the ass.
&lt;a href=&#34;http://sodipodi.sourceforge.net&#34;&gt;Sodipodi&lt;/a&gt; on the other hands works
beautilly, is mostly stable, actually is able to save SVG and is
fairly ok to work with.  I&amp;rsquo;ve been fixing up the logos at samfundet,
New logo is at the bottom, to the left, old logo is to the right.  I
used &lt;a href=&#34;http://potrace.sf.net/&#34;&gt;potrace&lt;/a&gt; for tracing up the logo.
Potrace is soo nice to work with, much better than autotrace, in my
opiniong.  I ran into the PNG transparency bug in IE, which
&lt;a href=&#34;http://oskuro.net/~jordi/blog/freesoftware/css-ie-2004-01-12-18-50.html&#34;&gt;Oskuro&lt;/a&gt;
also complains about.  That bug, is annoying, and next time I&amp;rsquo;ll just
include the SVG in the web page.  (Not really, but that would be the
nice and real solution.)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://itk.samfundet.no/images/itkinside.png&#34; alt=&#34;New ITK logo&#34;&gt;,
&lt;img src=&#34;http://itk.samfundet.no/images/itkinside.old.png&#34; alt=&#34;Old ITK logo&#34;&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>gcc, glibc, amd64</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-11-02-56_hacking/</link>
      <pubDate>Sun, 11 Jan 2004 02:56:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-11-02-56_hacking/</guid>
      <description>&lt;p&gt;I don&amp;rsquo;t like gcc.  I don&amp;rsquo;t like glibc.  And I surely don&amp;rsquo;t like them
on amd64.  I&amp;rsquo;ve been trying to get an up-to-date biarch GCC built for
amd64.  This failed due to glibc (32 bit) not being biarch.  So I
started rebuilding glibc in biarch mode.  It killed first alfa, one of
the boxes at work (nothing critical, I was supposed to stress-test
it).  Then I killed ravel, one of the developer-accessible AMD64
machines.  This was of course due to a kernel bug, so after maswan
went out there and rebooted the machine, we got a new kernel
installed; this one seems fairly stable so far.  So, in order to
rebuild gcc so that I can test that the new glibc works, I&amp;rsquo;ll have to
rebuild glibc (32 bit), then gcc (biarch) then at last glibc (32 and
64 bit).  Fun, isn&amp;rsquo;t it?&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>pybloxsom, textile hack</title>
      <link>https://err.no/personal/blog/tech/2004-01-11-02-47_pyblosxom/</link>
      <pubDate>Sun, 11 Jan 2004 02:47:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-11-02-47_pyblosxom/</guid>
      <description>&lt;p&gt;Bah, in order for pybloxsom with the txtl backend to work somewhat
properly, one has to fix the &lt;code&gt;txtl.py:cb_preformat&lt;/code&gt; definition to
something like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cb_preformat&lt;/span&gt;(args):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; args[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;parser&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; PREFORMATTER_ID &lt;span style=&#34;color:#f92672&#34;&gt;and&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           args[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;request&amp;#39;&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;getData()[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;flavour&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;html&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; parse(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join(args[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;story&amp;#39;&lt;/span&gt;]))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join(args[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;story&amp;#39;&lt;/span&gt;])&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;replace(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;amp;amp;amp;&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;amp;amp;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will make the RSS feed work properly.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>planet.debian.net</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-10-02-08_planetdebian/</link>
      <pubDate>Sat, 10 Jan 2004 02:08:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-10-02-08_planetdebian/</guid>
      <description>&lt;p&gt;It seems like prodding elmo on IRC the other day helped;
&lt;a href=&#34;http://planet.debian.net/&#34;&gt;http://planet.debian.net/&lt;/a&gt; now works.  Keybuk moved the code from
gluck to my local server, which should be just as good, and not
require the ugly proxy hack which were there in the beginning.  I
haven&amp;rsquo;t been able to fix mailman yet, but hoping to fix that tomorrow.&lt;/p&gt;
&lt;p&gt;Also, remember that 2004-01-04 13:37:04 UTC is 2^30 seconds since the
epoch.  Find (or make) a party and celebrate. :)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Upgrading kernels.</title>
      <link>https://err.no/personal/blog/tech/2004-01-10-02-03_kernel_upgrades/</link>
      <pubDate>Sat, 10 Jan 2004 02:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-10-02-03_kernel_upgrades/</guid>
      <description>&lt;p&gt;The last of the workstations at the student house is now rebooting
with 2.6.1, so they should be safe from local exploits.  At least the
remap one.  I really, really need a better way to do this, cfengine
and some custom addition to make it possible to tell cfengine that
&amp;ldquo;this is the minimum set of packages that are to be installed&amp;rdquo; would
be nice; I wonder if debsync can be used.&lt;/p&gt;
&lt;p&gt;While upgrading, I discovered a bunch of other, related problems, like
system users which aren&amp;rsquo;t present on the workstations (because
/etc/passwd and /etc/group are both rdisted), we need to get rid of
the silly 15MB /boot on some of the boxes, get rid of ide-scsi and
similar stuff.&lt;/p&gt;
&lt;p&gt;I also did the discovery that the k7 kernel wasn&amp;rsquo;t too
happy on an i686; X refused to start.  At least, I thought it was
because of the wrong arch.  Later, I discovered that psmouse isn&amp;rsquo;t
enough to get mouse working, one need the mousedev module as well.
I&amp;rsquo;m looking forward to discover 2.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>compiling stuff</title>
      <link>https://err.no/personal/blog/tech/2004-01-08-22-11_compilations/</link>
      <pubDate>Thu, 08 Jan 2004 22:11:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-08-22-11_compilations/</guid>
      <description>&lt;p&gt;It feels like I&amp;rsquo;ve been compiling stuff for the last week.  Of course,
most of it has been kernels after the recent compromise.  Kernels,
modules, that sort of stuff.  In addition, I&amp;rsquo;ve been trying to fix the
glibc trouble on amd64 properly.  Of course, it didn&amp;rsquo;t work.  I&amp;rsquo;m
tired of compiling and fixing computers, but they do get a bit more
usable once everything is properly set up and fixed.  I don&amp;rsquo;t
understand people who like gentoo.  Compiling sucks, the computer is
never fast enough.  Especially not when the computer is my 350MHz PII
router.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>backend parser (wikilike)</title>
      <link>https://err.no/personal/blog/tech/2004-01-08-02-33_backend/</link>
      <pubDate>Thu, 08 Jan 2004 02:33:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-08-02-33_backend/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve finally settled on a backend for pyblosxom which only sucks a
little: Textile.  Fairly easy, wiki-like markup.  I don&amp;rsquo;t like that it
by default breaks with &amp;amp;lt;br&amp;amp;gt;, but that was fairly easy to
change, so I&amp;rsquo;ll stick with this for the time being at least.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s one item ticked off my TODO list.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>AMD64 64 bit glibc fixed (hopefully)</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-08-01-49_amd64_glibc/</link>
      <pubDate>Thu, 08 Jan 2004 01:49:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-08-01-49_amd64_glibc/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve now cleaned up the patch for building the 64 bit amd64 glibc.  It
should be fine and work well, but since it haven&amp;rsquo;t built yet, I don&amp;rsquo;t
know that for sure.  Thanks to Snow-Man for testing the package for
me, and also big thanks to maswan for helping me out when my AMD64 box
is 500 kms away and powered off on a desk.  He also let me have root
to test the packages and didn&amp;rsquo;t go mad when I had to break out of the
chroot to install a package.  Once the libc is properly fixed, a lot
of the packages which were uninstallable in sid should now be fine.
The next target is gcc, since the biarch gcc on alioth is getting a
little old.  Yay AMD64.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>moving stuff, cleaning and such</title>
      <link>https://err.no/personal/blog/tech/2004-01-07-22-21_today/</link>
      <pubDate>Wed, 07 Jan 2004 22:21:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/2004-01-07-22-21_today/</guid>
      <description>&lt;p&gt;Since my blog is still fairly new, it&amp;rsquo;s a little bit in flux.  I&amp;rsquo;ve
moved Debian from / to /tech, and trying to put some non-Debian tech
pieces in there.  Thanks to Apache&amp;rsquo;s nice RedirectMatch support, it
was just one line in a .htaccess file.  I&amp;rsquo;m not sure if that&amp;rsquo;ll scale
if I continue moving stuff around, but I hope so.  I am of the firm
belief that URLs which are published and not clearly temporary
(includes /tmp or /temporary or something) should be valid for as long
as possible, even when it&amp;rsquo;s painful to maintain it.&lt;/p&gt;
&lt;p&gt;I think I need some better formatter for pybloxsom; writing HTML isn&amp;rsquo;t
my style, but the wikiparser sucks.  I guess I&amp;rsquo;ll take a look at the
other offerings before I&amp;rsquo;ll look at writing my own.  I&amp;rsquo;m trying to
structure myself a little bit and possibly make pyblosxom into
something of a personal portal or something, but also interesting and
usable for other people.  Not sure how it&amp;rsquo;ll work out, but I&amp;rsquo;ll give
it a shot.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>genericwiki sucks.</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-06-05-43_genericwiki/</link>
      <pubDate>Tue, 06 Jan 2004 05:43:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-06-05-43_genericwiki/</guid>
      <description>&lt;p&gt;The genericwiki module in pybloxsom sucks.  It doesn&amp;rsquo;t have bulleted
lists, for instance, and adding them is not something which I feel
like doing at this time of the day.  I should probably just sit down
and write my own wikiparser, probably based off the CVSWiki parser,
which I find mostly sane (not so surprising, since it&amp;rsquo;s made by my
friend &lt;a href=&#34;http://sesse.net&#34;&gt;Sesse&lt;/a&gt;, who mostly makes sane or at least
non-insane software.  Apart from stuff like adding an IRC frontend to
my mailing list manager and such, that is.).&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;d be nice to have smileys replaced with some image tags and such
also.  Another day, I guess.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>iota fixed</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-01-06-04-25_iota/</link>
      <pubDate>Tue, 06 Jan 2004 04:25:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-01-06-04-25_iota/</guid>
      <description>&lt;p&gt;Tor Henning fixed up iota; the problem was related to some people not
having any mail addresses.  This caused InnovisionBoard to freak out,
it seems.  So, removed that issue, at least, even though it&amp;rsquo;s not I
who have done it.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>yay, todolist now working.</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-05-05-00_todolist/</link>
      <pubDate>Mon, 05 Jan 2004 05:00:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-05-05-00_todolist/</guid>
      <description>&lt;p&gt;this is kinda cool, if you take a look at &lt;a href=&#34;http://err.no/personal/blog/Debian&#34;&gt;my
blog&lt;/a&gt;, you&amp;rsquo;ll see the todo list at
the right side.  This is just hacked together from the booklist (which
I also fixed so that I can have different book lists in different
categories).  I think I like pyblosxom.  As soon as the code is
cleaned up a little bit, I&amp;rsquo;ll post it.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>benchmarks, benchmarks</title>
      <link>https://err.no/personal/blog/work/hardware.no/2004-01-05-03-15_benchmarking/</link>
      <pubDate>Mon, 05 Jan 2004 03:15:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/work/hardware.no/2004-01-05-03-15_benchmarking/</guid>
      <description>&lt;p&gt;#parser textile
I&amp;rsquo;m considering the following list of benchmarks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;price guide update&lt;/li&gt;
&lt;li&gt;lame/oggenc&lt;/li&gt;
&lt;li&gt;mencoder/transcode&lt;/li&gt;
&lt;li&gt;apachebench&lt;/li&gt;
&lt;li&gt;spamassassin, sa-learn&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.mersenne.org/freeware.htm&#34;&gt;Mersenne primes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those should make the system churn a bit, and also be typical of some
things you&amp;rsquo;ll actually do with a system, in production.  Will be fun.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>nifty devices/programs somebody should write and implement</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-04-21-22_nifty_devices/</link>
      <pubDate>Sun, 04 Jan 2004 21:22:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-04-21-22_nifty_devices/</guid>
      <description>&lt;p&gt;When out biking today, I thought of a few programs which would be
immensely useful (and not so much):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;thought recorder.  How often haven&amp;rsquo;t you had a brilliant idea or
something you must remember, but once you get somewhere you&amp;rsquo;ll be able
to write it down, you&amp;rsquo;ve forgotten?&lt;/li&gt;
&lt;li&gt;a good bandwidth shaper.  I want to be able to: throttle one flow
(one of my connections might be an rsync over ssh.  That does not mean
you should throttle all my other ssh connections as well) and throttle
one &amp;ldquo;class&amp;rdquo; (say, throttle all HTTP traffic)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, this list is missing at least five items, because I
don&amp;rsquo;t have the first item.  And, as an added bonus, I&amp;rsquo;ve begun
thinking in English instead of Norwegian for the last day or so.
Annoying, but I guess it&amp;rsquo;ll pass once I&amp;rsquo;m back at the university or
something.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>32bit glibc trouble worked around</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-04-04-32_32bit_amd64_solved/</link>
      <pubDate>Sun, 04 Jan 2004 04:32:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-04-04-32_32bit_amd64_solved/</guid>
      <description>&lt;p&gt;The problem with the 32bit glibc on 64bit AMD64 can be worked around
fairly easily.  The problem seems somehow connected to the optimized
libraries placed in /lib/tls.  The workaround is to just move /lib/tls
out of the way, and hey presto: glibc works again.  Of course, this is
just a workaround, but it&amp;rsquo;ll do for now.  I&amp;rsquo;ll give the lib64c6 some
attention and upload it to Alioth once Alioth is back on line.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>yay setup, yay cvs</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-04-03-45_setup/</link>
      <pubDate>Sun, 04 Jan 2004 03:45:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-04-03-45_setup/</guid>
      <description>&lt;p&gt;I have my $HOME in CVS, as joeyh has described on
&lt;a href=&#34;http://kitenet.net/~joey/sshcvs/&#34;&gt;anoncvs-over-cvs&lt;/a&gt; and
&lt;a href=&#34;http://kitenet.net/~joey/cvshome.html&#34;&gt;cvshomedir&lt;/a&gt;.  I also check it
out onto the &lt;a href=&#34;https://err.no/personal/dotfiles&#34;&gt;web&lt;/a&gt;.  Quite nice and convenient.  Now I&amp;rsquo;ve
also gotten the weblogging software set up; quite ok once Oskuro told
me about the fact that the version in unstable is old and broken, and
that there is a newer version in experimental.&lt;/p&gt;
&lt;p&gt;I think I might want some better way of autolinking stuff I&amp;rsquo;m writing,
but so far, I&amp;rsquo;m sticking with the plain frontend.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>borkenness.</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-04-00-25_borkenness/</link>
      <pubDate>Sun, 04 Jan 2004 00:25:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-04-00-25_borkenness/</guid>
      <description>&lt;p&gt;You just love it when you have a spare system that you might be able
to use to build glibc and it just dies?  Nice MP2600+, dual CPU and
everything. &lt;em&gt;splat&lt;/em&gt;.  Dead.  No reaction from ping, nothing.  It
sucks.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Working, but not.</title>
      <link>https://err.no/personal/blog/tech/debian/2004-01-03-23-03_amd64-glibc/</link>
      <pubDate>Sat, 03 Jan 2004 23:03:00 +0100</pubDate>
      <author>tfheen@err.no (Tollef Fog Heen)</author>
      <guid>https://err.no/personal/blog/tech/debian/2004-01-03-23-03_amd64-glibc/</guid>
      <description>&lt;p&gt;ok, got the amd64 to build, using a fairly ok-ish patch.  Problem with
32 bit libc6 and amd64 seems to be related to the ds1 repackaging (and
resyncing with upstream CVS).  The joy of trying to wade through a 89k
line patch trying to pinpoint what the problem is.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
