Recently:

Recently I set up an instance of djabberd on a box running Debian. Brad Fitzpatrick has posted helpful instructions for getting the daemon set up and configured (even though I needed to tweak the configuration a bit; see below).

What was missing was the ability to start/stop/reload the daemon the Debian way using "/etc/init.d/djabberd (start|stop|restart)". Fortunately Debian makes this pretty easy:

#! /bin/sh

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="DJabberd"
NAME="djabberd"
DAEMON=/usr/local/djabberd/djabberd
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
OPTS="--conf=/etc/djabberd/my.conf"

test -x $DAEMON || exit 0

d_start() {
        start-stop-daemon --start --quiet --pidfile $PIDFILE -m \
                -d /usr/local/djabberd \
                --chuid djabberd \
                --background \
                --exec $DAEMON -- $OPTS
}

d_stop() {
        start-stop-daemon --stop --quiet --pidfile $PIDFILE \
                -d /usr/local/djabberd \
                --name $NAME -- $OPTS
}

d_reload() {
        start-stop-daemon --stop --quiet --pidfile $PIDFILE \
                --name $NAME --signal 1
}

case "$1" in
  start)
        echo -n "Starting $DESC: $NAME"
        d_start
        echo "."
        ;;
  stop)
        echo -n "Stopping $DESC: $NAME"
        d_stop
        echo "."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: $NAME"
        d_stop
        sleep 1
        d_start
        echo "."
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0
    

I'm running djabberd with an unprivileged system-user called "djabberd", which you'll have to add before using the above script. The djabberd instance is located in /usr/local/djabberd in my configuration.

As mentioned above, Brad's configuration sample wasn't fully up-to-date. Here is what I'm using in /etc/djabberd/my.conf:

OldSSL  enable

SSLCertificateFile    /etc/djabberd/server-cert.pem
SSLCertificateKeyFile /etc/djabberd/server-key.pem

<VHost example.com>

  S2S enable
  RequireSSL yes

  <Plugin DJabberd::Authen::HTDigest>
     Realm djabberd
     HtDigest /etc/djabberd/djabberd.users
  </Plugin>

  <Plugin DJabberd::RosterStorage::SQLite>
     Database /etc/djabberd/jabber.sqlite
  </Plugin>

</VHost>
    

And finally, here is what I use for logging djabberd errors:

log4perl.logger.DJabberd = ERROR, LOGFILE
log4perl.logger.DJabberd.Hook = WARN

log4perl.appender.LOGFILE=Log::Log4perl::Appender::File
log4perl.appender.LOGFILE.filename=/var/log/djabberd.log
log4perl.appender.LOGFILE.mode=append

log4perl.appender.LOGFILE.layout=Log::Log4perl::Layout::PatternLayout
log4perl.appender.LOGFILE.layout.ConversionPattern=%-5p %-40c %m %n
    

(Put this file in /etc/djabberd/log.conf and djabberd will find it automagically.)

I suppose this is totally obvious to Javascript pundits, but I only recently noticed after banging my head against the wall that Internet Explorer does not support setting the class attribute of a newly created DOM element by using

element.setAttribute("class", "some-class-name");
    

Instead one has to use

element.className = "some-class-name";
    

I find this behaviour rather strange, especially when considering that the semantic meaning of the class attribute is no different than the meaning of other attributes. But if one wants their code to work on IE, the bottom line is that they'll have to live with this inconsistency.

And now let's hope Google picks this up, and people who share my debugging pain find this.

As of today the pool of possible email addresses on divbyzero.net, martin-jansen.de, and martinjansen.com has been reduced dramatically in an effort to give spammers less of a working point.

For 99,9% of you this means nothing, because you are using addresses that still work. But if your mails to me happen to bounce, I suggest you use the one that is listed on the contact page.

Slashdot posted a review of Marc Wandschneider's Core Web Application Development with PHP & MySQL.

My cool friends at Pearson Education (namely Mark Taub) sent me a voucher copy of the book a few weeks ago, and I have been meaning to write a review about it ever since the UPS guy dropped it off at my doorstep. Considering that the /. review coincides pretty much with what I think about the book, I guess I can tick this off on my to-do list.

Tour de France Blog spreads news about UCI ProTour:

The Tour de France, the Giro d'Italia and the Tour of Spain are quitting the fledgling Pro-Tour circuit, their organisers said on Friday.

So what does this mean for the involved parties?

Tour, Giro, Vuelta

For the gang of three it means nothing: They won't loose money, they won't loose the prominent teams, and they won't loose their importance. But the ProTour is dead:

UCI ProTour

This removes not only the three-week tours, but their sponsored events, including Paris-Roubaix, Liège-Bastogne-Liège, Milan-San Remo, Paris-Nice, Paris-Tours, the Tour of Lombardy, Flèche Wallonne, and Tirreno-Adriatico from the ProTour.

Considering that the above events account for the lion's share of ProTour's media coverage (especially TV coverage), it will vanish into insignificance. If the UCI nonetheless decides to keep the ProTour intact, this will be good for a lot of the smaller racing teams because they get a chance to become one of the (currently 20) ProTour teams.

Remaining ProTour teams

For the remaining (considering that some will not participate in the ProTour anymore because it is against long odds) teams life will become a bit harder: One of the ProTour's objectives is:

Increase the interest that it generates with investors, by offering teams, organisers, broadcasters and their main partners, guarantees as regards the profit that they will make from their investment.

What this means is that after the withdrawal the ProTour will loose immensive momentum with regard to securing money and news coverage. This in turn means that the team sponsors become less interested in the whole thing.

All-in there doesn't seem to be much future for the ProTour on the horizon. It will be interesting to see how this continues.

Update 2005-12-11: Refined last section a bit.

There was music, awesome pictures, and a packed cinema full of people in Softshell jackets: European Outdoor Film Tour was in town once again.

The show consisted of 7 movies (5 short movies and 2 longer ones) and lasted about 2 hours plus a short break of 15 minutes.

It started with the filmlet "Parallelojams" which was about a group of crackclimbers in Utah doing all sorts of weird stuff like sticking their fingers, hands, and feet in tiny cracks on an otherwise polished rock. The pictures were amazing and so were the comments of those freaks. One of my favourite movies.

Next came my absolute favourite movie: "Patagonia inland ice expedition" was a great documentary by Norway-based Børge Ousland and Thomas Ulrich from Switzerland about crossing the inland ice of Patagonia without external aid on ski and kayaking. It took them 56 days to reach their destination and they suffered from sepsis, snow-blindness, and the usual paddy when you realize that you are basically alone in the most misanthropic part of the world.

Right before the break they screened another filmlet: "Highliner" by Dean Potter (filmed by Heinz Zak) is about Slackroping (aka funambulating between two rocks with a few hundred meters of nothing but fresh air below your feet), which on first sight seems like a great new way to commit suicide. I didn't really understand why it was necessary to get rid of the (non-hindering) safety rope, but then again slackroping generally makes absolutely no sense at all. The pictures were impressive, but there were certainly better movies.

The next movie was entitled "Tracking the Soul" and was a amusing parody on the surf-movie genre, featuring two cross country skiers on their search for the ultimate track. Funny.

Afterwards they played a tiny movie about extreme whitewater kayaking. I didn't particularly enjoy it mainly because I've never really grasped what people like about kayaking.

The next movie was announced as the main movie of the evening, and it was about the first ascent of Thalay-Sagar's NW ridge in India. The climbers were apparently supported by Mammut, who also sponsored big parts of EOFT. The pictures were great, but not as great as "Patagonia inland ice expedition".

The show ended with "Sinners", a niftily cut freeriding / snowboarding movie. I can't really judge whether it was good or not, since I'm not into this sort of locomotion. A few boarders next to me said it was good though.

All in all the European Outdoor Film Tour was a nice event with a wide spectrum of outdoor movies. I'll certainly go there next year, too. (Here is hoping that there will be more prices to win next year. This year it was just ridiculous.)

Recently I needed to extract all xmlURL attributes from an OPML file for command line processing. (Specifically I needed a way to pipe them to the excellent rss2email.)

Enclosed herewith go some instructions for how to do this for the technically inclined.

Because OPML is some XML flavour it only seemed natural to use XSLT for doing the data crunching (what an ellaborate name for what I actually did). The same goal could have probably been achieved with a bit of P-language scripting magic, but I'm still learning this whole XSLT thing and so I took the chance for some "learning by doing".

  1. Get the OPML file. In my case this involved clicking my way through Bloglines. Save it as something like input.opml.
  2. Get the XSLT script. You can either click the link or copy & paste it from below:
    <?xml version="1.0"?>
    
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="text" />
    
      <xsl:template match="/">
        <xsl:for-each select="//@xmlUrl">
          <xsl:value-of select="." />
          <xsl:text>&#xA;</xsl:text> <!-- force a line break after each URL -->
        </xsl:for-each>       
      </xsl:template>
    </xsl:stylesheet>
            
    
  3. Call the XSLT processor and pipe its output to the desired command:
    xsltproc opml2text.xsl input.opml | r2e add
            
    
  4. That's it.

Unless you are living behind the moon you've most likely noticed that Google today unveiled its own instant messaging thing.

Technically this is absolutely no big deal: The service is based on the the Jabber protocol family, which isn't much more than a fancy name for a bunch of RFCs describing data exchange via XML. In the past people have been running Jabber servers (pretty much like what's behind talk.google.com) as long as the project exists, and there are quite a few server implementations available — commercial and non-commercial.

The software issues aside, Google needs a bunch (resp. a bigger bunch because we are in Google land) of servers for the Jabber daemon to run. Servers? Exactly, that's the sort of computers which Google owns a gazillion of. So no big deal either. What's left is the problem of building up a solid user base. With regard to this they luckily had a few thousand (most likely more, I don't know) already in their databases: Every GMail user can automagically log in to the IM service. No sign-up required and the user base is just there.

So even if Google doesn't earn a single buck with the whole project, they won't enter a loss: They not only have provided yet another reason for people to sign up for GMail, but they also are on par with Yahoo! and MSN and probably also AOL in the instant messaging world. And all this for a reasonably low price, compared to what they had to invest into the search infrastructure.

Ian Bicking writes:

The difference between someone with commit access and some random contributor should be reduced. Anonymous commits should be allowed (or commits with a very low registration threshold -- strict anonymity isn't really important here). The tools should be usable enough that we can say "we don't accept patches, we only accept pointers to branches in our repository".

Call me antiquate, but this sounds like a maintenance nightmare.

Ian's schema may work for projects with only a few, extremely tech-savvy, and disciplined developers. But for big open source with dozens (or hundreds or thousands) of contributors this will soon lead to a plethora of dead branches and unused SCM accounts. Aside from that a lot of potential contributors/bug fixers/next best superstars will not submit their patches because they are not interested in messing with some random SCM software. (I have been bounced around in the PHP development world for quite some time know and there are lots of bug fixers that already have problems submitting unified diffs. Now imagine they would need to install and use git or some other nerd tool ...)

(Via Planet MySQL)

Feel like improving your reputation? Go and fire Alan Kay. Way to go, guys!

Considering that Kay has reached retirement age anyway (he is 65 now), the layoff shouldn't hurt him financially. But a company which is planning to kill 14.500 jobs world-wide would better refrain from firing their most prominent employee.