
These IM networks are islands.
The net does not like islands.
Being trapped on a small island is not fun, even if your friends are with you
Besides, do you really trust aol, ms, or yahoo?
These data islands need to be thrown out. We need something that will...
Each entity on a jabber network is addressable via a JabberID or JID
A Jid has three parts
juliet@capulet.com/balcony
In the above JID, juliet is the node, capulet.com is the domain, balcony is the resource
Not all clients are equal, some are good, some are great, some are just plain crap
Features that are required for basic IM
Nice features that are almost required
Find a public server. A list is over at jabber.org
A few things to note
Setup your own server, more on that later
There is normally a default resource provided by the client. Feel free to change it.
The key to IM is presence, it is what makes IM unique
There is no fundamental difference between the states of presence in jabber and other IM systems
Resources allow you to have multiple connections with the same account. To help the network figure out where to send stuff, we have priorities.
Negative priority? huh?
A negative priority is a way to say, "Please do not send me stuff"
To send a message, all you need is the destination's JID. There are several types of messages
Jabber has privacy lists and other tools to prevent people from harassing you
In order to prevent an entity from flooding the network,there is karma
It acts like a throttling mechanism. Once you send too much data, it slows the data stream down. Once a time has expired the throttle is removed
Karma is unique per server
A comparison of jabber servers is at http://www.jabber.org/admin/jsc/
There are lots of FOSS options:
You can setup your own server. You would do this for the same reasons you would setup an email server.
Most servers have similar implementation concepts
Some core concepts fundamental to administer a jabber server
Most jabber servers support components, in other words plugins to the server
xmpp/jabber is simply a xml stream routing protocol. It is not limited to IM.
Examples of interesting things to do
J-EAI is perfect example of using jabber outside of the IM space
<?xml version="1.0"?>
<stream:stream
to="example.com"
xmlns="jabber:client"
xmlns:stream="http://etherx.jabber.org/streams"
version="1.0">
</stream:stream>
C: <?xml version="1.0"?>
<stream:stream
to="example.com"
xmlns="jabber:client"
xmlns:stream="http://etherx.jabber.org/streams"
version="1.0">
S: <?xml version="1.0"?>
<stream:stream
from="example.com"
id="someid"
xmlns="jabber:client"
xmlns:stream="http://etherx.jabber.org/streams"
version="1.0">
.... authentication ....
C: <presence/>
C: <message from='juliet@example.com' to='romeo@example.net' xml:lang='en'>
C: <body>Art thou not Romeo, and a Montague?</body>
C: </message>
S: <message from='romeo@example.net' to='juliet@example.com' xml:lang='en'>
S: <body>Neither, fair saint, if either thee dislike.</body>
S: </message>
C: </stream:stream>
S: </stream:stream>
Random, almost cool utils I wrote
Other random interesting things
jabwatch --exec="make"
echo "Where for art thou?" | jabsh --msg --to=romeo@montague.net/orchard --type=chat
What open protocol would not be complete without a bazillion libraries in all the languages known to man
A complete list is at http://www.jabber.org/software/libraries.php
There is: c, c++, java, python, perl, ruby, tcl, delphi, obj-c, c#, flash, javascript, php
Jabber Enhancement Proposals (JEP) define extensions to the base protocol. They are what make jabber useful beyond simplistic IM.
Rules of thumb when writing a JEP
Current JEPs are at http://www.jabber.org/jeps/
of course there are mailing lists, the big ones to lurk (maybe participate) on:
For all the gory details head over to http://www.jabber.org/about/lists.php
there are jabber help areas via jabber, obviously
There are two place to go, that will take you everywhere in jabber land
And the shameless plug
OpenAether has a lot of resources and code related to jabber, http://www.openaether.org