<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>El Tramo</title>
	<atom:link href="http://el-tramo.be/feed" rel="self" type="application/rss+xml" />
	<link>http://el-tramo.be</link>
	<description>Remko Tronçon&#039;s Homepage</description>
	<lastBuildDate>Mon, 21 Dec 2009 10:20:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Beautiful (XMPP) Testing</title>
		<link>http://el-tramo.be/blog/beautiful-xmpp-testing</link>
		<comments>http://el-tramo.be/blog/beautiful-xmpp-testing#comments</comments>
		<pubDate>Mon, 02 Nov 2009 14:43:20 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Swift]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Jabber]]></category>
		<category><![CDATA[Nothing But Nets]]></category>
		<category><![CDATA[O’Reilly]]></category>
		<category><![CDATA[Unit Testing]]></category>
		<category><![CDATA[XMPP]]></category>

		<guid isPermaLink="false">http://el-tramo.be/?p=540</guid>
		<description><![CDATA[
O’Reilly recently released the book Beautiful Testing, a collection of essays about testing and QA in general. As I mentioned earlier, I wrote an article in that book on (unit) testing XMPP protocols, using Swift as a motivating example. Since the book’s scope may (oddly enough) not always be as interesting for developers in general, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://oreilly.com/catalog/9780596159825"><img class="alignright" style="float: right;" src="http://covers.oreilly.com/images/9780596159825/cat.gif" alt="" width="144" height="189" /></a></p>
<p>O’Reilly recently released the book <em><a href="http://oreilly.com/catalog/9780596159825">Beautiful Testing</a></em>, a collection of essays about testing and QA in general. As I <a href="/blog/beautiful-xmpp-testing-intro">mentioned earlier</a>, I wrote an article in that book on (unit) testing XMPP protocols, using <a href="http://swift.im">Swift</a> as a motivating example. Since the book’s scope may (oddly enough) not always be as interesting for developers in general, I released my article under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution</a> license (thanks to the good folks from O’Reilly for encouraging us to do this), which you can find <a href="/documents/beautiful-xmpp-testing/index.php">here</a> (or directly from my <a href="/git/beautiful-xmpp-testing/">Git repository</a>). The original excerpt from the book (including the index, list of biographies, and all the fancy artwork) is also <a href="/documents/beautiful-xmpp-testing/BeautifulXMPPTesting-OReilly.pdf">available for download</a> under the same license.</p>
<p>I of course encourage you to buy either the PDF or dead tree version of the book, as all the proceeds of the book go to <a href="http://www.nothingbutnets.net/">charity</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/beautiful-xmpp-testing/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Watch</title>
		<link>http://el-tramo.be/blog/the-watch</link>
		<comments>http://el-tramo.be/blog/the-watch#comments</comments>
		<pubDate>Fri, 04 Sep 2009 18:23:59 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Casio]]></category>
		<category><![CDATA[Jaeger-LeCoultre]]></category>
		<category><![CDATA[Reverso]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Swatch]]></category>
		<category><![CDATA[Switzerland]]></category>
		<category><![CDATA[Watches]]></category>

		<guid isPermaLink="false">/?p=490</guid>
		<description><![CDATA[
When I was a kid, I used to be fascinated by Swiss clocks and watches (actually, mostly anything that was made in Switzerland). However, my attention in watches seems to have faded shortly after I got my very own black &#38; red strapped Swatch: only a few years later, I replaced the Swatch with a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="/files/blog/the-watch.jpg" alt="" width="173" height="173" /></p>
<p>When I was a kid, I used to be fascinated by Swiss clocks and watches (actually, mostly anything that was made in Switzerland). However, my attention in watches seems to have faded shortly after I got my very own black &amp; red strapped Swatch: only a few years later, I replaced the Swatch with a digital Casio with built-in calculator, because it looked flashy and cool. I have to admit that the watches I wore (if any) haven’t really improved much since then. However, since I recently came to be without a timepiece again, I took the opportunity to read up on watches before buying a new one. I ordered the first well-rated book on the subject I could find, which happened to be Gene Stone&#8217;s <em><a href="http://www.amazon.co.uk/Watch-Gene-Stone/dp/0810930935/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1251921623&amp;sr=1-1">The Watch</a></em>. It turns out that this book was one of the most entertaining books I recently read, and I must admit I have become a watch fanatic ever since I read it.</p>
<p><span id="more-490"></span></p>
<p><em>The Watch</em> begins with a history of time, covering all kinds of timekeeping tools, from the pyramids of ancient egypt, up to the cell phones of today. After this brief history, the author motivates his choice of 50 brands that he describes in detail in the remainder of the book. He concludes the introduction with an entertaining comparison of the watch manufacturer scene with an old European court, consisting of a king, a queen, a prime minister, a knight, and so on.</p>
<p>The main part of the book consists of an in-depth description of 50 of the most notable and famous historical watch brands out there, old and new, literally ranging from A (Lange &amp; Söhne) to Z(enith). The book tells the (often very extended) history behind each brand, the multitude of relations between the different watchmakers, and the most famous watches of each brand. These stories are a very interesting read, and serve as an excellent crash course into the world of watches for newcomers like me (whose knowledge of brands is limited to the obvious Rolex, Swatch, and Omega). However, what really puts the cherry on the cake are undoubtedly the 500 gorgeous high-quality pictures of watches and their movements, depicted in extremely high detail. On any given day, I find it fascinating to pick up the book, flip through the pages, and enjoy just looking at these photos for a while.</p>
<p>After the theory behind the watches and their history, the last part of the book focuses on the actual owning, exploring, and collecting of watches. Besides a handful of tips from the author, this part comes with several testimonies from different people, talking about how they got interested in watches, why they are so fascinated about them, and which one is their ultimate favorite. On top of this, the author created a few top 10s of watches, including “models that everybody should know”, “models that are fun to look at”, “models that look good”, and “brands to look out for”. Again, very valuable information for the uninitated like me.</p>
<p>You can feel that the author has a passion for watches, knows what he’s talking about, and put a lot of love into this book to share his passion and knowledge with the rest of the world. All this makes <em>The Watch</em> both a fascinating and entertaining to read, or, if you don’t feel like reading, a nice way to feast your eyes on pretty shiny pictures.</p>
<p>If, like me, you&#8217;re interested in reading even more about watches after finishing <em>The Watch</em>, I can recommend <a href="http://www.amazon.co.uk/Cult-Watches-Worlds-Enduring-Classics/dp/1858943876"><em>Cult Watches: The World&#8217;s Enduring Classics</em></a> by Michael Balfour. Where <em>The Watch</em> discusses the history of many brands and a variety of their collections, <em>Cult Watches</em> picks out 30 specific “cult” watches (including my favorite, <a href="http://jaeger-lecoultre.com">Jaeger-LeCoultre</a>’s <a href="http://www.jaeger-lecoultre.com/eu/en/watches/reverso-classique/grande-reverso-976">Reverso</a>), and tells the detailed story behind each watch and its manufacturer, also accompanied by a lot (though not nearly as many) of high-quality photographs of the insides and outsides of these timepieces. And although most of the watches in this book are mentioned in <em>The Watch</em> as well, some brands that are only mentioned briefly in that book (such as Longines) are mentioned in more detail in <em>Cult Watches</em>. All this makes <em>Cult Watches</em> a nice addition to Gene Stone’s broad reference book.</p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/the-watch/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>“XMPP: The Definitive Guide” Code Examples</title>
		<link>http://el-tramo.be/blog/xmpp-tdg-code</link>
		<comments>http://el-tramo.be/blog/xmpp-tdg-code#comments</comments>
		<pubDate>Mon, 13 Jul 2009 17:06:01 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Jabber]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SleekXMPP]]></category>
		<category><![CDATA[XMPP]]></category>
		<category><![CDATA[XMPP-TDG]]></category>

		<guid isPermaLink="false">/?p=473</guid>
		<description><![CDATA[Although the primary focus of XMPP: The Definitive Guide is explaning the XMPP protocol and all its extensions through text and illustrations, we also included a few Python code examples to help people get started with implementing their own ideas. In fact, we devoted a whole chapter to building an XMPP application, starting out with [...]]]></description>
			<content:encoded><![CDATA[<p>Although the primary focus of <a href="http://oreilly.com/catalog/9780596521264/"><em>XMPP: The Definitive Guide</em></a> is explaning the XMPP protocol and all its extensions through text and illustrations, we also included a few Python code examples to help people get started with implementing their own ideas. In fact, we devoted a whole chapter to building an XMPP application, starting out with a simple bot implementation, but gradually extending the application into a full server component. For people who want to try this out for themselves, we’re releasing the <a href="/git/xmpp-tdg/snapshot/xmpp-tdg-master.zip">source code of all code examples</a>, including a <a href="/git/xmpp-tdg/tree/code/EchoBot">simple echo bot</a>, and different variants of the <a href="/git/xmpp-tdg/tree/code/CheshiR">CheshiR microblogging platform XMPP interface</a>.</p>
<p><span id="more-473"></span></p>
<p>All examples are built using the lightweight <a href="http://code.google.com/p/sleekxmpp/">SleekXMPP</a> Python XMPP library. In fact, SleekXMPP is so lightweight that we included a version in the source bundle, making it even easier to get started implementing your own bots and components.</p>
<p>Do bear in mind that these examples only serve illustrative purposes for the book, so don’t expect very robust code. Although making this code fail-safe is not really our primary goal (since that would involve a lot of code that would only distract the reader), we <em>do</em> welcome bug reports or fixes.</p>
<p>The code examples are available as a <a href="/git/xmpp-tdg/snapshot/xmpp-tdg-master.zip">source package</a>, or directly from the <a href="/git/xmpp-tdg">Git repository</a> (mirrored on <a href="http://github.com/remko/xmpp-tdg">GitHub</a>). We will soon put a link to the package on <a href="http://oreilly.com/catalog/9780596521264/">the book’s webpage</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/xmpp-tdg-code/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrating from Openfire to Prosody</title>
		<link>http://el-tramo.be/blog/openfire-to-prosody-migration</link>
		<comments>http://el-tramo.be/blog/openfire-to-prosody-migration#comments</comments>
		<pubDate>Fri, 03 Jul 2009 07:07:19 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Jabber]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Openfire]]></category>
		<category><![CDATA[Prosody]]></category>
		<category><![CDATA[XMPP]]></category>

		<guid isPermaLink="false">/?p=426</guid>
		<description><![CDATA[Because Openfire has been hogging too much of my limited el-tramo.be server resources lately, and because I don’t need a beast of an XMPP server for only 2 users, I decided to replace it by the lightweight Prosody. The migration went flawless, with the help of two tools: Sleek Migrate, and a Prosody XEP-0227 Importer.

First [...]]]></description>
			<content:encoded><![CDATA[<p>Because <a href="http://www.igniterealtime.org/projects/openfire/index.jsp">Openfire</a> has been hogging too much of my limited <a href="http://el-tramo.be">el-tramo.be</a> server resources lately, and because I don’t need a beast of an XMPP server for only 2 users, I decided to replace it by the lightweight <a href="http://prosody.im/">Prosody</a>. The migration went flawless, with the help of two tools: <a href="http://www.kismith.co.uk/wordpress/index.php/2008/11/30/sleek-migrate/">Sleek Migrate</a>, and a <a href="/git/xep227-to-prosody">Prosody XEP-0227 Importer</a>.</p>
<p><span id="more-426"></span></p>
<p>First of all, I used Sleek Migrate to retrieve the roster (and other) data from the server, and store it in the standard <a href="http://xmpp.org/extensions/xep-0227.html">XEP-0227</a> format. I extended the tool a bit such that it supports Openfire’s User Import/Export format, a format generated by an <a href="http://www.igniterealtime.org/projects/openfire/plugins/userimportexport/readme.html">Openfire plugin</a> that is distributed with the server software by default. Using this format as input for Sleek Migrate avoids the need to create a user file manually. The changes I made to Sleek Migrate are currently available from <a href="/git/sleekmigrate">my Git repository</a>, awaiting to be pushed to the main repository.</p>
<p>I then wrote a short script that populates the Prosody data dir with the server data from the XEP-0227 XML file. Currently, the script only generates roster and account data, but adding <a href="http://xmpp.org/extensions/xep-0054.html">vCard</a> and <a href="http://xmpp.org/extensions/xep-0049.html">Private XML Storage</a> (used amongst others to store <a href="http://xmpp.org/extensions/attic/xep-0048-1.0.html">MUC bookmarks</a>) should not be very hard. Until Prosody creates a native XEP-0227 importer, you can get the script from <a href="/git/xep227-to-prosody">my Git repository</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/openfire-to-prosody-migration/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Integrating DocBook with WordPress</title>
		<link>http://el-tramo.be/blog/integrating-docbook-with-wordpress</link>
		<comments>http://el-tramo.be/blog/integrating-docbook-with-wordpress#comments</comments>
		<pubDate>Sat, 27 Jun 2009 18:28:36 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Writing]]></category>
		<category><![CDATA[DocBook]]></category>
		<category><![CDATA[DocBook Kit]]></category>
		<category><![CDATA[DocBook XSL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://el-tramo.be/?p=409</guid>
		<description><![CDATA[I added a DocBook XSL customization layer to my DocBook Kit that outputs an HTML/PHP version of the document that automatically integrates with a WordPress blog. The stylesheet also (optionally) adds a link to the downloadable PDF of the document. An example document integrating with this blog can be seen here.
The custom stylesheet is based [...]]]></description>
			<content:encoded><![CDATA[<p>I added a DocBook XSL <a href="/git/docbook-kit/tree/style/wordpress">customization layer</a> to my <a href="/blog/docbook-kit">DocBook Kit</a> that outputs an HTML/PHP version of the document that automatically integrates with a WordPress blog. The stylesheet also (optionally) adds a link to the downloadable PDF of the document. An example document integrating with this blog can be seen <a href="/documents/example/index.php">here</a>.</p>
<p><span id="more-409"></span>The custom stylesheet is based on the standard DocBook XSL XHTML stylesheet. However, instead of inserting an HTML header, it inserts PHP calls to include the WordPress headers and footers. The only tricky part of this is to tell WordPress what the title of the resulting page should be. I hacked this in by creating a class with the bare minimum fields required by <code>wp_title() </code>(which is used by WordPress to print the title of the document). The resulting template looks like this:</p>
<blockquote>
<pre>&lt;?php
  require('../wordpress/wp-blog-header.php');
  class MyPost { var $post_title = "My Title"; }
  $wp_query-&gt;is_home = false;
  $wp_query-&gt;is_single = true;
  $wp_query-&gt;queried_object = new MyPost();
  get_header();
?&gt;
&lt;div id="content" class="narrowcolumn" role="main"&gt;
  ...
&lt;/div&gt;
&lt;?php
  get_sidebar();
  get_footer();
?&gt;</pre>
</blockquote>
<p>The DocBook kit is available from my <a href="/git/docbook-kit">Git repository</a> (or on <a href="http://github.com/remko/docbook-kit">GitHub</a>, or as a <a href="/git/docbook-kit/snapshot/docbook-kit-master.zip">ZIP</a> file). More information about the kit can be found <a href="/blog/docbook-kit">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/integrating-docbook-with-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“Beautiful Testing” XMPP Chapter</title>
		<link>http://el-tramo.be/blog/beautiful-xmpp-testing-intro</link>
		<comments>http://el-tramo.be/blog/beautiful-xmpp-testing-intro#comments</comments>
		<pubDate>Sun, 03 May 2009 11:57:21 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Swift]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Jabber]]></category>
		<category><![CDATA[Nothing But Nets]]></category>
		<category><![CDATA[O’Reilly]]></category>
		<category><![CDATA[Unit Testing]]></category>
		<category><![CDATA[XMPP]]></category>

		<guid isPermaLink="false">http://el-tramo.be/?p=367</guid>
		<description><![CDATA[Adam Goucher and Tim Riley (Director of QA at Mozilla) announced a few months ago that they are putting together a Beautiful Testing book for O’Reilly. I took the opportunity to write a chapter about testing in the context of XMPP (more specifically, about testing protocol implementations in Swift),  and just submitted the final [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adam.goucher.ca/">Adam Goucher</a> and Tim Riley (Director of QA at Mozilla) <a href="http://adam.goucher.ca/?p=684">announced</a> a few months ago that they are putting together a <a href="http://oreilly.com/catalog/9780596159818"><em>Beautiful Testing</em></a> book for O’Reilly. I took the opportunity to write a chapter about testing in the context of XMPP (more specifically, about testing protocol implementations in <a href="http://swift.im">Swift</a>),  and just submitted the final draft for technical review. The book is expected to be released this August.</p>
<p><span id="more-367"></span>Although there are many types of testing being done in the XMPP world, the chapter focuses on the beauty of testing the functionality of XMPP protocol implementations. After a brief introduction on XMPP, it starts out with a description of unit testing simple IQ request/response protocols, and  then gradually moves on to higher-level testing of more complex, multi-stage protocols such as session initialization. As you might expect from a developer like me, the chapter is quite heavy on the (C++) code, but I’m told it compensates for the rest of the book <img src='http://el-tramo.be/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>As with all other books in the O’Reilly “Beautiful” series (which started with <em><a href="http://oreilly.com/catalog/9780596510046/">Beautiful Code</a></em>, but has since been followed up by <em><a href="http://oreilly.com/catalog/9780596517984/">Beautiful Architecture</a></em>, <em><a href="http://oreilly.com/catalog/9780596518028/">Beautiful Teams</a></em>, <em><a href="http://oreilly.com/catalog/9780596527488/">Beautiful Security</a></em>, and <em><a href="http://oreilly.com/catalog/9780596157111/">Beautiful Data</a></em>), all proceeds of the book go to charity, in this case <a href="http://www.nothingbutnets.net/">“Nothing But Nets”</a> (which provides mosquito netting to malaria infested areas of Africa). This means that I can plug this book as much as I want, and still have the feeling I’m actually doing a noble, unselfish thing. (contrary to when I casually mention that you can buy our book <em><a href="http://oreilly.com/catalog/9780596521264/">XMPP: The Definitive Guide</a></em> at very sharp prices these days). Some time after the book’s release this summer, I will even make a free version of the chapter available here, so check back soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/beautiful-xmpp-testing-intro/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Kick-starting a DocBook Project</title>
		<link>http://el-tramo.be/blog/docbook-kit</link>
		<comments>http://el-tramo.be/blog/docbook-kit#comments</comments>
		<pubDate>Wed, 29 Apr 2009 18:27:43 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Writing]]></category>
		<category><![CDATA[DocBook]]></category>
		<category><![CDATA[DocBook Kit]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://el-tramo.be/?p=332</guid>
		<description><![CDATA[When I started writing XMPP: The Definitive Guide, I switched from LaTeX to DocBook as my writing tool, mainly because DocBook was O’Reilly’s suggested format. After a few months of writing with DocBook, I started getting quite attached to the format: not only does it force you to separate presentation from content, the strict XML [...]]]></description>
			<content:encoded><![CDATA[<p>When I started writing <a href="http://oreilly.com/catalog/9780596157197/"><em>XMPP: The Definitive Guide</em></a>, I switched from LaTeX to <a href="http://www.docbook.org/">DocBook</a> as my writing tool, mainly because DocBook was O’Reilly’s suggested format. After a few months of writing with DocBook, I started getting quite attached to the format: not only does it force you to separate presentation from content, the strict XML format allows you to easily write tools to transform and validate your document. For example, for the XMPP book, we had several short Python scripts that checked whether the stanzas used in the book were well-formed, whether all web URLs were valid, &#8230; Today, I use DocBook for practically all of my documents. Because getting a DocBook environment up requires putting together quite a few pieces from different places, I created a <a href="/git/docbook-kit">“DocBook kit”</a> to be able to start writing a new DocBook project without much hassle.</p>
<p><span id="more-332"></span></p>
<p>Starting a DocBook project requires a few elementary tools to be installed:</p>
<ul>
<li>The <a href="http://www.docbook.org/schemas/">DocBook XML schemas</a>. These are used to validate whether your document is a legal DocBook document.</li>
<li>The <a href="http://docbook.sourceforge.net/">DocBook XSL stylesheets</a>. These are used to transform your DocBook input file into other formats, such as HTML or XSL-FO (a format which can be converted to PDF)</li>
<li>XML and XSL processing tools. These tools take the schemas and stylesheets mentioned above, and apply them to your document to do the actual checking and transformation. I use <a href="http://xmlsoft.org/">xmllint</a> and <a href="http://www.xmlsoft.org/XSLT/xsltproc2.html">xsltproc</a> (available out of the box on many platforms and distributions), but other tools can be used as well (e.g. <a href="http://saxon.sourceforge.net/">Saxon</a> or <a href="http://xml.apache.org/xalan-j/">Xalan</a>)</li>
<li>An XSL-FO processor, to transform the intermediate XSL-FO format generated by the stylesheets to PDF. I use the Free <a href="http://xmlgraphics.apache.org/fop/">Apache FOP</a>, but commercial tools such as <a href="http://www.renderx.com/">RenderX XEP</a> and <a href="http://www.antennahouse.com/">AntennaHouse</a> are very popular for this too.</li>
</ul>
<p>Once you have all these tools, you need to tie them all together to be able to get from your DocBook file to your desired output format, such as PDF or HTML. Because this involves quite some boilerplate scripting, I created a DocBook kit to make this as light as possible. The DocBook kit comes with a Makefile, which you can use to do all the work for you. The kit also automatically downloads the DocBook XML schemas and XSL stylesheets, making it possible to start working on a DocBook project on a machine with only some basic tools (<code>xmllint</code> and <code>xsltproc</code>) installed.</p>
<p>To use the kit, simply drop it in the directory of your project, and create a minimal <code>Makefile</code> such as the following one:</p>
<blockquote>
<pre><code># The toplevel DocBook file of our project
DOCUMENT = MyDocument.xml</code></pre>
<pre><code># Include the DocBook Kit's makefile rules
include docbook-kit/tools/Makefile.inc</code></pre>
</blockquote>
<p>This makes several <code>make</code> commands available, such as:</p>
<ul>
<li><code>make</code>, <code>make pdf</code>, <code>make html</code>, <code>make txt</code>: Creates an HTML, PDF, and/or TXT file of your document.</li>
<li><code>make check</code>: Validates your document syntactically.</li>
<li><code>make check-spelling</code>: Runs a spell checker on your document.</li>
<li><code>make package</code>: Creates a <em>flat</em> DocBook file (i.e. one with all the parts included using <a href="http://www.w3.org/TR/xinclude/">XInclude</a>s expanded), normalizes all figure names, and packages the result up into a tarball.</li>
</ul>
<p>The makefile also tracks the dependencies of the document, making sure that your document is rebuilt whenever one of its dependencies (e.g. images, document parts included using XInclude) changes.</p>
<p>Besides tools, the kit also provides a <em>customization layer</em> around the standard XSL stylesheets. These customizations change fonts, spacings, and other presentation parameters for the output document. You can use these as an example on how to make your DocBook document look the way <em>you</em> want. Detailed information on using and customizing the DocBook XSL stylesheets can be found in Bob Stayton’s <em><a href="http://www.sagehill.net/docbookxsl/">DocBook XSL: The Complete Guide</a></em>.</p>
<p>The DocBook kit is available from my <a href="/git/docbook-kit">Git repository</a> (or on <a href="http://github.com/remko/docbook-kit">GitHub</a>, or as a <a href="/git/docbook-kit/snapshot/docbook-kit-master.zip">ZIP</a> file), and comes with an <a href="/git/docbook-kit/tree/example">example</a> of a simple project using the kit. More tools and features will be added in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/docbook-kit/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>XMPP 101 @ FOSDEM</title>
		<link>http://el-tramo.be/blog/xmpp-101-fosdem</link>
		<comments>http://el-tramo.be/blog/xmpp-101-fosdem#comments</comments>
		<pubDate>Wed, 04 Mar 2009 19:00:58 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Jabber]]></category>
		<category><![CDATA[FOSDEM]]></category>
		<category><![CDATA[Talks]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[XMPP]]></category>

		<guid isPermaLink="false">http://el-tramo.be/?p=303</guid>
		<description><![CDATA[The slides of the “XMPP 101” talk that Peter and I gave at FOSDEM are available below. This presentation gives a fast-paced introduction to XMPP, and is mostly based on “XMPP: The Definitive Guide”. If all goes well, we will be giving a more extended version of this talk as a tutorial at OSCON.


PDF
]]></description>
			<content:encoded><![CDATA[<p>The slides of the <em>“XMPP 101”</em> talk that <a href="http://stpeter.im">Peter</a> and I gave at <a href="http://fosdem.org">FOSDEM</a> are available below. This presentation gives a fast-paced introduction to XMPP, and is mostly based on <a href="http://oreilly.com/catalog/9780596157197/">“XMPP: The Definitive Guide”</a>. If all goes well, we will be giving a more extended version of this talk as a tutorial at <a href="http://en.oreilly.com/oscon2009">OSCON</a>.</p>
<p><span id="more-303"></span></p>
<div style="width:425px;text-align:left" id="__ss_1097174"><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=xmpp101-key-090303164623-phpapp01&#038;rel=0&#038;stripped_title=xmpp-101" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=xmpp101-key-090303164623-phpapp01&#038;rel=0&#038;stripped_title=xmpp-101" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p style="text-align: center"><a href="http://el-tramo.be/files/blog/xmpp-101-fosdem.pdf">PDF</a></p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/xmpp-101-fosdem/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Swift Messaging</title>
		<link>http://el-tramo.be/blog/swift-announce</link>
		<comments>http://el-tramo.be/blog/swift-announce#comments</comments>
		<pubDate>Tue, 03 Mar 2009 18:31:25 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Swift]]></category>
		<category><![CDATA[IM]]></category>
		<category><![CDATA[Jabber]]></category>
		<category><![CDATA[XMPP]]></category>

		<guid isPermaLink="false">http://el-tramo.be/?p=291</guid>
		<description><![CDATA[I’m excited to announce a new player in the Jabber/XMPP game: Swift. Shortly after finishing the XMPP book, I started working on Swift, a pragmatic, cross-platform, user-friendly IM client. Together with Kevin Smith, we are building this project from the ground up, driving its development using agile methodologies. Underneath the IM client, we are working [...]]]></description>
			<content:encoded><![CDATA[<p>I’m excited to announce a new player in the Jabber/XMPP game: <a href="http://swift.im">Swift</a>. Shortly after finishing the <a href="http://oreilly.com/catalog/9780596157197/">XMPP book</a>, I started working on Swift, a pragmatic, cross-platform, user-friendly IM client. Together with <a href="http://kismith.co.uk">Kevin Smith</a>, we are building this project from the ground up, driving its development using agile methodologies. Underneath the IM client, we are working on an extensible and robust XMPP library, written in C++.</p>
<p>Until we launch the project and its <a href="http://swift.im">website</a>, you can subscribe to the Swift <a href="http://blog.swift.im">blog</a> and <a href="http://identi.ca/group/swift">identi.ca group</a> to stay up to date with the latest news and developments around the project. Thanks to <a href="http://dave.cridland.net">Dave Cridland</a> for lending us his graphical capabilities and drawing us a pretty logo.</p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/swift-announce/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>We have an animal</title>
		<link>http://el-tramo.be/blog/xmppbook-cover</link>
		<comments>http://el-tramo.be/blog/xmppbook-cover#comments</comments>
		<pubDate>Sun, 08 Feb 2009 12:25:02 +0000</pubDate>
		<dc:creator>Remko Tronçon</dc:creator>
				<category><![CDATA[Jabber]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[O'Reilly]]></category>
		<category><![CDATA[XMPP]]></category>
		<category><![CDATA[XMPP-TDG]]></category>

		<guid isPermaLink="false">http://el-tramo.be/?p=274</guid>
		<description><![CDATA[O’Reilly just sent us the cover for our upcoming XMPP Book, and it seems we got the world’s smallest ungulate: the lesser mouse-deer. I haven’t seen one in real life before, am not sure I ever want to, but still: great! Have a look below to see what the cover of the book will look [...]]]></description>
			<content:encoded><![CDATA[<p>O’Reilly just sent us the cover for our <a href="http://oreilly.com/catalog/9780596157197/">upcoming XMPP Book</a>, and it seems we got the world’s smallest ungulate: the <a href="http://en.wikipedia.org/wiki/Kanchil">lesser mouse-deer</a>. I haven’t seen one in real life before, am not sure I ever want to, but still: great! Have a look below to see what the cover of the book will look like when it hits the stores in 2 months.</p>
<p><span id="more-274"></span></p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid grey;" title="Cover of “XMPP: The Definitive Guide”" src="http://el-tramo.be/files/blog/xmppbook-cover.png" alt="" width="350" height="460" /></p>
]]></content:encoded>
			<wfw:commentRss>http://el-tramo.be/blog/xmppbook-cover/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
