After a bit more time than expected, I am pleased to announce the release of poezio version 0.9.
Python 3.4 and slixmpp
Once again, we are moving the python target to the latest available version.
This time it is because we switched to slixmpp, which is our own fork of SleekXMPP (the library we used previously), with asyncio support baked in. For the motivation of the fork, please follow this link to louiz’s blog.
(tl;dr: more readable code, no race conditions, and easier thinking)
This does not mean we completely dissociate from SleekXMPP, as slixmpp still shares most of the codebase we can apply most new features and bugfixes without changes, as well as in the opposite direction.
Improved OTR Plugin
The main new feature is the Socialist Millionaire’s Protocol (SMP) which allows two people to check their respective identities in-band through a shared secret (where previously the two contacts had to exchange their key fingerprints in another channel).
Other improvements include some level of HTML parsing with options to make user experience a bit less awful, and some security-related options regarding encryption enforcement and automated session negociation.
Authentication with client certificates
With these you can, once logged in, add, disable, list, remove a certificate from the server.
Ad-hoc commands in XMPP (XEP-0050) allow you to interact with entities in a transparent manner (for example, in prosody if you load the right module, you can load/unload modules, remove users, disconnect users while it’s running from your XMPP client).
From now on, poezio can list and execute ad-hoc commands.
Previously, nickname colors were assigned according to the order in which participants entered the room, which was fine when you kept poezio open for months, but it was still confusing, especially if you had the same people in different rooms with a different color.
Starting from this version, the nicknames are hashed (in order to provide a uniform distribution) and then mapped with the colors by default. People using the same nick everywhere should therefore always have the same color. If you prefered the old behavior (for whatever reason), it’s still there and can be set through a config option.
Additionally, Perdu added a way to fix a nick color, so if you think someone’s nick should be blue instead of whatever color it has due to the algorithm, you can set it permanently.
Message Delivery Receipts
Poezio now sends messages asking for delivery receipts, if the remote entity supports that. It can of course be tuned within the options (whether you want to send or receive them), but it is enabled by default. If both parties support it, sending a message will display a green checkmark like the image below.
Bookmark management tab
The /bookmarks command was previously used to list all the known bookmarks; now it opens a new tab allowing you to edit bookmarks, passwords, and choose the storage backend and autojoin.
Some parts of poezio were very badly optimized. Some still are, but a few common scenarios should be much faster (e.g. joining a room with thousands of people in it). The slowness is usually unnoticeable in normal cases (e.g. someone using it on a post-2002 computer with a few tabs open), but it gets harder when it’s on an underpowered ARMv7 dev board with more than a hundred rooms open and a constant stream of presence and messages.
louiz’ wrote a nice IRC component called biboumi (which is, in my opinion, the best IRC gateway available). Sadly, mixing IRC and normal MUC tabs is a bit cumbersome so I wrote a simple IRC plugin which, once configured properly, handles logging in with nickserv and joining rooms once authenticated and provides a few commands to help with recurring scenarios. Its inner workings are a bit hackish, but it is much smoother than doing it by hand.
One issue when a connection timeouts or a server reboots is that you may never be notified that you are not actually in a chatroom anymore until you try to send a message or a presence through it.
With this new version comes a feature called self-ping which, once enabled and tweaked to fit specific needs, will make poezio ping itself through the chatrooms every once in a while when there is no activity. If an error is received, it will leave the room (to make sure it’s not in anymore) and re-join immediately.
This should end the painful mornings where you got disconnected from all your rooms shortly after going to sleep because a server rebooted or whatever.
Obviously poezio now depends on the slixmpp library, which itself requires aiodns, and also has one module which can be optimized with cython (in which case libidn will be required, as well as its headers during the compilation).
As always, if you notice an unreported bug still unfixed in latest master, please report it, thank you.