Ok, so there we are, in the middle of the night. Although it was pretty crowded when we got here, most people have either gone home or to the hotel they spend the rest of this week's nights in already. A dozen people remains, of which a number of nice Drupal guys. Of course we are planning World Domination™ through our combined non-erlang platform. Details to follow.
To supplement the EuroOSCON,
BarCamp
Amsterdam will take place from today 16:00 until tomorrow
23:59. Basically a bunch of open source and technology projects meeting
up. As the organisers asked to have people from the Jabber community
present,
intosi and
I will be
attending this great initiative.
To get right into it and promote our community, I had us made two t-shirts. The design was done using Inkscape. They came out pretty nice, I must say. Thanks to Usher Lieberman for inspiration.
Provided there's some connectivity, there'll be live updates in this space. Photo's here. Stay tuned.
A I mentioned last week, the Twisted crowd held its first Twisted Virtual Sprint. I believe many made progress, so I'd say it was a success. Personally, I managed to finalize the reworking of Xish and the Jabber stuff in Words as a precursor to implement full XMPP support.
For months I had been sporadically working on this, and I'm happy
to say that I finally committed it to Trunk. The Jabber part of Words
got its own xmlstream module that builds on the
stripped xmlstream in Xish. I also added a lot of
docstrings to the code I touched, so people might have more clue on how
to use it.
I also decided to gather the people actually using these modules by setting up a new mailinglist: Twisted-Jabber. The initial set of people includes the authors of the projects pyMSNt, pyAIMt, pyICQt, PunJab and Twibber. If I somehow forgot to invite you or your project, consider this your invitation. It seems pretty constructive already, so that's pretty nice.
In the coming period, I hope to finish a pure-XMPP client
authenticator using TLS and SASL, along with some wrapper that can also
use old-skool jabber:iq:auth authentication when
connecting to pre-XMPP 1.0 servers. Some people have pointed me towards
a sslverify module in Divmod's repository, for certificate
verification.
Furthermore, I will add support for creating XML stanzas somewhat
easier, like the IQ class in
twisted.words.protocols.jabber.client, along with a
sendDeferred method that returns a deferred that
fires when a reply has been received. Received error replies will be
converted to exceptions that can be trapped. Also, sending back errors
will become somewhat easier.
Next on the list is server-to-server functionality. This requires handling incoming connections, which also comes in handy for implementing services that handle incoming component and client connections. A small server implementation shouldn't be too far off then.
We'll see how this works out, but I'll report progress over here.
After a number of succesful Australian sprints, this weekend people gather for the first, experimental, Twisted Virtual Sprint. Anyone interested in helping out improving the code and/or documentation is welcome to participate by joining the #twisted IRC channel on irc.freenode.org.
As maintainer of the Streaming XML bits in Twisted (including
Jabber support), I've committed to work on removing the last
Jabber-specific stuff in Xish' xmlstream module,
making it generically usable for any kind of streaming XML. The
code that is taken out will be moved to Twisted Words. The plan is
to make the Jabber support in Words XMPP compliant. For example, it
should support stream features like SASL and TLS, gain an idea of
the three XML Stanzas and also properly handle stream level and
stanza level errors. I've started on this a while back already,
putting my code in my personal branch in Twisted's SVN
repository.
So, what do you use a generic Streaming XML module for. Streaming XML is basically opening a socket and exchanging first-level elements (direct childs of the root element that we call stanzas) during the lifetime of the connection. An example use is handling FeedMesh streams. The concept of FeedMesh is sharing pings of updated blogs between entities like PubSub.com and blo.gs. Monitoring this stream can be as simple as the following snippet:
from twisted.xish import xmlstream
from twisted.internet import reactor
def onPing(element):
print "Ping for %s" % (element["rss"])
def connected(xs):
print "Connected!"
xs.addObserver('/weblog', onPing)
f = xmlstream.XmlStreamFactory()
f.addBootstrap(xmlstream.STREAM_START_EVENT, connected)
reactor.connectTCP('sandbox.pubsub.com', 9999, f)
reactor.run()
This opens a connection to PubSub.com's experimental service. When
stream has been started (the client will receive a root element), the
STREAM_START_EVENT event is dispatched. The function
connected will be called with the actual XmlStream
object. This function sets up a new handler based on an XPath-like
expression. In this case, we want to monitor weblog stanzas. The
onPing function will be called for each matching
element, passing the object representing the element. The element's
attributes are available as items of the object.
The FeedMesh services have varying terms of service. Currently, they are at most experimental and you should not use them for updating feeds in a (desktop) feed reader, unless the service operator specifically allows this.