<?xml version="1.0"?>
<!-- name="generator" content="blosxom/2.0" -->
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
  <channel>
    <title>indolence log   </title>
    <link>http://azure.humbug.org.au/~aj/blog</link>
    <description>Anthony Towns' blog.</description>
    <language>en</language>

  <item>
    <title>Nosce te ipsum</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/06/17#2008-06-17-nosce-te-ipsum</link>
    <description>
&lt;p&gt;(Alternative title: &lt;a href=&quot;http://en.wikipedia.org/wiki/Lords_and_Ladies_(novel)&quot;&gt;I aten&amp;#8217;t dead&lt;/a&gt;)

&lt;p&gt;My name&amp;#8217;s Anthony and, like a lot of other people, I suffer from
depression. It&amp;#8217;s not something I like to talk about &amp;#8211; my normal
philosophy is just to filter out that part of my life and just talk and
think about the interesting and fun parts of life. The downside is that
when it gets particularly bad, everything gets filtered out and I more
or less just vanish.

&lt;p&gt;&lt;a href=&quot;http://azure.humbug.org.au/~aj/blog/2008/06/17?seemore=y#2008-06-17-nosce-te-ipsum&quot; class=&quot;seemore&quot;&gt;Read the rest ...&lt;/a&gt;&lt;/p&gt;
</description>
    <pubDate>Tue, 17 Jun 2008 15:13:00 +1000</pubDate>
  </item>
  <item>
    <title>Inflation</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/05/12#2008-05-12-inflation</link>
    <description>
&lt;p&gt;There&amp;#8217;s been a few major issues lately where inflation and central
banks have been key elements: Zimbabwe&amp;#8217;s collapse under Mugabe, the
recent Australian Federal election, and the US sub-prime mortgage crisis.
What I find fascinating is that it all seems to be treated as an absolute
black art by almost everyone, in spite of economics supposedly being
reasonably well understood these days.

&lt;p&gt;It&amp;#8217;s particularly weird, because at a fundamental level, inflation
is absolutely trivial to deal with: if you don&amp;#8217;t want inflation,
stop printing more money; if you want to print more money, you&amp;#8217;ll get
inflation. Tin-pot dictators like Mugabe can&amp;#8217;t manage that fairly simple
recipe because it&amp;#8217;s the only way they can ensure they have more money (and
thus control) than their subjects &amp;#8211; since they don&amp;#8217;t create anything
of value themselves no one gives them money by choce, and since they
run their country into the ground, tax revenues don&amp;#8217;t work well enough,
leaving printing more money as the only way to replace whatever they&amp;#8217;ve
just wasted.

&lt;p&gt;&lt;a href=&quot;http://azure.humbug.org.au/~aj/blog/2008/05/12?seemore=y#2008-05-12-inflation&quot; class=&quot;seemore&quot;&gt;Read the rest ...&lt;/a&gt;&lt;/p&gt;
</description>
    <pubDate>Mon, 12 May 2008 18:02:00 +1000</pubDate>
  </item>
  <item>
    <title>On freedom</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/04/18#2008-04-18-on-freedom</link>
    <description>
&lt;p&gt;One of the freedoms I value is the freedom to choose what you spend
your time on and who you spend it with. And while I&amp;#8217;ve spent a lot of
time arguing that people in key roles in Debian still have those freedoms
(hey, &lt;a href=&quot;http://www.debian.org/devel/constitution#2&quot;&gt;2.1(1)&lt;/a&gt;, don&amp;#8217;t you know), reality these days seems to
be &lt;a href=&quot;http://lists.debian.org/debian-devel-announce/2008/04/msg00007.html&quot;&gt;otherwise&lt;/a&gt;. But hey, solving that quandry just requires a mail
to DSA.

&lt;p&gt;To folks on the core teams I&amp;#8217;ve been involved with: it&amp;#8217;s been a
pleasure and an honour working with you; if not always, at least mostly.
Best of luck, and I hope y&amp;#8217;all accept patches.


</description>
    <pubDate>Fri, 18 Apr 2008 17:46:00 +1000</pubDate>
  </item>
  <item>
    <title>Jigdo Downloads</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/04/15#2008-04-15-jigdodl</link>
    <description>
&lt;p&gt;Last month we had a &lt;a href=&quot;http://lists.debian.org/debian-devel/2008/03/msg00540.html&quot;&gt;brief discussion&lt;/a&gt; on debian-devel about
what images would be good to have for lenny &amp;#8211; we&amp;#8217;re apparently up to
about 30 CDs or 4 DVDs per architecture, which over 12 architectures
adds to about 430GB in total. That&amp;#8217;s a lot, given it&amp;#8217;s only one release,
and meanwhile the entire Debian archive is only 324GB.

&lt;p&gt;The obvious way to avoid that is to make use of jigdo &amp;#8211; which lets
you recreate an iso from a small template and the existing Debian mirror
network. I&amp;#8217;ve personally never used jigdo much, half because I don&amp;#8217;t
usually use isos anyway, but also because the few times I have tried
jigdo it always seemed really unnecessarily slow. So the other day I
tried writing my own jigdo download tool focussed on making sure it was
as fast as possible.

&lt;p&gt;The official jigdo download tool, ttbomk, is jigdo-lite &amp;#8211; which you
give a .jigdo file, and the url of a local mirror. It then downloads the
first ten files using wget, and once they&amp;#8217;re all downloaded, it calls
jigdo-file to get them merged into the output image. This gets repeated
until all the files have been downloaded.

&lt;p&gt;By doing the download in sequence like this, you miss out on using
your full network connection in two ways: one during the connection
setup latency when starting to download the next package, and also while
jigdo-lite stops downloading to run jigdo-file. And if you&amp;#8217;ve got a fast
download link, but a slower CPU or disk, you can also find yourself
constrained in that you&amp;#8217;re maxing those out while running jigdo-file,
but leaving them more or less idle while downloading.

&lt;p&gt;To avoid this, you want to do multiple things at once: most
importantly, to be writing data to the image at the same time as you&amp;#8217;re
downloading more data. With jigdodl (the name I&amp;#8217;ve given to my little
program), I went a little bit overboard, and made it not only do that,
but also manage four downloads and the decompression of the raw data
from the template. That&amp;#8217;s partly due to not being entirely sure what
needed to be done to get a speedy jigdo program, and partly because the
&lt;a href=&quot;http://azure.humbug.org.au/~aj/blog/2008/04/10#2008-04-10-select-and-generators&quot;&gt;communicate&lt;/a&gt; module I&amp;#8217;d just written to deal with this sort of
parallelism making that somewhat natural.

&lt;p&gt;In the end, it works: from wireless over ADSL to my ISP&amp;#8217;s Debian
mirror, I get the following output:

&lt;blockquote&gt;
&lt;pre&gt;Jigsaw download:
  Filename: debian-40r3-amd64-CD-1.iso
  Length:   675477504
  MD5sum:   d3924cdaceeb6a3706a6e2136e5cfab2
Total: 679 s; d/l: 586 MB at 883 kB/s; dump: 57 MB at 57 MB/s          

Finished!&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;which is only slightly short of maxing out my downstream bandwidth,
taking a total of about 11m20s. Running jigdodl with a closer mirror
works pretty well too, though evidently some of my more recent changes
weren&amp;#8217;t so great, because I&amp;#8217;ve gone from 9153 kB/s on a 100 Mbps link
down to 7131 kB/s or lower. The CPU usage also seems a bit high, hovering
at between five to ten percent at 900 kB/s.

&lt;p&gt;For comparison, running jigdo-lite on the same file took 17m41s, which
is about 566 kB/s, with the overhead being about 6m20s. What that means is
if I doubled my bandwidth to about 20Mbps, jigdodl would halve its time
for the download to about 5m50s, while jigdo-lite would still have about
the same non-download overhead, and thus take 12m10, which is still 69%
of its original speed. Going from 10Mbps ADSL speed to 100Mbps LAN gets
jigdodl down to 1m31s (13% of the time, with optimal being 10%), while
jigdo-lite would be expected to still be about 7m51s (43% of its original
time).

&lt;p&gt;I suspect the next thing to do is to rewrite the downloading code to
use python-curl instead of running curl, and thus downloading multiple
files with a single connection, and tweaking the code so that it writes
the file in order, rather than updating whichever parts are ready first.

&lt;p&gt;Anyway, debs are &lt;a href=&quot;http://azure.humbug.org.au/~aj/jigdodl/&quot;&gt;available&lt;/a&gt; for anyone who wants to try it out,
along with source in the new git source package format.

</description>
    <pubDate>Tue, 15 Apr 2008 23:53:00 +1000</pubDate>
  </item>
  <item>
    <title>A New DPL...</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/04/15#2008-04-15-changes</link>
    <description>
&lt;p&gt;In a couple of days, &lt;a href=&quot;http://blog.einval.com/2008/04/13&quot;&gt;DPL-elect&lt;/a&gt; &lt;a href=&quot;http://www.debian.org/vote/2008/platforms/93sam&quot;&gt;Steve McIntyre&lt;/a&gt; takes
over as DPL, after being elected by around four hundred of his peers&amp;#8230;
Because I can&amp;#8217;t help myself, I thought I might poke at election numbers
and see if anything interesting fell out.

&lt;p&gt;First the basics: I get the same results as the official ones when
recounting the vote. Using first-past-the-post, Steve wins with 147
first preference votes against Raphael&amp;#8217;s 124, Marc&amp;#8217;s 90 and NOTA&amp;#8217;s 19
(with votes that specify a tie for first dropped). Using instant-runoff /
single transferable vote, the winner is also Steve, with NOTA elimited
first and Marc collecting collecting 5 votes, Steve 4 and Raphael 2,
followed by Marc getting eliminated with Steve collecting 50 votes,
against Raphael&amp;#8217;s 26. 

&lt;p&gt;So, as usual, different voting systems would have given the same
result, presuming people voted in basically the same way.

&lt;p&gt;NOTA really didn&amp;#8217;t fare well at all in this election, with a majority
of voters ranking it beneath all candidates (268 of 401, 53.5%). For
comparison, only 18 voters ranked all candidates beneath NOTA, with 9
of those voters then ranking all candidates equally. (For comparison,
in 2007, 312 of 482 voters (about 65%) ranked some candidate below NOTA,
though that drops to 225 voters (47%) if you ignore voters that just
left some candidates unranked. Only 98 voters (20%) voted every candidate
above NOTA)

&lt;p&gt;With NOTA excluded from consideration, things simplify considerably,
with only 13 possible different votes remaining. Those come in four
categories: ranking everyone equal (17 votes, 9 below NOTA as mentioned
above, and 8 above NOTA), ranking one candidate below the others (13
votes total, 7 ranking Raphael last, 3 each for Steve and Marc), ranking
one candidate above the others (66 votes; 30 ranking Steve first, 18 each
ranking Raphael and Marc first), and the remainder with full preferences
between the candidates:

&lt;blockquote&gt;&lt;pre&gt;
     70 V: 213
     63 V: 123
     56 V: 132
     52 V: 231
     38 V: 312
     26 V: 321
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;The most interesting aspect of that I can see is that of the people
who ranked Raphael first, there was a 1.8:1 split in preferring Steve
to Marc, and for those who preferred Marc first, there was a 2:1 split
preferring Steve to Raphael. For those who preferred Steve, there was
only a 1.1:1 split favouring Raphael over Marc.

&lt;p&gt;I think it&amp;#8217;s fair to infer from that that not only was Steve the
preferred candidate overall, but that he&amp;#8217;s considered a good compromise
canidate for supporters of both the alternative candidates (though
if all the people who ended up supporting Steve hadn&amp;#8217;t been voting,
Raphael would have won by something like 26 votes (129:103) with a 1.25:1
majority; if they had been voting, but Steve hadn&amp;#8217;t been a candidate,
Raphael&amp;#8217;s margin would&amp;#8217;ve increased absolutely to 33 votes (192:159)
but decreased in ratio to a 1:1.2 majority.

</description>
    <pubDate>Tue, 15 Apr 2008 15:53:00 +1000</pubDate>
  </item>
  <item>
    <title>Select and Python Generators</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/04/10#2008-04-10-select-and-generators</link>
    <description>
&lt;p&gt;One of the loveliest things about Unix is the select() function (or
its replacement, poll()), and the way it lets a single thread handle a
host of concurrent tasks efficiently by just using file descriptors as
work queues.

&lt;p&gt;Unfortunately, it can be a nuisance to use &amp;#8211; you end up having to
structure your program as a state machine around the select() invocation,
rather than the actual procedure you want to have happen. You can avoid that
by not using select() and instead just having a separate thread/process for
every task you want to do &amp;#8211; but that creates a bunch of tedious overhead
for the OS (and admin) to worry about.

&lt;p&gt;But magically making state machines is what Python&amp;#8217;s generators are
all about; so for my little pet project that involves forking a bunch
of subprocesses to do the interesting computational work my python program
wants done, I thought I&amp;#8217;d see if I could use that to make my code more
obvious.

&lt;p&gt;What I want to achieve is to have a bunch of subprocesses accepting
some setup data, then a bunch of two byte ids, terminated by two bytes
of 0xFF, and for each of the two byte inputs to output a line of text
giving the calculation result. For the time being at least, I want the
IO to be asynchronous: so I&amp;#8217;ll give it as many inputs as I can, rather
than waiting for the result before sending the next input.

&lt;p&gt;So basically, I want to write something like:

&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
def send_inputs(f, s, n):
	f.write(s) # write setup data
	for i in xrange(n):
		f.write(struct.pack(&quot;!H&quot;, i))
	f.write(struct.pack(&quot;!H&quot;, 0xFFFF))

def read_output(f):
	for line in f:
		if is_interesting(line):
			print line
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Except of course, that doesn&amp;#8217;t work directly because writing some data
or reading a line can block, and when it does, I want it to be doing
something else (reading instead of writing or vice-versa, or paying
attention to another process).

&lt;p&gt;Generators are the way to do that in Python, with the &amp;#8220;yield&amp;#8221; keyword
passing control flow and some information back somewhere else, so adopting
the theory that: (a) I&amp;#8217;ll only resume from a &amp;#8220;yield&amp;#8221; when it&amp;#8217;s okay to
write some more data, (b) if I &amp;#8220;yield None&amp;#8221; there&amp;#8217;s probably no point
coming back to me unless you&amp;#8217;ve got some more data for me to read, and
(c) I&amp;#8217;ll provide a single parameter which is an iterator that will give me
input when it&amp;#8217;s available and None when it&amp;#8217;s not, I can code the above as:

&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
def send_inputs(_):
	# s, n declared in enclosing scope
	yield s
	for i in xrange(n):
		yield struct.pack(&quot;!H&quot;, i))
	yield struct.pack(&quot;!H&quot;, 0xFFFF)

def read_output(f):
	for line in f:
		if line is None: yield None; continue
		if is_interesting(line):
			print line
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;There&amp;#8217;s a few complications there. For one, I could be yielding more
data than can actually be written, so I might want to buffer there to
avoid blocking. (I haven&amp;#8217;t bothered; just as I haven&amp;#8217;t worried about
&amp;#8220;print&amp;#8221; possibly blocking) Likewise, I might only receive part of a line,
or I might receive more than one line at once, and afaics a buffer there
is unavoidable. If I were doing fixed size reads (instead of line at a
time), that might be different.

&lt;p&gt;So far, the above seems pretty pleasant to me &amp;#8211; those functions
describe what I want to have happen in a nice procedural manner (almost
as if they had a thread all to themselves) with the only extra bit the
&amp;#8220;None, None, continue&amp;#8221; line, which I&amp;#8217;m willing to accept in order not to
use threads.

&lt;p&gt;Making that actually function does need a little grunging around, but
happily we can hide that away in a module &amp;#8211; so my API looks like:

&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
p = subprocess.Popen([&quot;./helper&quot;], stdin=PIPE, stdout=PIPE, close_fds=True)
comm = communicate.Communication()
comm.add(send_inputs, p.stdin, None)
comm.add(read_output, None, p.stdout, communicate.ByLine())
comm.communicate()
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;The comm.add() function takes a generator function, an output fd
(ie, the subprocess&amp;#8217;s stdin), an input fd (the subprocess&amp;#8217;s output),
and an (optional) iterator. The generator gets created when communication
starts, with the iterator passed as the argument. The iterator needs to
have an &amp;#8220;add&amp;#8221; function (which gets given the bytes received), a &amp;#8220;waiting&amp;#8221;
function, which returns True or False depending on whether it can provide
any more input for the generator, and a &amp;#8220;finish&amp;#8221; function that gets called
once EOF is hit on the input. (Actually, it doesn&amp;#8217;t strictly need to be
an iterator, though it&amp;#8217;s convenient for the generator if it is)

&lt;p&gt;The generator functions once &amp;#8220;executed&amp;#8221; return an object with a next()
method that&amp;#8217;ll run the function you defined until the next &amp;#8220;yield&amp;#8221;
(in which case next() will return the value yielded), or a &amp;#8220;return&amp;#8221;
is hit (in which case the StopIteration exception is raised). 

&lt;p&gt;So what we then want to do to have this all work then, is this: (a)
do a select() on all the files we&amp;#8217;ve been given; (b) for the ones we
can read from, read them and add() to the corresponding iterators; (c)
for the generators that don&amp;#8217;t have an output file, or whose output file
we can write to, invoke next() until either: they raise StopIteration,
they yield a value for us to output, or they yield None and their iterator
reports that it&amp;#8217;s waiting. Add in some code to ensure that reads from the
file descriptors don&amp;#8217;t block, and you get:

&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
def communicate(self):
    readable, writable = [], []
    for g,o,i,iter in self.coroutines:
        if i is not None:
            fcntl.fcntl(i, fcntl.F_SETFL, 
                        fcntl.fcntl(i, fcntl.F_GETFL) | os.O_NONBLOCK)
            readable.append(i)
        if o is not None:
            writable.append(o)
    
    while readable != [] or writable != []:
        read, write, exc = select.select(readable, writable, [])
        for g,o,i,iter in self.coroutines:
            if i in read:
                x = i.read()
                if x == &quot;&quot;: # eof
                    iter.finish()
                    readable.remove(i)
                else:
                    iter.add(x)

            if o is None or o in write:
                x = None
                try:
                    while x is None and not iter.waiting():
                        x = g.next()
                    if x is not None:
                        o.write(x)
                except StopIteration:
                    if o is not None:
                        writable.remove(o)
    return
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;You can break it by: (a) yielding more than you can write without
blocking (it&amp;#8217;ll block rather than buffer, and you might get a deadlock),
(b) yielding a value from a generator that doesn&amp;#8217;t have a file associated
with it (None.write(x) won&amp;#8217;t work), (c) having generators that don&amp;#8217;t
actually yield, and (d) probably some other ways. And it would&amp;#8217;ve been
nice if I could have somehow moved the &amp;#8220;yield None&amp;#8221; into the iterator
so that it was implicit in the &amp;#8220;for line in f&amp;#8221;, rather than explicit.

&lt;p&gt;But even so, I quite like it.
</description>
    <pubDate>Thu, 10 Apr 2008 02:09:00 +1000</pubDate>
  </item>
  <item>
    <title>Dak Extensions</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/03/22#2008-03-22-extensions</link>
    <description>
&lt;p&gt;One of the challenges maintaining the Debian archive kit (dak) is
dealing with Debian-specific requirements: fundamentally because there
are a lot of them, and they can get quite hairy &amp;#8211; yet at the same time,
you want to keep them as separate as possible both so dak can be used
elsewhere, and just so you can keep your head around what&amp;#8217;s going on.
You can always add in hooks, but that tends to make the code even harder
to understand, and it doesn&amp;#8217;t really achieve much if you hadn&amp;#8217;t already
added the hook.

&lt;p&gt;However, dak&amp;#8217;s coded in python, and being an interpreted language
with lots of support for introspection, that more or less means there&amp;#8217;s
already hooks in place just about everywhere. For example, if you don&amp;#8217;t
like the way some function in some other module/class works, you can
always change it (&lt;code&gt;other_module.function = my_better_function&lt;/code&gt;).

&lt;p&gt;Thus, with some care and a bit of behind the scenes kludging, you
can have python load a module from a file specified in dak.conf that can
both override functions/variables in existing modules, and be called directly
from other modules where you&amp;#8217;ve already decided a configurable hook would
be a good idea.

&lt;p&gt;So, at the moment, as a pretty simple example there&amp;#8217;s an
&lt;code&gt;init()&lt;/code&gt; hook invoked from the main &lt;code&gt;dak.py&lt;/code&gt;
script, which simply says &lt;code&gt;if userext.init is not None:
userext.init(cmdname)&lt;/code&gt;.

&lt;p&gt;But more nifty is the ability to replace functions, simply by writing
something like:

&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;# Replace process_unchecked.py's check_signed_by_key
@replace_dak_function(&quot;process-unchecked&quot;, &quot;check_signed_by_key&quot;)
def check_signed_by_key(old_chk_key):
    changes = dak_module.changes
    reject = dak_module.reject
    ...
    old_chk_key()

&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;That&amp;#8217;s made possible mostly by the magic of python decorators &amp;#8211; the
little @-sign basically passes the new &lt;code&gt;check_signed_by_key&lt;/code&gt;
function to &lt;code&gt;replace_dak_function&lt;/code&gt; (or, more accurately,
the function &lt;code&gt;replace_dak_function(...)&lt;/code&gt; returns), which does
the dirty work replacing the function in the real module. To be just a
little bit cleverer, it doesn&amp;#8217;t replace it with the function we define,
but its own function with simply invokes our function with an additional
argument to whatever the caller supplied, so we can invoke the original
function if we choose (the &lt;code&gt;old_chk_key&lt;/code&gt; parameter &amp;#8211; the
original function takes no arguments, so our function only takes one).

&lt;p&gt;Right now, we don&amp;#8217;t do much interesting with it; but that should change
once &lt;a href=&quot;http://lists.debian.org/debian-release/2008/01/msg00112.html&quot;&gt;Ganneff&amp;#8217;s little patch&lt;/a&gt; is finished, which should be RSN&amp;#8230;

&lt;p&gt;Hopefully, this might start making it easier to keep dak maintained
in a way that&amp;#8217;s useful for non-Debian installs &amp;#8211; particularly if we
can get to the point where hacking it for Debian generally just implies
changing configuration and extension stuff &amp;#8211; then we can treat updating
all the real scripts as a regular software upgrade, just like it is
outside Debian.


</description>
    <pubDate>Sat, 22 Mar 2008 00:54:00 +1000</pubDate>
  </item>
  <item>
    <title>The second half...</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/03/07#2008-03-07-10years2</link>
    <description>
&lt;p&gt;Continuing from where we &lt;a href=&quot;http://azure.humbug.org.au/~aj/blog/2008/03/02#2008-03-02-tenyears&quot;&gt;left off&lt;/a&gt;&amp;#8230;

&lt;p&gt;The lower bound for me becoming a DD was 8th Feb &amp;#8216;98 when I applied;
for comparison, the upper bound as best I can make out was 23rd Feb,
when I would have received this mail through the debian-private list:

&lt;blockquote&gt;
&lt;pre&gt;Resent-Date: 23 Feb 1998 18:18:57 -0000
From: Martin Schulze &lt;joey@kuolema.Infodrom.North.DE&gt;
To: Debian Private &lt;debian-private@lists.debian.org&gt;
Subject: New accepted maintainers

Hi folks,

I wish you a pleasant beginning of the week.  Here are the first good
news of the week (probably).

This is the weekly progress report about new-maintainers.  These people
have been accepted as new maintainer for Debian GNU/Linux within the
last week.

&lt;i&gt;[...]&lt;/i&gt;

Anthony Towns &amp;lt;ajt@debian.org&amp;gt;

    Anthony is going to package the personal proxy from
    distributed.net - we don't have the source... He may adopt the
    transproxy package, too.

Regards,

        Joey
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;I never did adopt transproxy &amp;#8211; apparently Adam Heath started fixing
bugs in it a few days later anyway, and it was later taken over by Bernd
Eckenfels (ifconfig upstream!) who&amp;#8217;s maintained it ever since. Obviously I
did do other things instead, which brings us back to where we left off&amp;#8230;

&lt;p&gt;&lt;a href=&quot;http://azure.humbug.org.au/~aj/blog/2008/03/07?seemore=y#2008-03-07-10years2&quot; class=&quot;seemore&quot;&gt;Read the rest ...&lt;/a&gt;&lt;/p&gt;
</description>
    <pubDate>Fri, 07 Mar 2008 07:04:00 +1000</pubDate>
  </item>
  <item>
    <title>Been a while...</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/03/02#2008-03-02-tenyears</link>
    <description>
&lt;p&gt;So, sometime over the past few weeks I clocked up ten years as a
Debian developer:

&lt;blockquote&gt;
&lt;pre&gt;From: Anthony Towns &amp;lt;aj@humbug.org.au&amp;gt;
Subject: Wannabe maintainer.
Date: Sun, 8 Feb 1998 18:35:28 +1000 (EST)
To: new-maintainer@debian.org

Hello world,

I'd like to become a debian maintainer.

I'd like an account on master, and for it to be subscribed to the
debian-private list.

My preferred login on master would have been aj, but as that's taken
ajt or atowns would be great.

I've run a debian system at home for half a year, and a system at work
for about two months. I've run Linux for two and a half years at home,
two years at work. I've been active in my local linux users' group for
just over a year. I've written a few programs, and am part way through
packaging the distributed.net personal proxy for Debian (pending
approval for non-free distribution from distributed.net).

I've read the Debian Social Contract.

My PGP public key is attached, and also available as
&amp;lt;http://azure.humbug.org.au/~aj/aj_key.asc&amp;gt;.

If there's anything more you need to know, please email me.

Thanks in advance.

Cheers,
aj

-- 
Anthony Towns &amp;lt;aj@humbug.org.au&amp;gt; &amp;lt;http://azure.humbug.org.au/~aj/&amp;gt;
I don't speak for anyone save myself. PGP encrypted mail preferred.

On Netscape GPLing their browser: ``How can you trust a browser that
ANYONE can hack? For the secure choice, choose Microsoft.''
        -- &amp;lt;oryx@pobox.com&amp;gt; in a comment on slashdot.org
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Apparently that also means I&amp;#8217;ve clocked up ten and a half years as a
Debian user; I think my previous two years of Linux (mid-95 to mid-97)
were split between Slackware and Red Hat, though I couldn&amp;#8217;t say for
sure at this point.

&lt;p&gt;There&amp;#8217;s already been a few other grand ten-year reviews, such as Joey
Hess&amp;#8217;s &lt;a href=&quot;http://kitenet.net/~joey/blog/entry/ten_years_of_free_software_--_part_1_pdmenu/&quot;&gt;twenty-part serial&lt;/a&gt;, or LWN&amp;#8217;s &lt;a href=&quot;http://lwn.net/Articles/264402/&quot;&gt;week-by-week review&lt;/a&gt;,
or ONLamp&amp;#8217;s &lt;a href=&quot;http://www.onlamp.com/pub/a/onlamp/2008/02/12/a-look-back-at-10-years-of-osi.html&quot;&gt;interview with Bruce Perens, Eric Raymond and Michael
Tiemann&lt;/a&gt; on ten years of &amp;#8220;open source&amp;#8221;. I don&amp;#8217;t think I&amp;#8217;m going to
try matching that sort of depth though, so here are some of my highlights
(after the break).

&lt;p&gt;&lt;a href=&quot;http://azure.humbug.org.au/~aj/blog/2008/03/02?seemore=y#2008-03-02-tenyears&quot; class=&quot;seemore&quot;&gt;Read the rest ...&lt;/a&gt;&lt;/p&gt;
</description>
    <pubDate>Sun, 02 Mar 2008 09:30:00 +1000</pubDate>
  </item>
  <item>
    <title>Exclusion and Debian</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/01/16#2008-01-16-sexism-blah-blah</link>
    <description>
&lt;p&gt;Oh yay, another argument about sexism. I thought we were over this.
&lt;a href=&quot;http://www.aigarius.com/blog/2008/01/16/freedom-of-information-production-and-distribution/&quot;&gt;Aigars writes&lt;/a&gt;:

&lt;blockquote&gt;
&lt;p&gt;Trying to restrict what words people can or can not use (by
labeling them sexist, racist or obscene) is the bread and butter of
modern day media censorship. It is censorship and not &amp;#8220;just political
correctness&amp;#8221;. While I would not want people trying to limit contributions
to Debian only to &amp;#8220;smart and educated white people&amp;#8221; (racism) or &amp;#8220;logically
thinking males&amp;#8221; (sexism), going the other way and excluding people from
Debian because their remarks or way of thinking might offend someone is
just offensive to me.
&lt;/blockquote&gt;

&lt;p&gt;One: it&amp;#8217;s not censorship for Debian to limit discussion of
various things on Debian channels. It&amp;#8217;s censorship when you prevent
discussion of something &lt;i&gt;anywhere&lt;/i&gt;.

&lt;p&gt;Two: if you think excluding people is bad, then supporting jerks
whose mysogyny repulses people isn&amp;#8217;t compatible with that.

&lt;p&gt;Three: doing something in someone else&amp;#8217;s name, that isn&amp;#8217;t supported
by them, is wrong. If you&amp;#8217;re in a channel called &amp;#8220;debian-something&amp;#8221;
don&amp;#8217;t act in ways that don&amp;#8217;t match Debian&amp;#8217;s goals. If you want to be
free to go against the principles of the DFSG by, eg, discriminating
against people or groups, make up your own name for a channel.


</description>
    <pubDate>Wed, 16 Jan 2008 15:50:00 +1000</pubDate>
  </item>
  <item>
    <title>The Leaf of Trust</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/01/12#2008-01-12-leafoftrust</link>
    <description>
&lt;p&gt;Wow. &lt;a href=&quot;http://www.lysator.liu.se/~jc/wotsap/leafoftrust.html&quot;&gt;Pretty.&lt;/a&gt;

</description>
    <pubDate>Sat, 12 Jan 2008 05:22:00 +1000</pubDate>
  </item>
  <item>
    <title>LCA Sponsors</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/01/11#2008-01-11-lca-sponsors</link>
    <description>
&lt;p&gt;An article by Sam Varghese appeared on ITwire today, entitled
&lt;a href=&quot;http://www.itwire.com/content/view/16042/1090/&quot;&gt;linux.conf.au: What is Novell doing here?&lt;/a&gt;:

&lt;blockquote&gt;
&lt;p&gt;A GNU/Linux system does not normally load modules that are not
released under an approved licence. So why should Australia&amp;#8217;s national
Linux conference take on board a sponsor who engages in practices that
are at odds with the community?

&lt;p&gt;What am I talking about? A company which should not be in the picture
has poked its nose in as a sponsor. Novell, which indicated the level of
its commitment to FOSS by signing a deal with Microsoft in November 2006,
will be one of the supporting sponsors for the conference.
&lt;/blockquote&gt;

&lt;p&gt;Novell was also a minor sponsor of the 2007 conference, and Sam wrote
&lt;a href=&quot;http://www.itwire.com/content/view/8716/1090/&quot;&gt;an article in January&lt;/a&gt; expressing similar thoughts, which included
this quote from Bruce Perens:

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;I&amp;#8217;d rather they hadn&amp;#8217;t accepted a Novell sponsorship. It wasn&amp;#8217;t very
clueful of them, given Novell&amp;#8217;s recent collaboration with Microsoft in
spreading fear and doubt about Linux and software patents,&amp;#8221; Perens said.
&lt;/blockquote&gt;

&lt;p&gt;Ultimately, I think that&amp;#8217;s a mistaken view. Linux.conf.au is what
it is thanks to the contributions of four groups: 

&lt;dl&gt;
&lt;dt&gt;the organisers
&lt;dd&gt;who create the conference, get a venue, organise a schedule of events,
help the speakers and attendees to get there, and generally make it easy for
everyone to just get immersed in cool Linux stuff
&lt;dt&gt;the speakers
&lt;dd&gt;who provide the core of the schedule, the reason for attendees to go, and
a core depth of awesome technical knowledge and ideas
&lt;dt&gt;the attendees
&lt;dd&gt;who fill in the organisational/content gaps that the organisers and
speakers miss, who make for fascinating corridor and dinner conversations,
who make side events like the miniconfs, the hackfest or open day
interesting, and who pay the rego fees that lets the conference happen
&lt;dt&gt;the sponsors
&lt;dd&gt;who provide a chunk of money to fill out the conference budget letting
us commit to venues and events earlier (when we might otherwise have to wait
to see how many people come), and let us do extra things that registration
fees alone wouldn&amp;#8217;t cover
&lt;/dl&gt;

&lt;p&gt;Obviously sometimes you have to exclude people from participating,
but that&amp;#8217;s mostly only if they&amp;#8217;re actually causing trouble for the event.
For sponsors, that pretty much means trying to interfere in the conference
itself, or not paying on time. Otherwise, if you&amp;#8217;re contributing to the
conference, and not causing problems, you certainly should be recognised
for that, as far as I can see.

&lt;p&gt;For me, the same thing would apply if Microsoft was offering to
sponsor the conference &amp;#8211; if they&amp;#8217;re willing to contribute, and not
cause problems, I&amp;#8217;m all for it. If they happen to not be doing anything
constructive in Linux-space anywhere else, well, it seems perfectly fine
to me to start contributing by helping make linux.conf.au awesome.

&lt;p&gt;In Microsoft&amp;#8217;s case that would be hard, because all the people going
&amp;#8220;oh my gosh, Microsoft, Linux! Wolves, sheeps! Hell, snow!&amp;#8221; along with
possible mixed messages from Microsoft and our long-term major sponsors
HP and IBM about the future of Linux and whatnot could really distract
us from all the cool technical stuff the conference is fundamentally
about. I don&amp;#8217;t think there&amp;#8217;s anything Microsoft could offer to justify
that much disruption, but having more of the world&amp;#8217;s software companies
involved in free software would probably be worth a bit of hassle,
if the disruption could be minimised.

&lt;p&gt;Ultimately, I guess my disagreement comes down to these couple of
comments from Sam&amp;#8217;s article:

&lt;blockquote&gt;
&lt;p&gt;Asked whether it was right that Novell should be allowed to be a
sponsor for a conference such as this - which, in my view, is a privilege
- [&amp;#8230;]

&lt;p&gt;[&amp;#8230;] Novell, obviously, is hoping that, as public memory is
woefully short, it will be able to wriggle its way back into the
community. Providing such leeway is, in my opinion, a big mistake.
&lt;/blockquote&gt;

&lt;p&gt;In my opinion, the ability to contribute to open source isn&amp;#8217;t a
privelege, it&amp;#8217;s something that should be open to everyone, including
people who&amp;#8217;ve made mistakes in the past: and that&amp;#8217;s precisely what the
&amp;#8220;free&amp;#8221; in free software is all about.

&lt;p&gt;OTOH, if you want to see who&amp;#8217;s been participating most in the Linux
world lately, you&amp;#8217;re much better off looking at the list of speakers
than sponsors. Novell (or at least SuSE) folks giving talks in the main
conference this year seem to include &lt;a href=&quot;http://linux.conf.au/programme/detail?TalkID=210&quot;&gt;John Johansen&lt;/a&gt; and &lt;a href=&quot;http://linux.conf.au/programme/detail?TalkID=133&quot;&gt;Nick
Piggin&lt;/a&gt;. Interestingly, the count of HP folks seems a bit low this
year, with only two that I can see, which leaves them not only merely
equalling Novell/SuSE, but beaten by both Intel and Catalyst. Tsk! I
guess we&amp;#8217;ll have to wait and see if that changes when we can see the
list of attendees&amp;#8217; companies in the booklet this year&amp;#8230;


</description>
    <pubDate>Fri, 11 Jan 2008 22:49:00 +1000</pubDate>
  </item>
  <item>
    <title>Baby Got Bloat</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/01/08#2008-01-08-bloat</link>
    <description>
&lt;p&gt;With the whole incipient git obsession I&amp;#8217;ve been cleaning out some
of my scratch dirs. In one, last touched in mid-2006, I found:

&lt;blockquote&gt;
&lt;pre&gt;&lt;i&gt;
Oh. My. God.
Becky, look at that bloat!
It's so big...
It looks like one of those Microsoft products...
Who understands those Microsoft guys anyway?
They only code that crap because they're paid by the line...
I mean the bloat...
It's just so slow...
I can't believe it's so laggy...
It's just bloated...
I mean, gross...
Look, that just ain't a Hack.&lt;/i&gt;

I like big apps and I cannot lie.
You other bruthas can't deny,
That when some perl comes by, not a symbol to waste
Like line-noise, cut and paste --
You're bewitched;
But now my context's switched,
Coz I notice that glest's got glitz.
Oh BABY! I wanna apt-get ya,
Coz you got pictures,
Those hackers tried to warn me,
But the bling you got
/Make me so horny/
Oooo, app fantastic,
You say you wanna fill up my drive?
Well, use me, use me, coz you ain't that average GUI.

I've seen them typing,
To hell with reciting,
I point, and click, and never miss a single trick.

I'm tired of tech websites,
Sayin' command lines are the thing.
Ask the average power user what makes them tick --
You gotta point and click.

So hackers! (Yeah!) Hackers! (Yeah!)
Has your UI got the G? (Hell Yeah!)
Well click it (click it), click it (click it), and use that healthy glitz,
Baby got bloat.

(vi code with a KDE UI...)
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;And before you ask, no, I don&amp;#8217;t know what I was drinking&amp;#8230;
</description>
    <pubDate>Tue, 08 Jan 2008 16:30:00 +1000</pubDate>
  </item>
  <item>
    <title>User configuration</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/01/05#2008-01-05-user-etc</link>
    <description>
&lt;p&gt;Inspired mostly by &lt;a href=&quot;http://kitenet.net/~joey/blog/entry/big_storm_coming/&quot;&gt;Joey&amp;#8217;s&lt;/a&gt; nonchalant way of dealing with the
death of his laptop&amp;#8230;

&lt;blockquote&gt;
&lt;p&gt;This seems less of a disaster than other times a laptop&amp;#8217;s disk has
died on me. When did it start to become routine? [&amp;#8230;] My mr and etckeeper
setup made it easy to check everything back out from revision control. [&amp;#8230;]
&lt;/blockquote&gt;

&lt;p&gt;&amp;#8230;I&amp;#8217;ve been looking at getting all my stuff version controlled
too. I&amp;#8217;ve just gotten round to checking all my dotfiles into git, and
it crossed my mind that it&amp;#8217;d be nice if I could just set an environment
variable to tell apps to create their random new dot-files directly
in my &amp;#8220;.etc-garbage&amp;#8221; repo. I figured using &amp;#8220;$USER_ETC/foo&amp;#8221; instead of
&amp;#8220;$HOME/.foo&amp;#8221; would be pretty easy, and might be a fun release goal that
other Debian folks might be interested in, so I did a quick google to see
if something similar had already been suggested.

&lt;p&gt;The first thing I stumbled upon was &lt;a href=&quot;http://mail.gnome.org/archives/desktop-devel-list/2004-November/msg00250.html&quot;&gt;a mail from the PLD Linux
folks&lt;/a&gt; who apparently were using $HOME_ETC at one time which sounded
pretty good, though it doesn&amp;#8217;t seem to have gotten anywhere. That thread
included a &lt;a href=&quot;http://mail.gnome.org/archives/desktop-devel-list/2004-November/msg00268.html&quot;&gt;pointer&lt;/a&gt; to the system that has gotten somewhere
which is the &lt;a href=&quot;http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html&quot;&gt;XDG spec&lt;/a&gt;.

&lt;p&gt;It&amp;#8217;s actually pretty good, if you don&amp;#8217;t mind it being ugly as all hell. 

&lt;p&gt;They define three classes of directory &amp;#8211; configuration stuff,
non-essential/cached data, and other data. That more or less matches the
/etc, /var/cache and /var/lib directories for the system-wide equivalents,
though if the &amp;#8220;other data&amp;#8221; is stuff that can be distributed by the
OS vendor it might go in /usr/lib or /usr/share (or the /usr/local/
equivalents) too.

&lt;p&gt;Which is all well and good. Where it gets ugly is the naming.

&lt;p&gt;For the &amp;#8220;/etc&amp;#8221; configuration stuff, we have the environment variable
$XDG_CONFIG_HOME, which defaults to ~/.config, and has a backup path defined
by $XDG_CONFIG_DIRS, which defaults to /etc/xdg.

&lt;p&gt;For the &amp;#8220;/var/lib&amp;#8221; other data stuff, we have the environment variable
$XDG_DATA_HOME, which defaults to ~/.local/share, and has a backup path
defined by $XDG_DATA_DIRS, which defaults to /usr/local/share:/usr/share.
(Though if you&amp;#8217;re using gdm, it&amp;#8217;ll get set for you to also include
/usr/share/gdm)

&lt;p&gt;And for the &amp;#8220;/var/cache&amp;#8221; stuff, we have the environment variable
$XDG_CACHE_HOME, which defaults to ~/.cache.

&lt;p&gt;That seems to me like exactly the right idea, with way too much crap on
it. If you simplify it obsessively &amp;#8211; using existing names, dropping the
desktop-centrism, you end up with:

&lt;p&gt;Put configuration files in $HOME_ETC/foo or $HOME/.foo. For
shared/fallback configuration, search $PATH_ETC if it&amp;#8217;s set, or just
/etc if it&amp;#8217;s not.

&lt;p&gt;Put data files in $HOME_LIB/foo or $HOME/.foo. For shared
data, search $PATH_LIB if it&amp;#8217;s set, or look through /var/lib,
/usr/local/{lib,share} and /usr/{lib,share} if it&amp;#8217;s not.

&lt;p&gt;Put caches in $HOME_CACHE/foo or $HOME/.foo. For shared caches,
search $PATH_CACHE if it&amp;#8217;s set, or just look in /var/cache if it&amp;#8217;s not.

&lt;p&gt;That seems much simpler to me to the point of being self-explanatory,
and much more in keeping with traditional Unix style. It&amp;#8217;s also backwards
compatabile if you use both old and new versions of a program with the
same home directory (or you happen to like dotfiles). And having the
XDG variables set based on the above seems pretty easy too.

&lt;p&gt;I wonder what other people think &amp;#8211; does {HOME,PATH}_{ETC,LIB,CACHE}
seem sensible, or is XDG_{CONFIG,DATA,CACHE}_{HOME,DIRS} already
entrenched enough that it&amp;#8217;s best just to accept what&amp;#8217;s fated?


</description>
    <pubDate>Sat, 05 Jan 2008 02:19:00 +1000</pubDate>
  </item>
  <item>
    <title>tempus fugit</title>
    <link>http://azure.humbug.org.au/~aj/blog/2008/01/03#2008-01-03-git</link>
    <description>
&lt;p&gt;I blogged a fair bit about &lt;a href=&quot;http://azure.humbug.org.au/~aj/blog/tech/darcs/&quot;&gt;darcs&lt;/a&gt; some time ago, but since then
I&amp;#8217;ve not been able to get comfortable with the patch algebra&amp;#8217;s approach
to dealing with conflicting merges &amp;#8211; I think mostly because it doesn&amp;#8217;t
provide a way for the user to instruct darcs on how to recover from a
conflict and continue on. I&amp;#8217;ve had a look at bzr since then, but it just
feels slow, to the point where I tend to rsync things around instead of
using it properly, and it just generally hasn&amp;#8217;t felt comfortable.

&lt;p&gt;On the other hand, a whole bunch of other folks I respect have been
a bit more decisive than I have on this, and from where I sit, there&amp;#8217;s
been a notable trend:

&lt;dl&gt;
&lt;dt&gt;Keith Packard, Oct 2006
&lt;dd&gt;&lt;a href=&quot;http://keithp.com/blogs/Repository_Formats_Matter/&quot;&gt;Repository formats matter&lt;/a&gt;, &lt;a href=&quot;http://keithp.com/blogs/Tyrannical_SCM_selection/&quot;&gt;Tyrannical SCM selection&lt;/a&gt;
&lt;dt&gt;Ted Tso, Mar 2007
&lt;dd&gt;&lt;a href=&quot;http://thunk.org/tytso/blog/2007/03/24/git-and-hg/&quot;&gt;Git and hg&lt;/a&gt;
&lt;dt&gt;Joey Hess, Oct 2007
&lt;dd&gt;&lt;a href=&quot;http://kitenet.net/~joey/blog/entry/git_transitions/&quot;&gt;Git transitions&lt;/a&gt;, &lt;a href=&quot;http://kitenet.net/~joey/blog/entry/announcing_etckeeper/&quot;&gt;etckeeper&lt;/a&gt;, &lt;a href=&quot;http://kitenet.net/~joey/blog/entry/git_archive_as_distro_package_format/&quot;&gt;git archive as distro package format&lt;/a&gt;
&lt;/dd&gt;

&lt;p&gt;Of course, Rusty &lt;a href=&quot;http://ozlabs.org/~rusty/index.cgi/tech/2007-11-12.html&quot;&gt;swings the other way&lt;/a&gt;, as do the
&lt;a href=&quot;http://www.opensolaris.org/os/community/tools/scm/history/&quot;&gt;OpenSolaris guys&lt;/a&gt;. The OpenSolaris conclusions seem mostly out of
date if you&amp;#8217;re able to use git 1.5, and I haven&amp;#8217;t learnt quilt to miss
its mode of operation the way Rusty does. And as far as the basics go,
Carl Worth did an interesting exercise in translating an &lt;a href=&quot;http://hgbook.red-bean.com/hgbookch2.html#x6-250002&quot;&gt;introduction
to Mercurial&lt;/a&gt; into &lt;a href=&quot;http://cworth.org/hgbook-git/tour/&quot;&gt;the equivalent for git&lt;/a&gt;, so that looks
okay for git too.

</description>
    <pubDate>Thu, 03 Jan 2008 23:33:00 +1000</pubDate>
  </item>
  <item>
    <title>Risky advancements</title>
    <link>http://azure.humbug.org.au/~aj/blog/2007/12/21#2007-12-21-trans-simian</link>
    <description>
&lt;p&gt;The &lt;a href=&quot;http://ieet.org/index.php/IEET/more/2181/&quot;&gt;latest warning&lt;/a&gt; from &lt;a href=&quot;http://dresdencodak.com/cartoons/dc_034.htm&quot;&gt;Dresden Codak&lt;/a&gt;&amp;#8217;s Aaron Diaz:

&lt;blockquote&gt;
&lt;p&gt;Do we really want to live in a society populated by geriatric
27-year-olds? In living so long and spending so much time `thinking&amp;#8217; do
we not also run the risk of becoming a cold, passionless race incapable
of experiencing our two emotions (fear and not fear)?
&lt;/blockquote&gt;

&lt;p&gt;Also interesting, is a talk by Vernor Vinge from back in February to
the Long Now institute titled &amp;#8220;What if the Singularity Does Not Happen?&amp;#8221;,
to which &lt;a href=&quot;http://www.kurzweilai.net/articles/art0696.html?printable=1&quot;&gt;slides are available&lt;/a&gt; along with an audio recording.


</description>
    <pubDate>Fri, 21 Dec 2007 05:08:00 +1000</pubDate>
  </item>
  <item>
    <title>Asus eeePC</title>
    <link>http://azure.humbug.org.au/~aj/blog/2007/12/07#2007-12-07-eeepc</link>
    <description>
&lt;img src=&quot;http://azure.humbug.org.au/~aj/blogpics/random/partytime.png&quot; align=right border=0&gt;

&lt;p&gt;Okay, so any excuse to bring out the Laphroaig is fine by me, but
the cute little &lt;a href=&quot;http://en.wikipedia.org/wiki/ASUS_Eee_PC&quot;&gt;eeePC&lt;/a&gt; is better than most. That it&amp;#8217;s cute and popular
is all very well, but what really makes my day is this is the first
device I&amp;#8217;ve seen that both doesn&amp;#8217;t hide the fact it&amp;#8217;s running Linux,
and is available in maintstream stores in Australia. A random review
from &lt;a href=&quot;http://www.smh.com.au/news/reviews/review-asus-eee-pc/2007/12/02/1196530469545.html?page=fullpage&quot;&gt;the Sydney Morning Herald&lt;/a&gt;:

&lt;blockquote&gt;
&lt;p&gt;You also don&amp;#8217;t get Windows. Asus has adopted the free Linux operating
system that&amp;#8217;s been slowly yet steadily growing in popularity over the past
decade. This keeps the cost down and makes better use of its relatively
modest hardware, which would creak under the weight of Windows. It
does mean not being able to use your favourite Windows software but,
fortunately, the Eee PC comes with dozens of programs, including the
familiar Firefox web browser and Skype for online phone calls.
&lt;/blockquote&gt;

&lt;p&gt;That came out on the day the eeePC was released in Australia. Three
days later, they did a &lt;a href=&quot;http://www.smh.com.au/articles/2007/12/05/1196812808404.html&quot;&gt;followup&lt;/a&gt;:

&lt;blockquote&gt;
&lt;p&gt;Taiwan computer maker Asus might have underestimated the local demand
for its diminutive Eee PC, as the $499 laptop is now virtually sold out
in Australia.
&lt;/blockquote&gt;

&lt;p&gt;From that, there&amp;#8217;s a brief take on who&amp;#8217;s actually buying them:

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;We&amp;#8217;ve had customers coming in buying two or three units for the
family - the mix of customer has been probably novices more than the
tech types,&amp;#8221; he said.
&lt;/blockquote&gt;

&lt;p&gt;It&amp;#8217;s really good to see that Linux is getting credit in pretty much
all those stories, no matter how mainstream. Xandros is pretty rarely
mentioned, and I don&amp;#8217;t think I&amp;#8217;ve seen Debian mentioned yet. But even
without the credit, it&amp;#8217;s still pretty cool that with the eeePC and Dell&amp;#8217;s
trysting with Ubuntu, the real in-roads to pre-installed consumer Linux
these days are building on Debian. I&amp;#8217;d always expected that Red Hat
or SuSE or someone with more commercial muscle would get through that
door first (they&amp;#8217;ve certainly had box sets more readily available!),
but apparently elitist, freedom obsessed, techno-geekery actually works
better, somehow. At least when there&amp;#8217;s a company to put a smiley face in
front of it all :)

&lt;p&gt;The other interesting thing about choosing Xandros, is that it
presumably means the eeePC is covered by Microsoft&amp;#8217;s &lt;a href=&quot;http://www.itnews.com.au/News/NewsStory.aspx?story=53516&quot;&gt;patent protection
scheme&lt;/a&gt; &amp;#8211; which means no baseless threats against eeePC users from
Microsoft, but also that Microsoft&amp;#8217;s probably &lt;a href=&quot;http://boycottnovell.com/2007/11/26/xandros-tax/&quot;&gt;getting a cut&lt;/a&gt;
of whatever Xandros receives from each eeePC sale. Whether you think
that&amp;#8217;s a problem or not, the result is probably going to be that it&amp;#8217;s
the thin edge of the wedge: it&amp;#8217;s removed Microsoft from blocking a Linux
preinstall on consumer hardware, which means we can see that regular
people like Linux systems enough that they sell out in days. And that
means Linux systems are a fact of life, and if Microsoft try to stop them
by making it difficult for you to sell Windows systems, well, that&amp;#8217;ll
just make it difficult to sell Windows systems &amp;#8211; which is another win
for Linux. And once you get to the point where the argument for paying
off Microsoft doesn&amp;#8217;t rely on keeping your OEM deal for Windows, but is
just a matter of whether their patents are actually valid&amp;#8230;

&lt;p&gt;Oh, also nice from the promoting free software angle, is that the
first thing you see if you decide to visit &lt;a href=&quot;http://eeepc.asus.com/global/&quot;&gt;Asus&amp;#8217;s eeePC site&lt;/a&gt;
to check the gizmo is the &lt;a href=&quot;http://eeepc.asus.com/global/news11272007.htm&quot;&gt;news item&lt;/a&gt;:

&lt;blockquote&gt;
&lt;p&gt;2007.11.27  	ASUSTek is committed to meet the requirements of the GNU General&amp;#8230;
&lt;/blockquote&gt;

&lt;p&gt;Add the fact that an eeePC running a Debian-derivative has access
to all the software in the Debian repositories for no cost, and the
new government&amp;#8217;s planned rebates and investments in IT probably mean
that parents can get close to a full refund, and you&amp;#8217;re getting pretty
close to a choice of spending nothing and getting a popular, reasonably
functional and very portable laptop with all the software you could
ever want, that just happens to be running Linux, or paying an extra few
hundred or thousand dollars to get a Windows laptop, and then probably
pirating whatever software you end up needing.

&lt;p&gt;In any event, to my mind, that makes 2007 the year of the Linux on the
desktop: everything from here is just a simple matter of quantity. What&amp;#8217;s
next?

</description>
    <pubDate>Fri, 07 Dec 2007 04:01:00 +1000</pubDate>
  </item>
  <item>
    <title>The Liberals in Limbo -- how low can they go?</title>
    <link>http://azure.humbug.org.au/~aj/blog/2007/12/05#2007-12-05-toss-up-tim</link>
    <description>
&lt;p&gt;The latest &lt;a href=&quot;http://www.abc.net.au/news/stories/2007/12/05/2110199.htm&quot;&gt;squabbling incompetence&lt;/a&gt;:

&lt;blockquote&gt;
&lt;p&gt;Gold Coast MP Ray Stevens says leadership contender Tim Nicholls
should withdraw his challenge and get behind Mark McArdle.

&lt;p&gt;Mr Stevens says if the matter is not resolved that way, he says his
legal advice suggests the only option left will be to draw names out of
a hat.

&lt;p&gt;&amp;#8220;That is unacceptable to the people of Queensland [and] it&amp;#8217;s
unacceptable to me,&amp;#8221; he said.

&lt;p&gt;&amp;#8220;If Mr Nicholls were to win that particular toss of the coin or ballot
or whatever he would be forever known as toss-up Tim.&amp;#8221;
&lt;/blockquote&gt;

&lt;p&gt;Why the hell the Queensland Nationals are putting up with this incompetence
from their supposed &lt;a href=&quot;http://www.qldcoalition.org.au/&quot;&gt;coalition partners&lt;/a&gt; beats me. 

&lt;p&gt;Against the 59 Labor MPs in Queensland, there are 17 Nationals MPs,
and 8 Liberal MPs. Since Labor&amp;#8217;s clever &amp;#8220;Just vote [1]&amp;#8221; campaign in 2004
stopped the Nationals and Liberals from running candidates in the same
seat, that means that the Liberals won 16.3% of the seats they contested,
while the Nationals won 42.5% (Labor won 66%). 

&lt;p&gt;The Qld Liberals are dead and getting worse every day, the Nationals
are the only real opposition in Qld, and they should start acting like
it &amp;#8211; by trying to win a majority at the next election in their own
right (rather than not even putting up candidates in over 50% of seats),
telling people to let their preferences be heard and not &amp;#8220;Just vote [1]&amp;#8221;,
and if the Liberals can&amp;#8217;t get their act together, withdrawing from the
state coalition entirely so they aren&amp;#8217;t dragged down with them.

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;You&amp;#8217;re an embarrassment to Queensland. Get on with the job, get a
leader and start doing the things you&amp;#8217;re elected to do.&amp;#8221;
&lt;/blockquote&gt;

&lt;p&gt;What &lt;a href=&quot;http://www.abc.net.au/news/stories/2007/12/05/2110573.htm&quot;&gt;she said&lt;/a&gt;.

&lt;p&gt;&lt;a name=&quot;2007-12-05-toss-up-tim-1&quot; class=&quot;updatetitle&quot;&gt;UPDATE 2007/12/06:&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.abc.net.au/news/stories/2007/12/06/2111615.htm&quot;&gt;Heh.&lt;/a&gt;

&lt;blockquote&gt;
&lt;p&gt;Earlier today, Nationals leader Jeff Seeney described the debacle as
damaging to the Coalition's credibility.
&lt;p&gt;&lt;i&gt;[...]&lt;/i&gt;
&lt;p&gt;Mr McArdle won when Mr Nicholls withdrew his challenge to take on
the deputy's position instead.
&lt;p&gt;The compromise was reached after Mr Seeney threatened to tear up the
Coalition agreement.
&lt;/blockquote&gt;



&lt;/p&gt;
</description>
    <pubDate>Wed, 05 Dec 2007 16:30:00 +1000</pubDate>
  </item>
  <item>
    <title>Hark!</title>
    <link>http://azure.humbug.org.au/~aj/blog/2007/11/16#2007-11-16-t-shirt</link>
    <description>
&lt;p&gt;What I want for christmas:

&lt;p&gt;&lt;a href=&quot;http://xkcd.com/344/&quot;&gt;&lt;img src=&quot;http://azure.humbug.org.au/~aj/blogpics/random/affront.png&quot; border=0&gt;&lt;/a&gt;

</description>
    <pubDate>Fri, 16 Nov 2007 05:27:00 +1000</pubDate>
  </item>
  <item>
    <title>Managing Debian Installs</title>
    <link>http://azure.humbug.org.au/~aj/blog/2007/11/14#2007-11-14-hacking-equivs</link>
    <description>
&lt;p&gt;For a while I&amp;#8217;ve been trying to find some easy way to keep a few
machines I admin behaving the way I want them too with minimal effort.
They don&amp;#8217;t really need much maintenance &amp;#8211; but I would like something
to help keep them all in sync. Basically, something like FAI, but much,
much simpler &amp;#8211; ideally something that takes five minutes to understand,
and another five minutes to deploy; and leave the more complicated and
powerful tools for when they&amp;#8217;re actually needed.

&lt;p&gt;I figured what I really want was just a simple way to make a
meta-package &amp;#8211; one that doesn&amp;#8217;t really provide any functionality,
just tells apt/dpkg what I want installed (via Depends), and what I
don&amp;#8217;t want installed (via Conflicts) and adds any extra configuration
stuff or local scripts that I decide I want.

&lt;p&gt;But doing that with a real Debian package is harder than I&amp;#8217;m really
comfortable with &amp;#8211; I don&amp;#8217;t want to have to worry about potential lintian
errors, or rules files and debhelper commands, or writing a Makefile
to get my files installed or whatever, I want something more trivial
than that. Looking for meta-package creators, the only one I spotted
that I thought looked likely was cdd-dev, described as &amp;#8220;Custom Debian
Distributions common files for developing meta packages&amp;#8221;. Unfortunately
it seems to just provide templates, which makes things quicker, but no
less complex.

&lt;p&gt;Fortunately equivs (&amp;#8220;Circumvent Debian package dependencies&amp;#8221;) is
actually used for metapackages these days, according to its maintainer
on IRC and its long description:

&lt;blockquote&gt;
&lt;p&gt;This package provides a tool to create Debian packages that only
contain dependency information.

&lt;p&gt;One use for this is to create a metapackage: a package whose sole
purpose is to declare dependencies and conflicts on other packages so
that these will be automatically installed, upgraded, or removed.

&lt;p&gt;Another use is to circumvent dependency checking. [&amp;#8230;]
&lt;/blockquote&gt;

&lt;p&gt;That turned out to work much better than I remembered (from whenever
I last tried it &amp;#8211; back in &amp;#8216;99 I guess?), with the only drawback being
that I couldn&amp;#8217;t add files easily. But that&amp;#8217;s just a matter of creating a
patch to equivs, which I then won&amp;#8217;t have to worry about again. So having
&lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=449542&quot;&gt;done that&lt;/a&gt;, I can now create a metapackage to do whatever I want
by creating a file like:

&lt;blockquote&gt;
&lt;pre&gt;
Suite: client
Section: misc
Priority: standard

Package: ajs-client-stuff
Version: 20071114.1
Maintainer: Anthony Towns &amp;lt;aj@erisian.com.au&amp;gt;
Description: Metapackage for aj's client computers
 Depends on necessary packages, etc.

File: /etc/apt/sources.list.d/client.list
 deb http://mirror.localnet/debian etch main contrib non-free
 deb http://mirror.localnet/debian etch-proposed-updates main contrib non-free
 .
 deb http://security.debian.org/ etch/updates main contrib non-free

File: postinst
 #!/bin/sh -e
 .
 apt-key add - &amp;lt;&amp;lt;EOF
 &lt;i&gt;[output of gpg --armour --export $KEY]&lt;/i&gt;
 EOF
 .
 ##DEBHELPER##
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;debhelper kindly takes care of getting the permissions right for me,
and equivs will generate a full source package if I tell it to, which I
can just upload to mini-dinstall and have a regular Debian repository just
by writing a text file and running equivs-build. And my metapackage can
add dependencies, conflicts, apt sources, cronjobs, scripts, configuration
files, documentation, or whatever I happen to want &amp;#8211; which means I can
make it automatically update itself, and thus install any dependencies
or remove any conflicts, which then means that modifying the config on
all the machines is just a matter of updating the metapackage. And new
installs is (hopefully) just a matter of doing a standard install and
then adding the metapackage. Perfect.

&lt;p&gt;&amp;#8230;even if it is really little more than a reinvention of rpm&amp;#8217;s .spec
files. :)


</description>
    <pubDate>Wed, 14 Nov 2007 17:07:00 +1000</pubDate>
  </item>
  </channel>
</rss>