<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
  <channel xml:base="http://martinjansen.com/">
    <title>Martin Jansen</title>
    <link>http://martinjansen.com/</link>
    <description />
    <pubDate>Sun, 06 Aug 2006 11:09:47 GMT</pubDate>
    <item>
      <title>djabberd on Debian</title>
      <link>http://martinjansen.com/2006/08/06/djabberd.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml">
      Recently I set up an instance of <a href="http://www.danga.com/djabberd/" shape="rect">djabberd</a> on a box
      running Debian. Brad Fitzpatrick has posted <a href="http://brad.livejournal.com/2225369.html" shape="rect">helpful
      instructions</a> for getting the daemon set up and configured
      (even though I needed to tweak the configuration a bit; see
      below).
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      What was missing was the ability to start/stop/reload the daemon
      the Debian way using "<code>/etc/init.d/djabberd
      (start|stop|restart)</code>".  Fortunately Debian makes this pretty
      easy:
    </p><pre xmlns="http://www.w3.org/1999/xhtml" xml:space="preserve">
#! /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}" &gt;&amp;2
        exit 1
        ;;
esac

exit 0
    </pre><p xmlns="http://www.w3.org/1999/xhtml">
      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
      <code>/usr/local/djabberd</code> in my configuration.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      As mentioned above, Brad's configuration sample wasn't fully
      up-to-date. Here is what I'm using in
      <code>/etc/djabberd/my.conf</code>:
    </p><pre xmlns="http://www.w3.org/1999/xhtml" xml:space="preserve">
OldSSL  enable

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

&lt;VHost example.com&gt;

  S2S enable
  RequireSSL yes

  &lt;Plugin DJabberd::Authen::HTDigest&gt;
     Realm djabberd
     HtDigest /etc/djabberd/djabberd.users
  &lt;/Plugin&gt;

  &lt;Plugin DJabberd::RosterStorage::SQLite&gt;
     Database /etc/djabberd/jabber.sqlite
  &lt;/Plugin&gt;

&lt;/VHost&gt;
    </pre><p xmlns="http://www.w3.org/1999/xhtml">
      And finally, here is what I use for logging djabberd errors:
    </p><pre xmlns="http://www.w3.org/1999/xhtml" xml:space="preserve">
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
    </pre><p xmlns="http://www.w3.org/1999/xhtml">
      (Put this file in <code>/etc/djabberd/log.conf</code> and djabberd
      will find it automagically.)
    </p>]]>
</description>
    </item>
    <item>
      <title>Classy</title>
      <link>http://martinjansen.com/2006/01/19/classy.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml">
      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 <tt>class</tt>
      attribute of a newly created DOM element by using
    </p><pre xmlns="http://www.w3.org/1999/xhtml" xml:space="preserve">
element.setAttribute("class", "some-class-name");
    </pre><p xmlns="http://www.w3.org/1999/xhtml">
      Instead one has to use
    </p><pre xmlns="http://www.w3.org/1999/xhtml" xml:space="preserve">
element.className = "some-class-name";
    </pre><p xmlns="http://www.w3.org/1999/xhtml">
      I find this behaviour rather strange, especially when considering
      that the semantic meaning of the <tt>class</tt> 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.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      And now let's hope Google picks this up, and people who share my
      debugging pain find this.
    </p>]]>
</description>
    </item>
    <item>
      <title>Mail reduction</title>
      <link>http://martinjansen.com/2005/12/22/mail.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml">
      As of today the pool of possible email addresses on
      <tt>divbyzero.net</tt>, <tt>martin-jansen.de</tt>, and
      <tt>martinjansen.com</tt> has been reduced dramatically in an
      effort to give spammers less of a working point.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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
      <a href="/contact/" shape="rect">contact page</a>.
    </p>]]>
</description>
    </item>
    <item>
      <title>Core Web Application Development with PHP &amp;
      MySQL</title>
      <link>http://martinjansen.com/2005/12/19/cwadpm.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml">
      Slashdot posted a <a href="http://books.slashdot.org/article.pl?sid=05/12/19/1457205" shape="rect">review</a> of
      Marc Wandschneider's <a href="http://www.amazon.com/gp/product/0131867164/" shape="rect">Core Web
      Application Development with PHP &amp; MySQL</a>.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      My cool friends at <a href="http://www.pearsoned.com/" shape="rect">Pearson
      Education</a> (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.
    </p>]]>
</description>
    </item>
    <item>
      <title>ProTour: R.I.P.?</title>
      <link>http://martinjansen.com/2005/12/10/protour.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml"><a href="http://www.tdfblog.com/" shape="rect">Tour de France Blog</a><a href="http://www.tdfblog.com/2005/12/grand_tours_to_.html" shape="rect">spreads
      news about UCI ProTour</a>:
    </p><blockquote xmlns="http://www.w3.org/1999/xhtml">
      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.
    </blockquote><p xmlns="http://www.w3.org/1999/xhtml">
      So what does this mean for the involved parties?
    </p><h4 xmlns="http://www.w3.org/1999/xhtml">Tour, Giro, Vuelta</h4><p xmlns="http://www.w3.org/1999/xhtml">
      For the gang of three it means <em>nothing</em>:  They won't loose
      money, they won't loose the prominent teams, and they won't loose
      their importance.  But the ProTour is dead:
    </p><h4 xmlns="http://www.w3.org/1999/xhtml">UCI ProTour</h4><blockquote xmlns="http://www.w3.org/1999/xhtml">
      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.
    </blockquote><p xmlns="http://www.w3.org/1999/xhtml">
      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.
    </p><h4 xmlns="http://www.w3.org/1999/xhtml">Remaining ProTour teams</h4><p xmlns="http://www.w3.org/1999/xhtml">
      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 <a href="http://www.uci.ch/uciroot/wspage.asp?p=uci%20pt%20about&amp;l=eng" shape="rect">objectives</a> is:
    </p><blockquote xmlns="http://www.w3.org/1999/xhtml">
      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.
    </blockquote><p xmlns="http://www.w3.org/1999/xhtml">
      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.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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.
    </p><p xmlns="http://www.w3.org/1999/xhtml"><strong>Update 2005-12-11:</strong>  Refined last section a bit.
    </p>]]>
</description>
    </item>
    <item>
      <title>European Outdoor Film Tour</title>
      <link>http://martinjansen.com/2005/11/09/eoft.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml">
      There was music, awesome pictures, and a packed cinema full of
      people in Softshell jackets:  <a href="http://eoft.de/" shape="rect">European
      Outdoor Film Tour</a> was in town once again.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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 <a href="http://en.wikipedia.org/wiki/Patagonia" shape="rect">Patagonia</a>
      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.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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 <em>the</em> ultimate track.
      Funny.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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. 
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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 <a href="http://mammut.ch/" shape="rect">Mammut</a>, who also sponsored big parts
      of EOFT.  The pictures were great, but not as great as
      "Patagonia inland ice expedition".
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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.)
    </p>]]>
</description>
    </item>
    <item>
      <title>opml2text</title>
      <link>
      http://martinjansen.com/2005/10/19/opml2text.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml">
      Recently I needed to extract all <code>xmlURL</code> attributes
      from an <acronym title="Outline Processor Markup Language"><a href="http://en.wikipedia.org/wiki/OPML" shape="rect">OPML</a></acronym> file for
      command line processing.  (Specifically I needed a way to pipe them
      to the excellent <a href="http://www.aaronsw.com/2002/rss2email/" shape="rect">rss2email</a>.)
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      Enclosed herewith go some instructions for how to do this for the
      technically inclined.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      Because OPML is some XML flavour it only seemed natural to use
      <a href="http://www.w3.org/TR/xslt" shape="rect">XSLT</a> 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".
    </p><ol xmlns="http://www.w3.org/1999/xhtml"><li>
        Get the OPML file.  In my case this involved clicking my way
        through <a href="http://bloglines.com/" shape="rect">Bloglines</a>.  Save it
        as something like <code>input.opml</code>.
      </li><li>
        Get the <a href="/2005/10/19/opml2text.xsl" shape="rect">XSLT script</a>.
        You can either click the link or copy &amp; paste it from below:
        <pre xml:space="preserve">
&lt;?xml version="1.0"?&gt;

&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;
  &lt;xsl:output method="text" /&gt;

  &lt;xsl:template match="/"&gt;
    &lt;xsl:for-each select="//@xmlUrl"&gt;
      &lt;xsl:value-of select="." /&gt;
      &lt;xsl:text&gt;&amp;#xA;&lt;/xsl:text&gt; &lt;!-- force a line break after each URL --&gt;
    &lt;/xsl:for-each&gt;       
  &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
        </pre></li><li>
        Call the XSLT processor and pipe its output to the desired
        command:
        <pre xml:space="preserve">
xsltproc opml2text.xsl input.opml | r2e add
        </pre></li><li>
        That's it.
      </li></ol>]]>
</description>
    </item>
    <item>
      <title>Hello Google Talk</title>
      <link>
      http://martinjansen.com/2005/08/24/google_talk.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml">
      Unless you are living behind the moon you've most likely noticed 
      that Google today unveiled its own 
      <a href="http://talk.google.com/" shape="rect">instant messaging thing</a>.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      Technically this is absolutely no big deal:  The service is based
      on the the <a href="http://jabber.org/" shape="rect">Jabber</a> protocol family, 
      which isn't much more than a fancy name for a bunch of RFCs 
      describing data exchange via <acronym>XML</acronym>.  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 <a href="http://www.jabber.org/software/servers.shtml" shape="rect">server
      implementations</a> available &#8212; commercial and non-commercial.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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 <a href="http://gmail.com/" shape="rect">GMail</a>
      user can automagically log in to the IM service.  No sign-up
      required and the user base is just there.
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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.
    </p>]]>
</description>
    </item>
    <item>
      <title>Distributed Version Control</title>
      <link>http://martinjansen.com/2005/08/06/scm.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml">Ian Bicking <a href="http://blog.ianbicking.org/distributed-vs-centralized-scm.html" shape="rect">writes</a>:</p><blockquote xmlns="http://www.w3.org/1999/xhtml">
      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".
    </blockquote><p xmlns="http://www.w3.org/1999/xhtml">
      Call me antiquate, but this sounds like a maintenance nightmare.  
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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 <a href="http://www.kernel.org/pub/software/scm/git/docs/git.html" shape="rect">git</a>
      or some other nerd tool ...)
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      (Via <a href="http://www.planetmysql.org/" shape="rect">Planet MySQL</a>)
    </p>]]>
</description>
    </item>
    <item>
      <title>Firing Alan Kay</title>
      <link>http://martinjansen.com/2005/07/22/alan_kay.html</link>
      <description>
        <![CDATA[<p xmlns="http://www.w3.org/1999/xhtml">
      Feel like improving your reputation?  Go and <a href="http://blogs.siliconvalley.com/gmsv/2005/07/hewlettpackards.html" shape="rect">fire Alan Kay</a>.  
      Way to go, guys!
    </p><p xmlns="http://www.w3.org/1999/xhtml">
      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.
    </p>]]>
</description>
    </item>
  </channel>
</rss>
