<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://planet.jabber.org/">
	<title>Planet Jabber</title>
	<link>http://planet.jabber.org/</link>
	<description>Planet Jabber - http://planet.jabber.org/</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="http://el-tramo.be/?p=186" />
			<rdf:li rdf:resource="http://senu.rootnode.net/blog/index.php?/archives/7-guid.html" />
			<rdf:li rdf:resource="http://metajack.wordpress.com/?p=102" />
			<rdf:li rdf:resource="http://metajack.wordpress.com/?p=91" />
			<rdf:li rdf:resource="http://metajack.wordpress.com/?p=82" />
			<rdf:li rdf:resource="tag:process-one.net,2008:en/imtrends/26.278" />
			<rdf:li rdf:resource="http://www.kismith.co.uk/wordpress/?p=92" />
			<rdf:li rdf:resource="http://el-tramo.be/?p=83" />
			<rdf:li rdf:resource="https://stpeter.im/?p=2249" />
			<rdf:li rdf:resource="http://gsoc.safasofuoglu.org/?p=22" />
			<rdf:li rdf:resource="http://ayena.de/gsoc08_bosh" />
			<rdf:li rdf:resource="http://ayena.de/xeps-history-development" />
			<rdf:li rdf:resource="http://www.nanoant.com/?p=40" />
			<rdf:li rdf:resource="http://ayena.de/inter-project" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-16882295.post-6857593686001896212" />
			<rdf:li rdf:resource="http://www.tigase.org/1436 at http://www.tigase.org" />
			<rdf:li rdf:resource="urn:lj:livejournal.com:atom1:thetofu:72320" />
			<rdf:li rdf:resource="https://stpeter.im/?p=2237" />
			<rdf:li rdf:resource="https://stpeter.im/?p=2236" />
			<rdf:li rdf:resource="https://stpeter.im/?p=2235" />
			<rdf:li rdf:resource="https://stpeter.im/?p=2234" />
			<rdf:li rdf:resource="http://metajack.wordpress.com/?p=79" />
			<rdf:li rdf:resource="http://coccinella.im/274 at http://coccinella.im" />
			<rdf:li rdf:resource="http://alek.silverstone.name/12 at http://alek.silverstone.name" />
			<rdf:li rdf:resource="http://halr9000.com/article/585" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="http://el-tramo.be/?p=186">
	<title>Remko Tronçon: Trying out Git</title>
	<link>http://el-tramo.be/blog/psi-git</link>
	<content:encoded>&lt;p&gt;A while ago, the Psi development team switched from &lt;a href=&quot;http://darcs.net&quot;&gt;Darcs&lt;/a&gt; to &lt;a href=&quot;http://subversion.tigris.org&quot;&gt;Subversion&lt;/a&gt; for version control, because the Darcs pros (distributed, extremely simple and elegant) did not compensate for the cons any longer (slowness, non-scalability, ‘infinite’ merges, lack of community and tools, …). Our development was pretty central anyway at that time, so we decided that Subversion was good enough. However, we started to miss local commits more than we thought we would, and some of us are working on their own forks, which makes Subversion a suboptimal choice. We are therefore currently trying out &lt;a href=&quot;http://git.or.cz&quot;&gt;Git&lt;/a&gt; as a replacement, which should bring us all the good stuff from Darcs, combined with the speed and portability of Subversion. Note that during the experiment, we will not be updating our Subversion branch any more (which will soon cause breakage, since Subversion automatically updates changes to the external Iris repository).&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-186&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If you’re interested in following our latest developments from our experimental Git tree, simply clone our official repository through the following steps:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;git clone git://git.psi-im.org/psi.git
cd psi
git submodule init
git submodule update&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;To get the latest changes after an initial clone, execute the following commands&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;git pull
git submodule update&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you’re interested in knowing more about using Git, check out Scott Chacon’s excellent &lt;a href=&quot;http://gitcasts.com/posts/railsconf-git-talk&quot;&gt;Git talk&lt;/a&gt; (and accompanying &lt;a href=&quot;http://peepcode.com/products/git-internals-pdf&quot;&gt;book&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For fans of social networking, we also have a mirror of the official Psi repository on &lt;a href=&quot;http://github.com/psi-im&quot;&gt;GitHub&lt;/a&gt;. And while we’re on the topic of web interfaces: while waiting for an official web interface to our Git repository, you can check out an experimental one &lt;a href=&quot;http://git.el-tramo.be/browse/psi.git/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-28T01:25:06+00:00</dc:date>
	<dc:creator>Remko Tronçon</dc:creator>
</item>
<item rdf:about="http://senu.rootnode.net/blog/index.php?/archives/7-guid.html">
	<title>Paweł Wiejacha: End of the Google Summer of Code</title>
	<link>http://senu.rootnode.net/blog/index.php?/archives/7-End-of-the-Google-Summer-of-Code.html</link>
	<content:encoded>Google Summer of Code 2008 ended last week. I think it would be nice to
write a new blog entry about my project. So here is the mandatory
report. 
 &lt;br /&gt;&lt;a href=&quot;http://senu.rootnode.net/blog/index.php?/archives/7-End-of-the-Google-Summer-of-Code.html#extended&quot;&gt;Continue reading &quot;End of the Google Summer of Code&quot;&lt;/a&gt;</content:encoded>
	<dc:date>2008-08-27T20:45:16+00:00</dc:date>
	<dc:creator>Paweł Wiejacha</dc:creator>
</item>
<item rdf:about="http://metajack.wordpress.com/?p=102">
	<title>Jack Moffitt: Migrating To Ejabberd: The Gory Details</title>
	<link>http://metajack.wordpress.com/2008/08/27/migrating-to-ejabberd-the-gory-details/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Yesterday I blogged about &lt;a href=&quot;http://metajack.wordpress.com/2008/08/26/choosing-an-xmpp-server/&quot;&gt;choosing an XMPP server&lt;/a&gt;.  Once you’ve made this decision, it is time to get it set up and running great.  If this is your first XMPP server, this is often just some software installation and a little bit of configuration.  However, for those who already have an existing set up, or who have special data or run time requirements, this can involve a substantial amount of work.  It took us about a week to move from jabberd2 to ejabberd at &lt;a href=&quot;http://www.chesspark.com/&quot;&gt;Chesspark&lt;/a&gt;, and this is how we did it.  While I talk mostly about ejabberd and jabberd2, many of the issues are similar to those any deployment or redeployment would face.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What We Knew At The Start&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There were three main things that we need we needed to work on in order to transition to ejabberd.  These were authentication, data migration, and porting a custom server module.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Authentication&lt;/strong&gt;. Many sites already have a user database they they want to reuse for the XMPP service.  This almost never looks like the bare bones schema that the XMPP servers are configured to use by default.  The first task then becomes to configure the XMPP server to authenticate from this custom user data.&lt;/p&gt;
&lt;p&gt;Jabberd2 is a lot more configurable for database authentication than ejabberd.  For starters, it allows you to define the SQL query used to authenticate users right in the configuration file.  With ejabberd the choices are to write your own authentication module, modify the database authentication module to provide your own queries, or use external authentication via a script.&lt;/p&gt;
&lt;p&gt;External scripts are pretty easy in ejabberd, but we opted for modifying the queries used for authentication in the ejabberd source.  For anyone trying this themselves, the queries are all in src/odbc/odbc_queries.erl.&lt;/p&gt;
&lt;p&gt;The Chesspark service is open to the entire federated XMPP network, and we store member information for everyone in the same place.  This means that we must store the bare JID as opposed to just the node portion.  Some users are local to our server, like jack@chesspark.com, and some are not, such as metajack@gmail.com.  Only the local users will be used for XMPP authentication, but almost every XMPP server is written to expect usernames without domains, and ejabberd is no exception.&lt;/p&gt;
&lt;p&gt;Here is what ejabberd’s default authentication query looks like:&lt;/p&gt;
&lt;pre&gt;get_password(LServer, Username) -&amp;gt;
    ejabberd_odbc:sql_query(
        LServer,
        [&quot;select password from user &quot;
         &quot;where username='&quot;, Username, &quot;';&quot;]).&lt;/pre&gt;
&lt;p&gt;We changed it to:&lt;/p&gt;
&lt;pre&gt;get_password(LServer, Username) -&amp;gt;
    ejabberd_odbc:sql_query(
        LServer,
        [&quot;select password from member &quot;
         &quot;where lower(username)='&quot;, Username, &quot;@&quot;, LServer, &quot;';&quot;]).&lt;/pre&gt;
&lt;p&gt;This wasn’t very difficult at all.  We don’t need in-band registration, so we didn’t change all of the user creation and deletion queries, but those would be very similar to this one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data Migration.&lt;/strong&gt; Each XMPP server has its own format for storing data, and if you are switching from one server to another, you will probably want to take your data with you.  At Chesspark, we already had 400,000 users worth of rosters, private XML storage, and privacy lists, and we didn’t want our users to lose this information.  Our task was to figure out how to migrate all the jabberd2 data to a form ejabberd could use.&lt;/p&gt;
&lt;p&gt;Most XMPP server schemas are quite simple and quite similar.  We achieved 95% of the data migration by using SQL’s ALTER TABLE command to add, remove, and rename columns.  The only trouble we ran into was figuring out which columns in jabberd2 mapped to which columns in ejabberd and dealing with virtual hosts.&lt;/p&gt;
&lt;p&gt;Figuring out the mapping was pretty straightforward.  We made some users in a test database under the default ejabberd configuration and did some common operations.  Then we inspected the database tables and determined what the columns were for.  For example, we saved some private XML as a user, then looked at how ejabberd’s private_storage table stored and formatted the resulting data.  In almost every case, it was extremely simple to migrate the data.  The notable exception is privacy lists, which were stored in two tables in ejabberd instead of just one like jabberd2.  This was easily fixed up with a small Python script.&lt;/p&gt;
&lt;p&gt;Dealing with virtual hosts was a bit harder.  We run multiple servers at Chesspark to handle our branded chess sites like &lt;a href=&quot;http://www.wuchess.com/&quot;&gt;WuChess.com&lt;/a&gt;.  We wanted to move from multiple jabberd2 servers to a single ejabberd installation with virtual hosting.  Unfortunately, since ejabberd stores user names without domains, this enforces unique user names across all virtual hosts, a requirement we weren’t able to meet with our existing user data.  We decided to patch ejabberd to use the domain along with the user name to make this easier.&lt;/p&gt;
&lt;p&gt;These changes were very similar to the changes for authentication above and we modified nearly every query in odbc_queries.erl.  Unfortunately, not every function takes the parameter LServer which is the stringprepped domain, and this made the patch more difficult.  We had to add the LServer variable where it was missing, and then modify the ejabberd internals to pass this along in places where it didn’t already do so.  This was pretty easy, except for one or two places where ejabberd passed data in a giant list and we had to fix specific entries in the lists.&lt;/p&gt;
&lt;p&gt;Unfortunately, not all the SQL queries are in odbc_queries.erl as the code would have you believe.  We also had to patch the queries in other modules of the code where they had not yet been moved to odbc_queries.erl.  Hopefully the ejabberd team will finish moving these to one place in the future.&lt;/p&gt;
&lt;p&gt;After all this patching, it required a few days of testing and tuning to make sure everything was running smoothly.  Supporting virtual hosts by adding the domain to usernames is definitely something I feel should be in upstream ejabberd, and I will send my patch upstream to see if they will add this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Custom Module&lt;/strong&gt;. Chesspark is built from a set of components that implement and understand chess rules, player matching rules, and various other things.  These components must receive presence notifications to know when users are on and offline.  It can happen that a presence notification is slightly delayed and stanzas are sent to an offline client.  These don’t cause any harm, but they do take up disk space. With a lot of users in the database, this disk space can start to be substantial, so we wrote a custom server module in jabberd2 to ignore traffic to offline storage if it came from certain components.&lt;/p&gt;
&lt;p&gt;Porting this module turned out to be very simple.  It took me a few hours to write and test the module.  It would have taken a bit longer had this been my first ejabberd module instead of my second.  Most of the work involved figuring out various bits of the gen_mod API in ejabberd.  For those of you interested in writing or understand ejabberd modules, I highly recommend &lt;a href=&quot;http://anders.conbere.org/journal/&quot;&gt;Anders Conbere’s blog&lt;/a&gt; where he has provided &lt;a href=&quot;http://anders.conbere.org/journal/building-ejabberd-modules-part-1-compiling-erlang/&quot;&gt;several tutorials&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Putting Ejabberd Into Production&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After all this work and testing, it was time to put ejabberd into production.  We gave notice to the users, took the site offline, and began the data migration process.  This process took longer than our trial runs for some reason, totaling a little bit over an hour.&lt;/p&gt;
&lt;p&gt;Once the site came back up, we immediately noticed some problems that we had not caught in our testing.  First, database traffic was extremely high and load was about 4 times higher than we expected.  Next, we discovered that one of our client applications had an infinite loop bug triggered by receiving an echo of your own presence stanzas.  Finally, memory use on the ejabberd server was extreme, and over the next day or so it ran out of memory and crashed 3 times.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solving The Problems&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The database problems were the easiest to diagnose thanks to our &lt;a href=&quot;http://metajack.wordpress.com/2007/07/25/do-you-know-what-your-database-is-doing/&quot;&gt;database profiling tools&lt;/a&gt;.  It was easy to spot a query that was missing an index, and this immediately caused load to drop.  Query traffic was still much to high, and we found two causes for this.&lt;/p&gt;
&lt;p&gt;The first cause was our buggy client application which was in an infinite loop sending presence.  This caused a presence storm on the server, causing thousands of useless packets to be sent both to the server and to the user’s contacts.  This affected database queries because of the second problem.&lt;/p&gt;
&lt;p&gt;The other problem is that mod_privacy_odbc in ejabberd is just terrible.  It does two database queries, one for rosters and one for roster groups, for every single packet that is delivered to a local user.  It does this for the silly purpose of letting stanzas through from your roster contacts that would otherwise be blocked by your privacy settings.  Why this exists, I have no idea, but coupled with the presence storms, it caused a massive amount of database traffic.&lt;/p&gt;
&lt;p&gt;A combination of solutions was used to solve these problems.  First we pushed out an upgraded client that did not have the presence storm bug.  Next, we disabled mod_privacy_odbc temporarily to ease the database traffic.  After these were implemented, the server was in good shape, but our users who had contacts still running buggy clients were not.&lt;/p&gt;
&lt;p&gt;To solve the problem of people who refused to upgrade, we wrote a new ejabberd module called mod_sunshine, which stopped the presence storms.  mod_sunshine keeps track of duplicate presence sent from users and terminates their session if they send more than X duplicate presence stanzas in Y seconds.  Configured mod_sunshine to kill clients that sent more than 10 stanzas in 60 seconds removed nearly all of the presence storm traffic, and we dealt with the confused users who could not connect with apologetic emails and some upgrade hand holding.&lt;/p&gt;
&lt;p&gt;After some new indexes, a new client, and mod_sunshine, we were able to stabilize the database usage and turn back on mod_privacy_odbc.&lt;/p&gt;
&lt;p&gt;The last problem was memory use, which was much too high.  We are not sure yet of the true reason for ejabberd’s hungry memory needs, but we were able to get past the immediate problem of server crashes by upgrading from 2GB to 8GB of RAM on our XMPP server.  Also, moving from the latest stable release, ejabberd 2.0.1, to the trunk of ejabberd development removed a lot of the memory use.  Memory use is still quite high, about 1.4GB for ~250 simultaneous users, and we’ll continue to investigate.  There does seem to be one reported issue that TLS connections take up substantially more memory than non-TLS connections.  Thankfully, unlike jabberd2, we have not detected any major memory leaks, although we are still keeping a close eye on this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The End Result - Happy Users&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After a week of patching and preparation and a few frantic days of chasing down glitches, ejabberd is running quite well.  Our users are extolling the lower latency of the new server, which was our ultimate aim with the upgrade.  It seems we have achieved some success for now, but as always, we continue to measure and analyze performance and dream of new improvements we can make.&lt;/p&gt;
&lt;p&gt;If you have a story about an XMPP server upgrade gone right or wrong, anecdotes about your favorite or least favorite XMPP server, or just comments or question, please share them with us below.&lt;/p&gt;
&lt;img src=&quot;http://feeds.wordpress.com/1.0/categories/metajack.wordpress.com/102/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt; &lt;img src=&quot;http://feeds.wordpress.com/1.0/tags/metajack.wordpress.com/102/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/metajack.wordpress.com/102/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/metajack.wordpress.com/102/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/metajack.wordpress.com/102/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/metajack.wordpress.com/102/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/metajack.wordpress.com/102/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/metajack.wordpress.com/102/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/metajack.wordpress.com/102/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/metajack.wordpress.com/102/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/metajack.wordpress.com/102/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/metajack.wordpress.com/102/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=metajack.wordpress.com&amp;amp;blog=921950&amp;amp;post=102&amp;amp;subd=metajack&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-08-27T16:51:03+00:00</dc:date>
	<dc:creator>metajack</dc:creator>
</item>
<item rdf:about="http://metajack.wordpress.com/?p=91">
	<title>Jack Moffitt: Strophe Update: Public Repo, Authentication Testing, and More</title>
	<link>http://metajack.wordpress.com/2008/08/24/strophe-update-public-repo-authentication-testing-and-more/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;It’s taking a bit longer than planned to whip Strophe into releasable shape, but work is progressing well.  Since the last update, I have made a &lt;a href=&quot;http://code.stanziq.com/strophe&quot;&gt;new and better Trac instance&lt;/a&gt; for the project, made a &lt;a href=&quot;http://code.stanziq.com/svn/strophe/&quot;&gt;public SVN repository&lt;/a&gt; for the code, added SASL ANONYMOUS support to both libstrophe and Strophe.js, fixed DIGEST-MD5 authentication with ejabberd, did compatibility testing for &lt;a href=&quot;http://code.stanziq.com/strophe/wiki/LibstropheCompatibility&quot;&gt;both&lt;/a&gt; &lt;a href=&quot;http://code.stanziq.com/strophe/wiki/StropheJsCompatibility&quot;&gt;libraries&lt;/a&gt;, and wrote up a &lt;a href=&quot;http://code.stanziq.com/strophe/browser/trunk/strophejs/examples&quot;&gt;basic Strophe.js example&lt;/a&gt;.  Still to come are TLS fixes for libstrophe, porting the libstrophe documentation to Natural Docs, working around a &lt;a href=&quot;http://code.stanziq.com/strophe/ticket/4&quot;&gt;BOSH bug with Tigase&lt;/a&gt;, and writing up some examples.&lt;/p&gt;
&lt;p&gt;On a related note, &lt;a href=&quot;http://matthewwild.co.uk&quot;&gt;Matthew Wild&lt;/a&gt; is working on an &lt;a href=&quot;http://matthewwild.co.uk/projects/verse/verse_doc.xml&quot;&gt;XMPP library for Lua&lt;/a&gt; built on top of libstrophe.&lt;/p&gt;
&lt;p&gt;Also, &lt;a href=&quot;http://metajack.wordpress.com/2008/08/08/learn-about-xmpp-at-sxsw-2009/&quot;&gt;remember to vote&lt;/a&gt; for my XMPP &lt;a href=&quot;http://panelpicker.sxsw.com/ideas/view/1934&quot;&gt;talk&lt;/a&gt; and &lt;a href=&quot;http://panelpicker.sxsw.com/ideas/view/1933&quot;&gt;panel&lt;/a&gt; at SXSW 2009.&lt;/p&gt;
&lt;p&gt;UPDATED 8/26: It turns out Tigase and Openfire are smarter than the other XMPP servers with DIGEST-MD5 authentication, and that it wasn’t a bug at all.  My apologies (kudos) to the Tigase and Openfire teams.  The issue is now fixed in trunk.&lt;/p&gt;
&lt;img src=&quot;http://feeds.wordpress.com/1.0/categories/metajack.wordpress.com/91/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt; &lt;img src=&quot;http://feeds.wordpress.com/1.0/tags/metajack.wordpress.com/91/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/metajack.wordpress.com/91/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/metajack.wordpress.com/91/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/metajack.wordpress.com/91/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/metajack.wordpress.com/91/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/metajack.wordpress.com/91/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/metajack.wordpress.com/91/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/metajack.wordpress.com/91/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/metajack.wordpress.com/91/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/metajack.wordpress.com/91/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/metajack.wordpress.com/91/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=metajack.wordpress.com&amp;amp;blog=921950&amp;amp;post=91&amp;amp;subd=metajack&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-08-26T21:21:12+00:00</dc:date>
	<dc:creator>metajack</dc:creator>
</item>
<item rdf:about="http://metajack.wordpress.com/?p=82">
	<title>Jack Moffitt: Choosing An XMPP Server</title>
	<link>http://metajack.wordpress.com/2008/08/26/choosing-an-xmpp-server/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Choosing an XMPP server is a big decision.  Should you go with the popular one or the one written in the most popular language?  Perhaps you don’t plan to become a systems administrator and you need one which is easy to set up and maintain.  Unfortunately for people making this important choice, there is not much guidance published beyond features comparisons.  What follows is an account of our decision making process on XMPP servers - how we came to pick jabberd2 originally, and how we switched to ejabberd.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Brief History Of XMPP Servers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;XMPP began as Jabber and had only one server, jabberd.  As popularity of the protocol grew, more servers appeared, and now there are half a dozen major contenders, both commercial and open source.&lt;/p&gt;
&lt;p&gt;The main players these days seem to be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://jabberd.org/&quot;&gt;&lt;strong&gt;jabberd&lt;/strong&gt;&lt;/a&gt; - The original server.  It started in C, but now appears to be a mix of C and C++ code.  The main users for years was jabber.org itself.  The code may have changed substantially in the last couple of years, but I remember it being rather crufty.  Matthias Wimmer has been maintainer at least since 2004, and he continues to maintain it today, although it does go through some long periods of inactivity.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jabberd2.xiaoka.com/&quot;&gt;&lt;strong&gt;jabberd 2.x&lt;/strong&gt;&lt;/a&gt; - A rewrite of jabberd, originally by Rob Norris.  The code is pure C, modular, and fairly easy to understand.  Chesspark picked this to start with in 2006.  Another notable user of jabberd 2.x is Meebo.  Unfortunately it was abandoned by its original maintainers some time ago.  Tomas Sterna stepped up to the plate and took over the project, and it is now actively maintained again.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ejabberd.im&quot;&gt;&lt;strong&gt;ejabberd&lt;/strong&gt;&lt;/a&gt; - An XMPP server written in &lt;a href=&quot;http://erlang.org/&quot;&gt;Erlang&lt;/a&gt; which claims to be quite scalable.  Erlang is the language created decades ago by Ericcson to power their telephone switches.  It has many features that make it well suited for XMPP servers.  ejabberd has been around and active since early 2005, and is supported officially by Process One.  It also has a growing developer community.  Jabber.org switched from jabberd to ejabberd some time ago, and continues to run ejabberd today.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.igniterealtime.org/projects/openfire/index.jsp&quot;&gt;&lt;strong&gt;Openfire&lt;/strong&gt;&lt;/a&gt; - A Java server written by JIVE Software.  This was formerly a commercial product called Wildfire.  I have no personal experience with it, but it appears to have an active community.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.tigase.org&quot;&gt;&lt;strong&gt;Tigase&lt;/strong&gt;&lt;/a&gt; -Another Java server that started in late 2004.  It is actively maintained.  I have no personal experience with Tigase other than meeting Artur at the recent XMPP Summit, but the Seesmic folks speak very highly of the project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This list is incomplete.  Notable omissions include Google Talk (not publically available), Jabber XCP (the commercial offering from Jabber.com), and djabberd (Danga’s jabber server written in Perl).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chesspark’s Initial Decision&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Chesspark chose jabberd2 as its XMPP server about 3 years ago.  I recall being impressed with the clean and modular code base as well as its ability to change the SQL queries right in the configuration file.  It also supported PostgreSQL which was the RDBMS we preferred.  I don’t think that Tigase or ejabberd were considered; they were likely too young at the time.  Jabberd was the only other real choice, but we were not impressed with the code.&lt;/p&gt;
&lt;p&gt;One major factor which influenced our decision was code readability and maintainability.  We wanted an XMPP server that we could patch ourselves if needed, and we didn’t want to be stuck in case the project was abandoned down the road.  This turned out to be a wise decision - the jabberd 2.x project was unmaintained for a long period while we used it.  Over the last few years we’ve made patches and assisted others with patches as best we can.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jabberd 2.x Disappointment&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Over time, Chesspark’s user base got larger as the site became more popular, and jabberd 2.x’s warts began to show.  Here are the main ones in the approximate order we discovered them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Database transactions abused&lt;/strong&gt;.  Jabberd 2.x does no queries out of the box that require the use of database transactions.  By default it is configured to do every query in a transaction, even if it is a simple SELECT.  This is a common problem with many libraries we’ve used at Chesspark.  Thankfully, jabberd 2.x can be configured to turn this off.  Normally this would not affect anything, but the small amount of overhead caused can add up fast when jabberd 2.x does lots of queries, which it certainly does.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory leaks.&lt;/strong&gt; There are several memory leaks that persist to this day.  Even with a small userbase like Chesspark has, this forces us to restart the server about once a week.  As memory usage climbs, the server latency gets higher.  Our attempts to find this leak have been unsuccessful to date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non-blocking design inconsistent. &lt;/strong&gt; The server uses a non-blocking design common to scalable daemons; this is great.  Unfortunately, all database calls use the blocking database API and a single database connection.  This means that even with light load, packet latencies can be quite high if the database isn’t ridiculously fast.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For us, the show stopper was latency.  Games depend on near real-time performance, and latency destroys the user experience.  We generated test load which logged in a few hundred users, did roster operations, logged out, and repeated.  We then measured latency of chess moves on the same server.  We were shocked when we saw the numbers - over 3 seconds of lag between an IQ query and its response.&lt;/p&gt;
&lt;p&gt;All of these things could theoretically be fixed, and I hope that they are fixed eventually.  Diversity in server choices is a feature of XMPP - the more the merrier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finding A New Server&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Once we decided to abandon jabberd2, we needed to find a new server.&lt;/p&gt;
&lt;p&gt;Feature wise, all the current servers support the stack we need - authentication with TLS and SASL, ability to use PostgreSQL as a backend, private XML storage, external components, and privacy lists.  Years ago, some of these features were hard to come by, but today they are common.  ejabberd, Openfire, and Tigase have pubsub and BOSH support as well, neither of which was available in any open source server when we started.&lt;/p&gt;
&lt;p&gt;We knew right off the bat that we didn’t want to be writing C.  While we have a lot of C experience, we like to reserve C for the few times it is actually needed and spend the rest of our time in more productive and higher level languages.  This removed jabberd from the list.&lt;/p&gt;
&lt;p&gt;From here the language choice is Erlang or Java.  Erlang is a dynamically typed, functional language - quite a radical departure from the norm for people most C and Java hackers.  We work a lot in Python, so Erlang was the closer fit.  Many people make the decision to work in Java, and from there they will need to pick between Tigase and Openfire.&lt;/p&gt;
&lt;p&gt;One thing to note is that some people seem scared away by the Erlang language.  Don’t be one of these people.  Erlang is well documented and pretty easy to learn.  We knew nothing about Erlang a few months ago.  That did not slow us down too much when we needed to write ejabberd modules or make changes in ejabberd internals.  Even without knowing Erlang, we were able to write extensions to ejabberd much faster than for jabberd2.&lt;/p&gt;
&lt;p&gt;The last part of our decision was to test server latency with ejabberd.  We ran the same test that we ran on jabberd2, and ejabberd didn’t flinch.  The measured latency at idle was twice as fast in some cases with ejabberd, and there was very little change even as we pounded the database to levels that would have made jabberd2 cry.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Life With Ejabberd&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ejabberd is not perfect; no server is.  Here’s a list of our current gripes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Memory hog&lt;/strong&gt; - Erlang uses a lot of memory for basic string handling since a string is represented as a list of integers.  There also seems to be a bug in TLS that causes it to use quite a bit more memory than non-TLS connections.  These add up to quite a bit of memory usage.  For Chesspark, we use over a gig of RAM for a few hundred connections.  Jabber.org uses about 2.7GB of RAM for its 10k+ connections.  I’m not sure what the discrepancy is between these numbers; we are still looking. I expect the TLS memory issue to be solved soon, and the Process One folks told me that they were going to switch the string handling to use Erlang binaries which are more memory efficient.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lots of database queries&lt;/strong&gt; - As with jabberd2, ejabberd does an enormous amount of database queries.  With mod_privacy enabled, two roster related queries are done &lt;em&gt;for every packet sent&lt;/em&gt;.  ejabberd also uses the database inappropriately, with idioms like SELECT, DELETE, INSERT which can lead to race conditions.  Thankfully, this does not seem to be a big problem with a correctly tuned database, as ejabberd doesn’t block on the queries.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Lack of comments in the code&lt;/strong&gt; - The code is often quite clear, but comments would be helpful.  There is some basic, but very helpful, developer documentation, but the code contains virtually no comments.  Luckily, this is not as bad as it seems,because many of the idioms in the server are really Erlang and OTP idioms, so reading up a bit on Erlang and OTP answers a lot of questions.  I’m also not sure other servers are better.  Jabberd2 probably had more comments, but it also had less documentation in general; I’ve found working with ejabberd to be easier.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are many excellent things about ejabberd that make up for these and other shortcomings, and have made us very happy we made the switch.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hot code loading&lt;/strong&gt; - After we write a new ejabberd module, we can deploy it in production without pausing or restarting the server.  We can also redeploy it later if we find a bug.  We have even redeployed core server pieces this way with success.  This can even be done to some degree right in the Web interface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Live console&lt;/strong&gt; - It is possible to open an Erlang shell inside the running ejabberd node.  This makes it really easy to poke around to see which processes are running, how much memory they are using, and which internal database tables are getting full.  Java, C, Python, and Ruby have nothing quite like this, although Twisted Python’s manhole is similar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Very low CPU usage&lt;/strong&gt; - You’d think a C based XMPP server would be a winner in this area, but that is not always true.  ejabberd uses very little CPU usage, except when things go wrong.   Chesspark’s XMPP server is sitting around a load of 0.1 to 0.2; Jabber.org sits at 0.1.  This is exactly what you want.  An XMPP server should be I/O bound, not CPU bound.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So far we’re pretty happy.  How did you pick your XMPP server?&lt;/p&gt;
&lt;img src=&quot;http://feeds.wordpress.com/1.0/categories/metajack.wordpress.com/82/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt; &lt;img src=&quot;http://feeds.wordpress.com/1.0/tags/metajack.wordpress.com/82/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/metajack.wordpress.com/82/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/metajack.wordpress.com/82/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/metajack.wordpress.com/82/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/metajack.wordpress.com/82/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/metajack.wordpress.com/82/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/metajack.wordpress.com/82/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/metajack.wordpress.com/82/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/metajack.wordpress.com/82/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/metajack.wordpress.com/82/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/metajack.wordpress.com/82/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=metajack.wordpress.com&amp;amp;blog=921950&amp;amp;post=82&amp;amp;subd=metajack&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-08-26T15:49:01+00:00</dc:date>
	<dc:creator>metajack</dc:creator>
</item>
<item rdf:about="tag:process-one.net,2008:en/imtrends/26.278">
	<title>Process One: Instant Messaging as a social research tool: Study revives six degrees theory</title>
	<link>http://www.process-one.net/en/imtrends/article/instant_messaging_as_a_social_research_tool_study_revives_six_degrees_theor/</link>
	<content:encoded>According to a recent study by Microsoft into instant messaging habits it takes only six steps to link everyone together. &lt;p&gt;The research carried out by Microsoft researchers Eric Horvitz and Jure Leskovec studied 30 billion instant messages sent using Microsoft Messenger during June 2006 and found that any two people were linked by seven or fewer acquaintances.&lt;/p&gt;
 
&lt;p&gt;As reported by BBC News, Horvitz says &quot;What we are seeing suggests that there may be a social connectivity constant for humanity.&quot;&lt;/p&gt;
 
&lt;p&gt;This research is further evidence of the social and collaborative benefits instant messaging can offer both in and outside of the enterprise through linking more and more people together.&lt;/p&gt;
 
&lt;p&gt;You can get more details on the article from BBC News: &lt;a href=&quot;http://news.bbc.co.uk/go/pr/fr/-/1/hi/technology/7539329.stm&quot;&gt;Study revives six degrees theory&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-25T07:49:26+00:00</dc:date>
	<dc:creator>Mickaël Rémond</dc:creator>
</item>
<item rdf:about="http://www.kismith.co.uk/wordpress/?p=92">
	<title>Kevin Smith: XMPP: The almost-definitive-guide to-be</title>
	<link>http://www.kismith.co.uk/wordpress/index.php/2008/08/21/xmpp-the-almost-definitive-guide-to-be/</link>
	<content:encoded>&lt;p&gt;You’ll already have read, or be about to read, similar blog posts from &lt;a href=&quot;http://el-tramo.be&quot;&gt;Remko&lt;/a&gt; and &lt;a href=&quot;http://stpeter.im&quot;&gt;Peter&lt;/a&gt;, I imagine, here’s my take:&lt;/p&gt;
&lt;p&gt;Remko Tronçon, Peter Saint-Andre and I are writing a book on XMPP for O’Reilly, with a working title of “XMPP: The Definitive Guide”, expected to hit the shelves (and hopefully fly off them soon after) early 2009.&lt;/p&gt;
&lt;p&gt;If you’re wondering how things like this come about, the story goes something like this:&lt;/p&gt;
&lt;p&gt;Every so often, someone comes into the Jabber Development room, and asks if there’s any getting started documentation, or they ask if there’s a decent book, or they ask if there’s a guide to what Jabber/XMPP can do for them as a developer. For some reason, it seems to usually be me that ends up letting them know that there isn’t really, unless you want to go and read the RFCs, or the XEPs. I got the daft idea that writing such a book would be helpful, so I poked Remko and asked if he was interested in co-authoring something if O’Reilly would publish it - he was, so off we went and did very little for quite a while. As it happens, O’Reilly were interested in publishing a book about XMPP; realising an XMPP book wasn’t an XMPP book without Peter, we set about persuading him that joining us in the venture was a Smart Thing™, and things started moving.&lt;/p&gt;
&lt;p&gt;We met up for a pizza at FOSDEM in February, hashed out where we wanted to go with the book, wrote out the overview, sent it off to O’Reilly, who didn’t hate it, and started writing.&lt;/p&gt;
&lt;p&gt;Since then, we’ve made some decent progress on it, and also found out that writing books is hard work (even given that each of us has written at least either a doctoral thesis or RFCs). Still, we’re chugging along and things should be really taking shape in the next month or two&lt;br /&gt;
 The rest will, someday, be history — we’ll post an update later when we’re closer to the inevitable fame and fortune.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-21T18:27:26+00:00</dc:date>
	<dc:creator>Kev</dc:creator>
</item>
<item rdf:about="http://el-tramo.be/?p=83">
	<title>Remko Tronçon: We’re writing an XMPP book</title>
	<link>http://el-tramo.be/blog/xmppbook-intro</link>
	<content:encoded>&lt;p&gt;I’m excited to announce that &lt;a href=&quot;http://stpeter.im&quot;&gt;Peter&lt;/a&gt;, &lt;a href=&quot;http://kismith.co.uk&quot;&gt;Kevin&lt;/a&gt;, and I recently got the green light from &lt;a href=&quot;http://oreilly.com&quot;&gt;O’Reilly&lt;/a&gt; to start writing a book about Jabber/XMPP. The book will be targeted at a diverse public: on one hand, people who want to get acquainted with XMPP and will get an introduction and a general overview of XMPP, its workings, and its possibilities. On the other hand,  software engineers who want to integrate XMPP into their products will get a guide to implementing different use cases of XMPP through a series of different developer stories. The book is expected to be available in 2009, so start making some room on your bookshelf!&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-21T18:23:47+00:00</dc:date>
	<dc:creator>Remko Tronçon</dc:creator>
</item>
<item rdf:about="https://stpeter.im/?p=2249">
	<title>Peter Saint-Andre: Don’t Wait For The Movie!</title>
	<link>https://stpeter.im/?p=2249</link>
	<content:encoded>&lt;p&gt;In case you hadn’t noticed, I like to write. In fact, it’s pretty much all I do, whether professionally or recreationally. So when &lt;a href=&quot;http://www.kismith.co.uk/wordpress/&quot;&gt;Kevin Smith&lt;/a&gt; and &lt;a href=&quot;http://el-tramo.be/&quot;&gt;Remko Tronçon&lt;/a&gt; said they were interested in writing a book about &lt;a href=&quot;http://www.xmpp.org/&quot;&gt;XMPP&lt;/a&gt;, I was intrigued. And when the folks at &lt;a href=&quot;http://www.oreilly.com/&quot;&gt;O’Reilly&lt;/a&gt; said they were interested too, I was doubly intrigued. So Kevin, Remko, and I have committed to writing &lt;cite&gt;XMPP: The Definitive Guide&lt;/cite&gt; for O’Reilly, and we’re now hard at work. Expect to see it published sometime in 2009. And remember: don’t wait for the movie!&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-21T18:21:30+00:00</dc:date>
	<dc:creator>stpeter</dc:creator>
</item>
<item rdf:about="http://gsoc.safasofuoglu.org/?p=22">
	<title>Safa Sofuoğlu: GSoC Project Successfully Completed</title>
	<link>http://gsoc.safasofuoglu.org/2008/08/21/gsoc-project-successfully-completed/</link>
	<content:encoded>&lt;p&gt;I am proud to announce that I have successfully completed my Google Summer of Code Project. As we hit the official pencils down date, I thought it might be good to publish results and final toughts.&lt;/p&gt;
&lt;p&gt;I started the project in time and completed it 3 working days later than planned, though it could require more effort if we didn't change our goals. I cooperated with &lt;a href=&quot;http://tomk-soc08.blogspot.com/&quot; title=&quot;Tomas Karasek&quot;&gt;Tomas&lt;/a&gt; and &lt;a href=&quot;http://ayena.de/&quot; title=&quot;Tobias Markmann&quot;&gt;Tobias&lt;/a&gt; to fix the flaws I couldn't notice during development.&lt;/p&gt;
&lt;p&gt;It was a wonderful experience to work on Openfire and SparkWeb, especially with my mentor Gaston. Even if my GSoC project is complete, I feel there'll always be something to do for me with Jabber. I am having fun with Jabber, and planning to continue working on Jabber development as a community contributor.&lt;/p&gt;
&lt;p&gt;I would like to thank Google for giving me such a great opportunity. I also thank David Smith and Peter Saint-Andre for their excellent support.&lt;/p&gt;
&lt;p&gt;See you around!&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-20T23:22:24+00:00</dc:date>
	<dc:creator>Safa Sofuoğlu</dc:creator>
</item>
<item rdf:about="http://ayena.de/gsoc08_bosh">
	<title>Tobias Markmann: Writing a HTTP 1.1 Stack And Implementing BOSH</title>
	<link>http://ayena.de/gsoc08_bosh</link>
	<content:encoded>&lt;p&gt;Hi,&lt;br /&gt;
&lt;br /&gt;
here a short and long awaited update on my Google Summer of Code work. I've been finishing the update of libpurple's Entity Capabilities implementation to the latest version and added a bit functionality so that 3rd-party plugins for Pidgin can query for some contact's capabilities or adding capabilities to Pidgin's feature list which they implement. It's been tested and seems to work. Thanks to &lt;a href=&quot;http://23inch.de&quot;&gt;Arne König&lt;/a&gt; for testing all this and giving useful feedback.&lt;/p&gt;
&lt;p&gt;During the last weeks I've added TXT record lookup to libpurple's asynchronous DNS lookup system and make libpurple automatically query for &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0156.html&quot;&gt;Alternate Connection Methods for XMPP&lt;/a&gt;. The end user won't notice much of the underlying mechanics but if she/he is behind some firewall with HTTP proxy and the XMPP service administrator has setup the right records and services libpurple will automatically use BOSH to login and everything will be nice.&lt;/p&gt;
&lt;p&gt;Onto new business. I've started implementing a HTTP 1.1 stack which is nearly finished. I've already started implementing BOSH which is based on this new HTTP stack. The great thing about it is that I use &lt;a href=&quot;http://gsoc.safasofuoglu.org/&quot;&gt;Safa Sofuoğlu's Google Summer of Code project&lt;/a&gt;, which is about improving &lt;a href=&quot;http://www.igniterealtime.org/projects/openfire/index.jsp&quot;&gt;OpenFire&lt;/a&gt;'s BOSH support, for testing. So if I implement according the &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0124.html&quot;&gt;spec&lt;/a&gt; and something doesn't work I can directly report the errors, discuss them and get them fixed quite fast. The best of all will be a XMPP server supporting latest version, version 1.6, of BOSH in form of a connection manager part in OpenFire and a client supporting the latest BOSH.&lt;/p&gt;

&lt;p&gt;The next week I'll try to get BOSH at least working and do some debugging and cleaning here and there. If I don't get it finished till GSoC deadline I'll finish it later on.&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
Cheers and happy coding,&lt;br /&gt;
Tobias&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-19T16:39:16+00:00</dc:date>
	<dc:creator>tm</dc:creator>
</item>
<item rdf:about="http://ayena.de/xeps-history-development">
	<title>Tobias Markmann: What Were Our XEPs Doing The Last Years?</title>
	<link>http://ayena.de/xeps-history-development</link>
	<content:encoded>&lt;p&gt;Here I present some charts on XEPs, XMPP Enhancement Proposals, and their development. You can see, most XEPs are either in Experimental or Draft status. The one and only final XEPs are currently:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XEP-0077: In-Band Registration&lt;/li&gt;
&lt;li&gt;XEP-0030: Service Discovery&lt;/li&gt;
&lt;li&gt;XEP-0009: Jabber-RPC&lt;/li&gt;
&lt;li&gt;XEP-0004: Data Forms&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;There have been two XEP source files unprocessable in XMPP's repository because of invalid XML and since the reposity only exists since end 2006 no longer history was accessable.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://ayena.de/files/xeps-history-small.png&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://ayena.de/files/xeps-delta-small.png&quot; /&gt;&lt;br /&gt;

&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
These charts have been generated by &lt;a href=&quot;http://openoffice.org/&quot;&gt;OpenOffice.org&lt;/a&gt; and some custom python script which worked on XSF's svn repository.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-19T16:33:17+00:00</dc:date>
	<dc:creator>tm</dc:creator>
</item>
<item rdf:about="http://www.nanoant.com/?p=40">
	<title>Adam Michał Strzelecki: jabberd2 2.2SVN for Windows is out</title>
	<link>http://www.nanoant.com/projects/jabberd2-22svn-for-windows-is-out</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://jabberd2.xiaoka.com/&quot;&gt;jabberd2&lt;/a&gt; win32 project is finally updated and synced with changes made in the generic &lt;em&gt;Unix&lt;/em&gt; code. New changes should bring improved compatibility &amp;amp; stability and new 2.2 features for &lt;em&gt;Windows&lt;/em&gt; users. Binary &lt;a href=&quot;http://www.nanoant.com/projects/jabberd2-win32#download&quot;&gt;installer&lt;/a&gt; and optional build instructions available as usual at &lt;a href=&quot;http://www.nanoant.com/projects/jabberd2-win32&quot;&gt;jabberd-win32&lt;/a&gt; page. Click more for changes.&lt;span id=&quot;more-40&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;FIX:&lt;/em&gt; Setup files were not anymore compatible with latest &lt;a href=&quot;http://wix.sourceforge.net/releases/&quot;&gt;WiX&lt;/a&gt; 3 beta&lt;/li&gt;
&lt;li&gt;&lt;em&gt;FIX&lt;/em&gt;: Router failing opening users and filters configuration in Windows&lt;/li&gt;
&lt;li&gt;&lt;em&gt;FIX:&lt;/em&gt; Mysql missing &lt;tt&gt;crypt&lt;/tt&gt; is replaced with &lt;tt&gt;DES_crypt&lt;/tt&gt; from &lt;a href=&quot;http://www.slproweb.com/products/Win32OpenSSL.html&quot;&gt;OpenSSL&lt;/a&gt; in Windows&lt;/li&gt;
&lt;li&gt;&lt;em&gt;NEW:&lt;/em&gt; Compressed stream support via &lt;a href=&quot;http://www.zlib.net/&quot;&gt;zlib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;NEW:&lt;/em&gt; Keep &lt;tt&gt;server.pem&lt;/tt&gt; on upgrades&lt;/li&gt;
&lt;li&gt;&lt;em&gt;NEW:&lt;/em&gt; Using &lt;tt&gt;SubWCRev&lt;/tt&gt; from &lt;a href=&quot;http://tortoisesvn.tigris.org/&quot;&gt;TortoiseSVN&lt;/a&gt; for version files generation (instead of &lt;tt&gt;xsltproc&lt;/tt&gt;)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;NEW:&lt;/em&gt; All configuration files are now generated on build by Perl from generic distribution ones&lt;/li&gt;
&lt;li&gt;&lt;em&gt;NEW:&lt;/em&gt; Using &lt;a href=&quot;http://www.corpit.ru/mjt/udns.html&quot;&gt;udns&lt;/a&gt; library for Windows builds too (&lt;em&gt;resolver&lt;/em&gt; component was removed)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;UPDATE:&lt;/em&gt; Synced &lt;tt&gt;config.h&lt;/tt&gt; with the one from generic builds&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All changes are visible as SVN revisions 644-688 in &lt;a href=&quot;http://jabberd2.xiaoka.com/browser/trunk&quot;&gt;the repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please note new build prerequisites such as &lt;a href=&quot;http://www.corpit.ru/mjt/udns.html&quot;&gt;udns&lt;/a&gt;, &lt;a href=&quot;http://www.zlib.net/&quot;&gt;zlib&lt;/a&gt;, &lt;em&gt;Perl&lt;/em&gt; and &lt;a href=&quot;http://tortoisesvn.tigris.org/&quot;&gt;TortoiseSVN&lt;/a&gt; for manual builds.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-18T15:27:45+00:00</dc:date>
	<dc:creator>Adam</dc:creator>
</item>
<item rdf:about="http://ayena.de/inter-project">
	<title>Tobias Markmann: Inter-Project Collaboration during Google Summer of Code™ 2008</title>
	<link>http://ayena.de/inter-project</link>
	<content:encoded>&lt;p&gt;Since XMPP is (becomming) the biggest player from all the instant messaging protocols out there, there are a lot Google Summer of Code™ projects in the XMPP field this year. BOSH, the highly discussed dream team for connecting to XMPP from mobile or other limited network environments, is covered by a lot projects this year.&lt;br /&gt;
My GSoC project is, not only, about adding BOSH support to libpurple, the C instant messaging library which powers desktop clients like &lt;a href=&quot;http://pidgin.im&quot;&gt;Pidgin&lt;/a&gt; and &lt;a href=&quot;http://adiumx.com&quot;&gt;Adium&lt;/a&gt; and web clients like &lt;a href=&quot;http://meebo.com&quot;&gt;Meebo&lt;/a&gt;. libpurple doesn't only cover nearly any proprietary instant messaging protocol but also some open protocols like IRC, SILC and of course &lt;a href=&quot;http://xmpp.org&quot;&gt;XMPP&lt;/a&gt;. For XMPP, as the (future) major instant messaging protocol, it's most important that XEPs get implemented, coded and used in real life. There is a huge number of XEPs which aren't implemented and may never be, who knows.&lt;br /&gt;
I will implement BOSH from the beginning since there is no codebase in libpurple in the BOSH field  and just contacted &lt;a href=&quot;http://gsoc.safasofuoglu.org/&quot;&gt;Safa Sofuoğlu&lt;/a&gt;, a GSoC student for the XSF mentoring organization, who updates Openfire's BOSH implementation. We plan to test our implementations of the two XEPs, &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0124.html&quot;&gt;XEP-0124&lt;/a&gt; and &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0206.html&quot;&gt;XEP-0206&lt;/a&gt;, against each other since he'll write a server side implementation and I'm writing a client side implementation.&lt;/p&gt;
&lt;p&gt;Our aim is to have not just working and good performing implementation but moreover implementations according to the two XMPP Enhancement Proposals. I'm looking forward to the inter-project collaboration.&lt;/p&gt;
&lt;p&gt;Cheers and good luck to all Google Summer of Code™ students,&lt;/p&gt;
&lt;p&gt;Tobias&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-16T19:02:38+00:00</dc:date>
	<dc:creator>tm</dc:creator>
</item>
<item rdf:about="tag:blogger.com,1999:blog-16882295.post-6857593686001896212">
	<title>Google Talkabout: New transliteration bots make it easy to chat in Indian languages</title>
	<link>http://feeds.feedburner.com/~r/blogspot/oyNL/~3/363041281/new-transliteration-bots-make-it-easy.html</link>
	<content:encoded>&lt;a href=&quot;http://1.bp.blogspot.com/_8626xcG6Kfw/SKHKlFQ9hzI/AAAAAAAAALw/883Oie1VjKg/s1600-h/chat2.PNG&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_8626xcG6Kfw/SKHKlFQ9hzI/AAAAAAAAALw/883Oie1VjKg/s400/chat2.PNG&quot; style=&quot;FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5233686980398516018&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; Have you ever wished that you could chat with your family and friends in your native language? Sometimes there's just no substitute for expressing a thought in your own language. Google Talk now has transliteration bots that will convert text from English to Hindi, Kannada, Malayalam, Tamil or Telugu. Think of a bot as an invited guest to your chat session that will transliterate what you type in English to the right local script. For those who are not familiar with transliteration, it is a service provided by Google India that allows you to type in Indian languages using phonetically equivalent English script (it is also available on our &lt;a href=&quot;http://www.google.co.in/transliterate/indic&quot; id=&quot;zbtt&quot; title=&quot;labs page&quot;&gt;labs page&lt;/a&gt;, &lt;a href=&quot;http://www.orkut.com/scrapbook.aspx&quot; id=&quot;yfxy&quot; title=&quot;orkut scraps&quot;&gt;orkut scraps&lt;/a&gt; and &lt;a href=&quot;http://www.blogger.com/indic/hi&quot; id=&quot;o.5-&quot; title=&quot;blogger&quot;&gt;&lt;span style=&quot;COLOR: rgb(129,0,129);&quot; id=&quot;mjw32&quot;&gt;blogger&lt;/span&gt;&lt;/a&gt;). If you're chatting in Hindi, when you type 'haal kaisa hai janab ka?' the &lt;em&gt;en2hi.translit@bot.talk.google.com&lt;/em&gt; bot will reply in Hindi as 'हाल कैसा है जनाब का?'&lt;br /&gt;&lt;br /&gt;There are currently 5 transliteration bots - Hindi (en2hi.translit), Kannada (en2kn.translit), Malayalam (en2ml.translit), Tamil (en2ta.translit) and Telugu (en2te.translit), and remember that their names end with &quot;@bot.talk.google.com&quot;. To use one of these bots follow these three steps:&lt;br /&gt;&lt;br /&gt;1) First &lt;a title=&quot;add the bot that you want to your friend's list&quot; href=&quot;http://www.google.com/support/talk/bin/answer.py?answer=23938&quot; target=&quot;_blank&quot; id=&quot;v:-o&quot;&gt;add the bot that you want to your friend's list&lt;/a&gt;. (For example, add en2hi.translit@bot.talk.google.com for Hindi). You just need to do this once.&lt;br /&gt;2) Start a chat session with your friend&lt;br /&gt;3) Convert the chat session to a &lt;a title=&quot;group chat&quot; href=&quot;http://www.google.com/support/talkgadget/bin/answer.py?answer=70698&quot; target=&quot;_blank&quot; id=&quot;l_e4&quot;&gt;group chat&lt;/a&gt; and invite the bot to it.&lt;br /&gt;&lt;br /&gt;&lt;div id=&quot;uin6&quot;&gt;Read &lt;a href=&quot;http://www.google.com/support/talk/bin/answer.py?answer=98698&amp;amp;topic=1190&quot; id=&quot;ko92&quot; title=&quot;this&quot;&gt;this&lt;/a&gt; to know more about the bots, and &lt;a href=&quot;http://groups.google.com/group/google-india-labs/&quot; id=&quot;p-:f&quot; title=&quot;let us know&quot;&gt;let us know&lt;/a&gt; what you think.&lt;/div&gt;&lt;br /&gt;&lt;div id=&quot;h-ye1&quot;&gt;&lt;/div&gt;&lt;br /&gt;तो शुरू हो जाइए...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id=&quot;h-ye2&quot;&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id=&quot;rno9&quot;&gt;Kuntal Loya&lt;br /&gt;Software Engineer&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/blogspot/oyNL?a=eu5bKK&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/blogspot/oyNL?i=eu5bKK&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/blogspot/oyNL/~4/363041281&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2008-08-12T17:38:47+00:00</dc:date>
	<dc:creator>Brian Hutchins (noreply@blogger.com)</dc:creator>
</item>
<item rdf:about="http://www.tigase.org/1436 at http://www.tigase.org">
	<title>Artur Hefczyc: Tigase LiveCD 4.0.0</title>
	<link>http://www.tigase.org/en/tigase-livecd-4-0-0</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.tigase.org/files/downloads/other/tigase-livecd-4.0.0.iso&quot;&gt;&lt;img src=&quot;http://www.tigase.org/files/articles/livecd-article-small.png&quot; vspace=&quot;5&quot; hspace=&quot;5&quot; align=&quot;left&quot; /&gt;&lt;/a&gt; A few days ago I have silently uploaded &lt;a href=&quot;http://www.tigase.org/files/downloads/other/tigase-livecd-4.0.0.iso&quot;&gt;tigase-livecd-4.0.0.iso&lt;/a&gt; file into our download section. Even there was no announcement the download counter shows now 145. I wonder if there was such a big number if people knew what they are downloading....&lt;/p&gt;
&lt;p&gt;Anyway. This ISO file is the first release of the Tigase LiveCD version. It is a complete environment runnable from the CD with pre-configured Tigase server, &lt;a href=&quot;http://drupal.org/&quot;&gt;Drupal CMS&lt;/a&gt; (Blog and Forums) and &lt;a href=&quot;http://www.dovecot.org/&quot;&gt;Dovecot - IMAP4 server&lt;/a&gt; integrated together. The Drupal CMS runs with the Minichat on the example website. The live CD is based on the &lt;a href=&quot;http://www.gentoo.org/&quot;&gt;Gentoo Linux&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this particular case integration means all services (Tigase, Drupal, Email) use user accounts from a single database. The user account management is done via Drupal website. &lt;/p&gt;
&lt;p&gt;You can also post short news on the website directly from your XMPP client, you will also receive notifications about comments and posts on the website to your XMPP client.&lt;/p&gt;
&lt;p&gt;The live CD contains also 2 nice XMPP clients: &lt;a href=&quot;http://psi-im.org&quot;&gt;Psi&lt;/a&gt; and &lt;a href=&quot;http://thecoccinella.org/&quot;&gt;Coccinella&lt;/a&gt; in the most recent versions. Hm, Psi has just increased version number so it is not the most recent.&lt;/p&gt;
&lt;p&gt;Everything installed and pre-configured, starting up automatically when the system boots from the CD.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.tigase.org/en/tigase-livecd-4-0-0&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-12T09:06:52+00:00</dc:date>
	<dc:creator>kobit</dc:creator>
</item>
<item rdf:about="urn:lj:livejournal.com:atom1:thetofu:72320">
	<title>Christopher Zorn: WuChess Video Contest</title>
	<link>http://thetofu.livejournal.com/72320.html</link>
	<content:encoded>If you have not seen this yet, you really need to check it out. Or even give it a try. ;) &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.youtube.com/video_response_view_all?v=3YAIVQ_oh88&quot;&gt;http://www.youtube.com/video_response_view_all?v=3YAIVQ_oh88&lt;/a&gt;</content:encoded>
	<dc:date>2008-08-11T15:36:15+00:00</dc:date>
</item>
<item rdf:about="https://stpeter.im/?p=2237">
	<title>Peter Saint-Andre: Where Is All The Jabber Spam?</title>
	<link>https://stpeter.im/?p=2237</link>
	<content:encoded>&lt;p&gt;Over on the &lt;a href=&quot;http://mail.jabber.org/mailman/listinfo/juser&quot;&gt;JUser discussion list&lt;/a&gt;, someone &lt;a href=&quot;http://mail.jabber.org/pipermail/juser/2008-August/002152.html&quot;&gt;asked&lt;/a&gt; why there’s less spam on the Jabber network than there is on the email network. I &lt;a href=&quot;http://mail.jabber.org/pipermail/juser/2008-August/002155.html&quot;&gt;answered&lt;/a&gt; as follows:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’ll have to write a paper about this sometime, but here are some points&lt;br /&gt;
to consider:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In XMPP, the sender’s address is not asserted by the sender’s client  but instead is stamped by the sender’s server. So a client can’t fake  the “from” address. (Naturally if you run the server you could fake  addresses at your domain, so as the admin of jabber.org I could send  messages from any address at jabber.org — but I can’t fake messages  from other domains, see #2.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In XMPP, servers check each other’s identities, either through a  DNS-based “dialback” protocol (&lt;a href=&quot;http://www.xmpp.org/rfcs/rfc3920.html&quot;&gt;RFC 3920&lt;/a&gt; / &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0220.html&quot;&gt;XEP-0220&lt;/a&gt;) or real server certificates. So if I run a server at jabber.org I can’t send messages  putatively “from” microsoft.com or whitehouse.gov or whatever. (Also we  don’t have multi-hop routing, so modifications to the addresses can’t  happen between the sending server and receiving server.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;So far, server dialback has been sufficient to prevent most address spoofing on the network, but we have a certificate authority in place  (visit &lt;a href=&quot;https://www.xmpp.net/&quot;&gt;https://www.xmpp.net/&lt;/a&gt; for details) and we could fairly easily upgrade the network to certificate-based authentication between servers  if needed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;XMPP is pure XML, and attackers can’t easily attach malware like scripts and viruses to Jabber messages. This helps us avoid the unholy alliance between virus writers and spammers that has occurred on the email network.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A great deal of email spam (or spam+malware) is directed against a  single platform: Outlook running on Windows. In the XMPP world we have a  much more diverse software ecosystem.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In IM systems, people are accustomed to sharing presence / adding someone to their buddy list. There’s less of a culture of “I must be able to accept messages from anyone in the world” as in email. You can say this is good or bad, but that’s how it is — so if someone bothers you, you can delete them from your friend list or block them at the server side (see &lt;a href=&quot;http://www.xmpp.org/rfcs/rfc3921.html&quot;&gt;RFC 3921&lt;/a&gt; / &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0016.html&quot;&gt;XEP-0016&lt;/a&gt;) or the client side.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;All XMPP server codebases have rate limiting in place to prevent a single client from sending a large number of messages (especially a large number of large messages) in a short period of time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Although we have not seen very much one-to-one spam on the Jabber network (our biggest problem so far is abusive behavior in groupchat rooms), we are actively planning for the arrival of spam and have designed some spam-fighting measures such as challenge-response (CAPTCHA) forms to join groupchat rooms or add someone to your contact list — see &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0158.html&quot;&gt;XEP-0158&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IM systems have traditionally been quite fragmented (and in many ways still are — as witness ICQ, AIM, MSN, Yahoo!, Skype, etc.) so there isn’t the expectation that you’ll necessarily be able to send a message to any random person on the Internet. This probably makes IM less appealing to spammers than email is. (Remember, spam is a matter of economics, and there may simply not be enough money to be made via IM.)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;XMPP is not perfect. Spam is possible on our network, but it’s not very  easy. By design, spam is harder on the XMPP network than it is on the  SMTP network, and if spam does start to occur more widely we will design  and deploy even better spam-fighting tools (or, for instance, tighten up or turn off in-band registration, which is user-friendly but also makes  it possible to create lots of accounts at multiple servers).&lt;/p&gt;
&lt;p&gt;However, XMPP does not need to be perfect. You don’t need to be the  fastest antelope in the herd to avoid being eaten by the lion, you just  need to be faster than the slow antelope who get caught.&lt;/p&gt;
&lt;p&gt;Peter&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;UPDATE: A lively discussion has ensued on the list — you can participate even without joining the list by visiting &lt;a href=&quot;http://www.jabberforum.org/forumdisplay.php?f=21&quot;&gt;JabberForum.org&lt;/a&gt;. I’ve also received a number of private messages about the topic, so I may post about it again soon. :)&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-11T13:56:20+00:00</dc:date>
	<dc:creator>stpeter</dc:creator>
</item>
<item rdf:about="https://stpeter.im/?p=2236">
	<title>Peter Saint-Andre: What About BoB?</title>
	<link>https://stpeter.im/?p=2236</link>
	<content:encoded>&lt;p&gt;Jabber technologies have always been optimized for sending many small pieces of structured data, which we call XML stanzas. As a result we’ve struggled with ways to send binary data — even small bits of binary. Out of that need emerged &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0231.html&quot;&gt;XEP-0231&lt;/a&gt;, which I recently renamed “bits of binary” (a.k.a. “BoB”) because I like catchy spec titles (hey, it’s one of the things that keep me going). Folks like &lt;a href=&quot;http://ralphm.net/blog/&quot;&gt;Ralph Meijer&lt;/a&gt; have had vague worries about the approach we’d taken in that spec, but we needed it for anti-spam &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0158.html&quot;&gt;CAPTCHA forms&lt;/a&gt; so we kind of brushed those aside because we need to fight spam, right?&lt;/p&gt;
&lt;p&gt;Then over the last few weeks &lt;a href=&quot;http://pavlix.net/&quot;&gt;Pavel Šimerda&lt;/a&gt; raised some further concerns and, more productively, suggested solutions. So Pavel and I have been collaborating on revisions in a longish &lt;a href=&quot;http://mail.jabber.org/pipermail/standards/2008-July/019344.html&quot;&gt;email thread&lt;/a&gt;, in a &lt;a href=&quot;http://logs.jabber.org/jdev@conference.jabber.org/2008-08-06.html#12:56:16&quot;&gt;groupchat&lt;/a&gt; the other day, and in &lt;a href=&quot;http://mail.jabber.org/pipermail/standards/2008-August/019470.html&quot;&gt;follow-up email thread&lt;/a&gt;. Pavel has been a pleasure to work with and it was fun to make such significant progress in such a short period of time.&lt;/p&gt;
&lt;p&gt;Best of all, I think “BoB” is one of those building block technologies that we’ll be able to use for features like emoticons, thumbnails for file transfer, in-line images in messages and whiteboarding sessions, and yes those CAPTCHA forms for joining chatrooms or initiating presence subscriptions.&lt;/p&gt;
&lt;p&gt;So here’s to BoB! :-)&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-09T16:23:09+00:00</dc:date>
	<dc:creator>stpeter</dc:creator>
</item>
<item rdf:about="https://stpeter.im/?p=2235">
	<title>Peter Saint-Andre: Got Examples?</title>
	<link>https://stpeter.im/?p=2235</link>
	<content:encoded>&lt;p&gt;I try to put a lot of examples in the protocol specs I write (as I like to say, “we put the example in example.com”). So when Jeff Williams of &lt;a href=&quot;http://www.gadgetworks.com/&quot;&gt;Gadgetworks&lt;/a&gt; recently &lt;a href=&quot;http://mail.jabber.org/pipermail/jingle/2008-July/000127.html&quot;&gt;noted&lt;/a&gt; on the &lt;a href=&quot;http://mail.jabber.org/mailman/listinfo/jingle&quot;&gt;jingle@xmpp.org&lt;/a&gt; discussion list that a number of the examples in the Jingle specs are not valid in accordance with the XML schemas (or even well-formed), I was chagrined but also intrigued. Off-list, Jeff and I have worked a bit on the Jingle examples and schemas, but he’s found it painful to manually extract all the examples from the specs for testing purposes. So late this afternoon I wrote a &lt;a href=&quot;http://svn.xmpp.org:18080/browse/~raw,r=2147/XMPP/trunk/extensions/examples.xsl&quot;&gt;small XSLT&lt;/a&gt; to automatically extract all the examples from a &lt;a href=&quot;http://www.xmpp.org/extensions/&quot;&gt;XEP&lt;/a&gt; (wrapped by a &amp;lt;stream&amp;gt;&amp;lt;/stream&amp;gt; element) and write them to a file. I’ve run the transformation on all the XMPP extensions we’ve published so far, and the results are available at &amp;lt;&lt;a href=&quot;http://www.xmpp.org/extensions/examples/&quot;&gt;http://www.xmpp.org/extensions/examples/&lt;/a&gt;&amp;gt;. I’m sure there are many errors to be found (e.g., I know some examples don’t parse because they include things like “[...]” in place of elided markup), but we’ll work to clean those up over time. Feel free to report any errors to me &lt;a href=&quot;https://stpeter.im/?page_id=1968&quot;&gt;directly&lt;/a&gt;, or on the appropriate &lt;a href=&quot;http://www.xmpp.org/about/discuss.shtml&quot;&gt;discussion list&lt;/a&gt;. Have fun!&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-09T04:35:20+00:00</dc:date>
	<dc:creator>stpeter</dc:creator>
</item>
<item rdf:about="https://stpeter.im/?p=2234">
	<title>Peter Saint-Andre: OAuth over XMPP</title>
	<link>https://stpeter.im/?p=2234</link>
	<content:encoded>&lt;p&gt;The results of the &lt;a href=&quot;http://www.xmpp.org/summit/summit5.shtml&quot;&gt;XMPP Summit&lt;/a&gt; a few weeks ago continue to leak out. I’ve been so busy with action items that I haven’t had time to blog about it all, but I did want to note that over the last few days we’ve worked out the remaining details about how to use &lt;a href=&quot;http://oauth.net/&quot;&gt;OAuth&lt;/a&gt; to access protected resources over &lt;a href=&quot;http://www.xmpp.org/&quot;&gt;XMPP&lt;/a&gt;. Read all about it in the latest version of &lt;a href=&quot;http://www.xmpp.org/extensions/xep-0235.html&quot;&gt;XEP-0235&lt;/a&gt;. Special thanks to Ralph Meijer and Blaine Cook for setting me straight about a number of issues on the &lt;a href=&quot;http://mail.jabber.org/mailman/listinfo/social&quot;&gt;social@xmpp.org&lt;/a&gt; discussion list.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-09T02:06:34+00:00</dc:date>
	<dc:creator>stpeter</dc:creator>
</item>
<item rdf:about="http://metajack.wordpress.com/?p=79">
	<title>Jack Moffitt: Learn About XMPP At SXSW 2009</title>
	<link>http://metajack.wordpress.com/2008/08/08/learn-about-xmpp-at-sxsw-2009/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;I submitted two XMPP themed proposals for &lt;a href=&quot;http://www.sxsw.com&quot;&gt;SXSW 2009&lt;/a&gt;.  The &lt;a href=&quot;http://panelpicker.sxsw.com&quot;&gt;interactive panel picker&lt;/a&gt; is now open, so please go vote for my entries if you have any interest in XMPP at SXSW.  As far as I can tell, I’m the only one speaking on the topic.&lt;/p&gt;
&lt;p&gt;The first submission is a panel called “&lt;a href=&quot;http://panelpicker.sxsw.com/ideas/view/1933&quot;&gt;The XMPP Powered Web&lt;/a&gt;“.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;XMPP is being used to build the next generation of Web applications. The open messaging standard has crossed from the desktop to the Web and is powering applications for microblogging, gaming, social networks, communication, and data portability. Learn how others are using XMPP and how you can use it, too.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I am planning to invite some well known developers using XMPP for interesting Web projects to join me.  Google, Flickr, Seesmic, Chesspark, and others are already building on XMPP technology into the Web, and it is time for the rest of the world to get into the game as well.  Vote &lt;a href=&quot;http://panelpicker.sxsw.com/ideas/view/1933&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The second proposal is a solo talk about XMPP basics called “&lt;a href=&quot;http://panelpicker.sxsw.com/ideas/view/1934&quot;&gt;X Is For XMPP: An Open Messaging Primer&lt;/a&gt;“.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;XMPP is an open, extensible messaging standard designed for instant messaging and presence. The protocol is based on XML and is simple and easy to understand. XMPP can be used to power next generation Web apps. Learn how XMPP works and how you can use it in your own applications.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I’ll cover the basics of the protocol and dive into various ways XMPP can be used.  I’ll cover the big XEPs like Pubsub, BOSH, and MUC, as well as topics like using components and writing bots.  Vote &lt;a href=&quot;http://panelpicker.sxsw.com/ideas/view/1934&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If any of you are planning to be at SXSW 2009, let me know.  I’d love to meet more people building cool things with XMPP.&lt;/p&gt;
&lt;img src=&quot;http://feeds.wordpress.com/1.0/categories/metajack.wordpress.com/79/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt; &lt;img src=&quot;http://feeds.wordpress.com/1.0/tags/metajack.wordpress.com/79/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/metajack.wordpress.com/79/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/metajack.wordpress.com/79/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/metajack.wordpress.com/79/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/metajack.wordpress.com/79/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/metajack.wordpress.com/79/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/metajack.wordpress.com/79/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/metajack.wordpress.com/79/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/metajack.wordpress.com/79/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/metajack.wordpress.com/79/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/metajack.wordpress.com/79/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=metajack.wordpress.com&amp;amp;blog=921950&amp;amp;post=79&amp;amp;subd=metajack&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-08-08T16:28:18+00:00</dc:date>
	<dc:creator>metajack</dc:creator>
</item>
<item rdf:about="http://coccinella.im/274 at http://coccinella.im">
	<title>Coccinella: Tcl/Tk - Recent Advances</title>
	<link>http://coccinella.im/tcl-tk-recent-advances</link>
	<content:encoded>&lt;div style=&quot;float: right; width: 197px; margin: 0 0 10px 10px;&quot;&gt;&lt;img height=&quot;240&quot; src=&quot;http://coccinella.im/stuff/warm-ladybug-1.jpg&quot; alt=&quot;Ladybug with warm background&quot; title=&quot;Ladybug on the move&quot; width=&quot;197&quot; /&gt;&lt;br /&gt;
&lt;em&gt;Credit: &lt;a href=&quot;http://flickr.com/photos/freebird4/432305693/&quot; rel=&quot;nofollow&quot; title=&quot;freebird4&quot;&gt;freebird4&lt;/a&gt;, License: &lt;a href=&quot;http://creativecommons.org/licenses/by-nc/2.0/deed.en&quot; rel=&quot;nofollow&quot; title=&quot;Creative Commons Attribution-Noncommercial 2.0 Generic&quot;&gt;by-nc&lt;/a&gt;&lt;/em&gt;&lt;/div&gt;

&lt;p&gt;There has been a lot of news in the Tcl/Tk community the last month or so, and I thought it's time to compile them here since &lt;a href=&quot;http://coccinella.im/download&quot;&gt;Coccinella&lt;/a&gt; is written in Tcl. Tcl's windowing toolkit, Tk, has been &quot;known&quot; to be ugly and outdated. With the 8.5 release last December the tile package, now named ttk (Themed Tk), is included in the core which brings true native widgets on Windows (yes, Vista too) and Mac. Since Mac is my native platform, I can tell you that Tk beats both Qt and gtk, but perhaps I haven't seen the latest of them.&lt;/p&gt;



&lt;p&gt;The question is then, where does this put Linux/Unix? There are a number of themes included in ttk which looks OK on these platforms, but there is nothing exactly like Qt or gtk. Instead, there have been a &lt;a href=&quot;http://www.ellogon.org/petasis/index.php?option=com_content&amp;amp;task=view&amp;amp;id=24&amp;amp;Itemid=40&quot;&gt;tileqt package&lt;/a&gt;  written by Georgios Petasis which has delivered true Qt widgets. With ttk in the core, there have been some initial problems getting this to work due to missing stub tables etc., but it should work with the latest Tcl/Tk 8.5.3 release.&lt;/p&gt;

&lt;p&gt;Just a few days ago the very same person &lt;a href=&quot;http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/854288686e568ebb&quot;&gt;announced&lt;/a&gt; &lt;a href=&quot;http://www.ellogon.org/petasis/index.php?option=com_content&amp;amp;task=view&amp;amp;id=29&amp;amp;Itemid=45&quot;&gt;tilegtk&lt;/a&gt; which does the same thing for the gtk toolkit. This is very, very, good news. Imagine that you can switch theme, and toolkits, on the fly without any program restart. This already works with the other themes and will likely work with tilegtk as well. My question to you is: which other toolkit has this flexibility?&lt;/p&gt;

&lt;p&gt;I have already mentioned my &lt;a href=&quot;http://coccinella.im/svg-graphics&quot;&gt;recent advances with tkpath&lt;/a&gt; in this blog thread, and I will mention it again. This is the super canvas which is lacking in Tk, and which will bring not only tight SVG support, but also make Tk come on par with canvas like widgets from other toolkits. Still more to do.&lt;/p&gt;

&lt;p&gt;Recently my attention turned to &lt;a href=&quot;http://webkit.org/&quot;&gt;WebKit&lt;/a&gt;  which has its &lt;a href=&quot;http://en.wikipedia.org/wiki/WebKit&quot;&gt;history&lt;/a&gt; of its own. Dual licensed as LGPL/BSD it fits the Tcl community well. I have looked at some of the sources, and judging from the wxWidgets backend, it doesn't look terribly difficult to make it a Tk widget, but there could be show stoppers, like event loop integration etc.&lt;/p&gt;

&lt;p&gt;When all this comes together it will make Tk a very competitive toolkit.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-08T12:04:25+00:00</dc:date>
	<dc:creator>matben</dc:creator>
</item>
<item rdf:about="http://alek.silverstone.name/12 at http://alek.silverstone.name">
	<title>Aleksey Palazchenko: History: Reloaded</title>
	<link>http://alek.silverstone.name/en/soc/history-reloaded</link>
	<content:encoded>&lt;p&gt;Too much time have passed since my last post... Huh? It was the beginning of my &lt;a href=&quot;http://alek.silverstone.name/en/soc/sneak-preview-for-gui&quot;&gt;last report month ago&lt;/a&gt;. Sadly, not too much progress due to personal problems. Time for real speed-up. Anyway, Psi will have new history system no later this Autumn. :)&lt;br /&gt;
Two recent days was great. 2/3 of code was refactored or rewritten. Now it's much better and clear. You can &lt;a href=&quot;http://github.com/AlekSi/psi/tree/fake_backend&quot;&gt;see it and add comments at gihub&lt;/a&gt;. And new GUI looks better too:&lt;br /&gt;
&lt;img src=&quot;http://psi-im.org/wiki/uploads/2/27/Historydlg_v2.png&quot; /&gt;&lt;br /&gt;
Do you think it looks good? or bad? Please download and try. Git's black magic:&lt;br /&gt;
&lt;code&gt;git clone git://github.com/AlekSi/psi.git&lt;br /&gt;
cd psi&lt;br /&gt;
git branch --track fake_backend origin/fake_backend&lt;br /&gt;
git checkout fake_backend&lt;br /&gt;
git submodule init&lt;br /&gt;
git submodule update&lt;br /&gt;
cd proto&lt;br /&gt;
qmake (or qmake-qt4 for Debian-based distros)&lt;br /&gt;
make&lt;br /&gt;
./proto&lt;/code&gt;&lt;br /&gt;
Comments are needed. :)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://alek.silverstone.name/en/soc/history-reloaded&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-07T21:53:45+00:00</dc:date>
	<dc:creator>AlekSi</dc:creator>
</item>
<item rdf:about="http://halr9000.com/article/585">
	<title>Hal Rottenberg: New Version of Psi is Out!</title>
	<link>http://halr9000.com/article/585</link>
	<content:encoded>&lt;a href=&quot;http://halr9000.com/article/category/software/instant-messaging/jabber&quot; title=&quot;Jabber&quot;&gt;&lt;img src=&quot;http://halr9000.com/wp-content/icons/topic_jabber.png&quot; align=&quot;right&quot; height=&quot;87&quot; alt=&quot;Jabber&quot; width=&quot;64&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://halr9000.com/article/category/software/instant-messaging/psi&quot; title=&quot;Psi&quot;&gt;&lt;img src=&quot;http://halr9000.com/wp-content/icons/topic_psi.png&quot; align=&quot;right&quot; height=&quot;64&quot; alt=&quot;Psi&quot; width=&quot;64&quot; /&gt;&lt;/a&gt;
&lt;p&gt;We do like the long release cycles, it seems.  :)  Kev the project lead has &lt;a href=&quot;http://www.kismith.co.uk/wordpress/index.php/2008/08/07/psi-012/&quot; target=&quot;_blank&quot;&gt;written it up&lt;/a&gt; on his blog.  You can find download links on the &lt;a href=&quot;http://psi-im.org/download&quot; target=&quot;_blank&quot;&gt;Psi Download page&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-07T21:06:22+00:00</dc:date>
	<dc:creator>halr9000</dc:creator>
</item>

</rdf:RDF>
