Agregador de noticias

Remko Tronçon: HAProxy Alerts with WebHooks

Planet Jabber - 15 August, 2016 - 22:00

I want to be notified immediately when one of the backend servers behind my HAProxy instance goes down. HAProxy offers alerting functionality, but only via SMTP: when a backend goes down it sends an email to a list of recipients via an SMTP server you provide. Unfortunately, email isn’t an ideal mechanism for real-time notification, and I don’t have an SMTP server accessible from my HAProxy instance. In this post, I’ll show my setup of HAProxy posting its alerts to a Slack channel and the Pushover push notification service, using smtp-http-proxy and AWS Lambda.

Continue reading post

Peter Saint-Andre: Working for Freedom

Planet Jabber - 14 August, 2016 - 00:00
Almost four years ago to the day, I posted some hopeful thoughts about working for freedom within the Republican party, specifically within the framework of the Republican Liberty Caucus. I changed my voter registration to Republican, attended a few meetings and caucuses, and started to learn a bit about how electoral politics works at the local level (which, in the county where I live, mostly means Republican party politics).

Tigase Blog: Message Archive Component

Planet Jabber - 13 August, 2016 - 00:30

The Message Archive Component provides for storage of messages and stanzas.

Christian Schudt: Babbler 0.7.1 (Bugfix) Released

Planet Jabber - 11 August, 2016 - 10:57
A bugfix version of the XMPP client library has been released to Maven Central: 0.7.1

Here's the changelog:

  • Discovering services should not fail immediately if one sub-query fails.
  • Make sure abnormal WebSocket disconnections trigger the reconnection.
  • Make sure RECONNECTION_SUCCEEDED event is triggered for external components.
  • Add listeners to listen for successful or failed send operations.
  • Add public constructor for the SASL challenge class.
  • Add public constructors to SASL Failure class.
  • Make sure to not write XMLConstants.XML_NS_URI to XML elements (FasterXML Aalto’s XMLStreamWriter implementation writes it)
  • Add DataForm.Field#getValue() and implement toString() method.
  • Add convenient API to compare two MUC affiliations and roles (i.e. Affiliation.OWNER.isHigherThan(Affiliation.ADMIN))
  • Compare presences of MUC occupants in the Occupant’s Comparable implementation.
  • Minor performance improvement by using a ListIterator in collection based result sets.
  • Discover PubSub services by identity, not by feature name (it’s more reliable)
  • Add nextPage() and previousPage() method and refine the naming of other methods in result set management (e.g. having forCount() and forItemCount() was confusing)

Tigase Blog: Tigase JaXMPP Client v3.1.3 Release

Planet Jabber - 10 August, 2016 - 19:31
Announcing a maintenance release of Tigase JaXMPP Client Library v3.1.3!

Alexander Gnauck: Unity development with MatriX

Planet Jabber - 10 August, 2016 - 11:27

A question which comes up very often is the following:

Can I use MatriX with Unity 3d?
Of course you can. Many of our customers are using it with great success in their Unity projects.

Unity is based on Mono. MatriX is designed for cross platform and works on all major .NET platforms, including Mono.

Many Unity developers have some problems to get started with MatriX on Unity.
This post should be a small tutorial and address some of the issues you may be facing during your Unity development.

1) Download the correct MatriX dll (Mono build). MatriX builds are not universal, which means you need to download and reference the MatriX library for Mono.
You can get the latest Mono build from NuGet here:

2) MatriX requires System.Xml.Linq.dll. Make sure that you reference System.Xml.Linq in your project as well and add it to your assets. Otherwise Unity may throw an exception when you run your project.

3) Depending on your Unity version you may get compiler errors on iOS. When you use the latest Unity version this should be no problem. On older Unity versions this problem is related to obfuscation. To resolve this please contact us directly.

4) The iOS stripping feature causes problems. It does not work when reflection gets used. The core Xml serializing engine in MatriX is build on reflection using a factory pattern. You either have to remove stripping from your complete project, or exclude the MatriX classes.
Here is an example of a link.xml file excluding all MatriX classes:

<linker> <assembly fullname="Matrix"> <type fullname="Matrix.*" preserve="all"/> </assembly> <assembly fullname="mscorlib"> <namespace fullname="System.Security.Cryptography" preserve="all" /> </assembly> </linker>

It looks like disabling all stripping in Unity is not enough and the link.xml file above must exist.

5) Some of our users reported that connecting to an XMPP server does not work inside the Unity editor because of some networking problems of the IDE. When the code gets executed or published on a device it works fine. This is a restriction of Unity and not related to MatriX.

If you run into any other problems please contact us directly. We do our best to solve them.

ProcessOne: XMPP Radar Newsletter #13

Planet Jabber - 9 August, 2016 - 13:49

Welcome to the 13th issue of our newsletter. Here are the links we found interesting in July:

Go’s March to Low-latency GC

Twitch uses Go for many of their busiest systems. Its simplicity, safety, performance, and readability make it a good tool for the problems they encounter with serving live video and chat to millions of users.

XMPP : Swiss Army Knife for Internet of Things (IoT)

IoT communication is complex and varied, and XMPP is a great candidate for an application-layer protocol. Developers can use it in IoT for communication among devices and their corresponding servers and users in the cloud.


Mitto is a worldwide IoT SIM card for connected devices. It wants to make your IoT projects more about the actual project and (much) less about figuring out cellular carriers and connectivity.

Fighting XMPP Abuse and Spam with ejabberd

In this video, Mickaël Rémond explains the features, options and API that can be used to protect ejabberd servers from spam and various other types of attacks. The video was recorded at ejabberd Advanced Erlang Workshop in Paris.

XMPP Mobile groupchat: Introducing MUC Subscription

We are announcing MUC Subscription, a new experimental feature in ejabberd that makes group conversations in XMPP work seamlessly with mobile clients.

Open Source Contribution: XMPP Module for React Native

Working with React Native, a relatively new mobile app development framework has overall been a great experience. However, one of the common complaints of developers about react native has been the lack of off-the-shelf libs/modules for certain use-cases e.g. XMPP.

Read and Write to Devices With Converse.js

This tutorial is about using Converse.js to read values and write values to devices, and also retrieve history of fields.

New Jabber/XMPP Client for iOS

Intercambio is a Jabber/XMPP client for iOS. It is open source and you are welcome helping to improve it and shape it to your needs.

Stefan Strigler: Otalk IM

Planet Jabber - 4 August, 2016 - 09:34

A customer of mine asked for a WebRTC based, self hosted solution. So I started investigating and stumbled upon the great Otalk IM Client. Unfortunately it has not been maintained for a while. I decided to go with it nonetheless. I updated dependencies as required to make them work with latest stable NPM (3.x) and Node.js (6.x) as applicable and fixed bugs all along the way. Check out my fork if you are interested! Feedback would be very welcome. I think it makes for a very good starting point if you were about to create your own WebRTC solution. Or maybe even just a regular chat client.

ProcessOne: ejabberd 16.06

Planet Jabber - 3 August, 2016 - 15:07

We are proud to introduce our new ejabberd release, ejabberd 16.06. As usual it includes many bug fixes, but also several improvements.

The big improvement in this release is a new Access Control List (ACL) infrastructure. ACL rules are used in ejabberd config file to define fine-grained access to ejabberd features.

In ejabberd 16.06, the ACL configuration has been much improved to make it both simpler to use and easier to read. Moreover, ACL and access rules are not mandatory anymore when configuring access restrictions for a feature or a module: You can just inline the user, for example, making small configuration much easier to setup properly.

To make you even more comfortable, our new code is still supporting the old syntax and you can mix old and new syntax. It means that you can still use your existing configuration file and that you can migrate incrementally, as needed.

The new ACL syntax

New access rule will look like this:

access_rules: my_access: - allow: admins - deny: blocked - allow: - user: "" - ip: "" - allow: moderators

This is an example definition for my_access rule. It is composed of four groups. They are evaluated from top to bottom order. the first with all listed acl rules evaluated as true is used as result. If none of them matches, evaluation fallback to default value deny. Above definition can be parsed as: if user belongs to ACL definition admins, return allow, if not, and user belongs to ACL definition blocked, return deny. otherwise for user “” when connected from ip: “” return allow, and for users in ACL definition moderators return allow as well, in all other cases return deny.

We can see in this example two new additions that were introduced in this rewrite:

  • you can now directly specify ACL definitions inside access rules (you no longer will be required to define ACL rules for each case)
  • you now have the ability to require a match on several ACL rules types at this same time (in the example: ip and user).

You can use any rule that is allowed inside acl: sections (like user, server, resource, user_glob, etc.) and one additional rule that is allowed only inside access_rules: section, acl: NameOfACL that will look for definition of NameOfAcl inside acl: section and use it for matching. If you have only one ACL rule name to use you can use short form - allow: acl_rule, additionally - allow: all or - deny: all can be shorted still to - allow and ‘- deny`.

Shapers can also be specified using new syntax, but they now go into shaper_rules: section and they look like that:

shaper_rules: my_shaper: - 100: admin - 10: all

Rules defined in access: section will use old syntax, and work as before, so you don’t need to update your old config, to adapt it to that change.

At last, one can define module specific access rules directly in modules configuration section, this is simpler to understand when reading configuration.

Let’s get a simple example of the changes. With previous ACL implementation, one could have this:

acl: bad_servers: ip: - "XXX.XXX.XXX.XXX/32" admin: user: - "aleksey": "localhost" access: muc_admin: admin: allow muc_create: local: allow muc: all: allow s2s: bad_servers: deny all: allow c2s_shaper: admin: none all: normal modules: mod_muc: access: muc access_create: muc_create access_persistent: muc_create access_admin: muc_admin

Which can be translated to this since ejabberd 16.06 with new ACL implementation:

acl: admin: user: "aleksey@localhost" access_rules: s2s: - deny: - ip: "XXX.XXX.XXX.XXX/32" - allow c2s_shaper: - none: admin - normal modules: mod_muc: access: - allow access_create: - allow: local access_persistent: - allow: local access_admin: - allow: admin

Shorter and clearer. Please also note that you can use the JID literally as a string. The previous awkward username: domain syntax can go away.


This is a selection of the most relevant changes:

  • New ACL infrastructure
  • Add shorter version of some common access rules definitions
  • Allow @ inside acl rules user, user_glob or user_regexp to pass both user and server
    in single string
  • Add acl rule access_rules_validator and shaper_rules_validator for use in mod_opt_type and opt_type callback functions.
  • Allow using shapers defined by name like in s2s_shaper: fast
  • Allow mod_opt_type and opt_type to transform values passed to it, and support
    better error reporting
  • Do not call transform_terms multiple times in configuration processing when merging them
  • Don’t halt program when include_config_file is missing/can’t be read
  • Allow again multiple fqdn values in configuration
  • Allow passing username and ip to ejabberd_commands, and use it in mod_http_api
  • Fix path to epmd in ejabberdctl
  • push_roster: must convert read strings to binaries
  • set_presence: Fix command API
  • Fix for modules_update_specs command
  • Add ejabberdctl commands to manage oauth tokens.
  • Bounce messages sent to server JID
  • Fix C2S session leak in rare cases
  • Fix handling of queued stanzas on session timeout
  • Give more time to stop and kill epmd
  • When stopping ejabberd, stop modules after broadcasting c2s shutdown
  • XEP-0198: Use different error message for bounces
  • XEP-0198: Add ‘h’ attribute to element
  • XEP-0198: Also count stanzas when socket is closed
  • Fix pgsql compatibility on delete_old_messages command
  • Handle Redis connection in a separate module
  • Report in SQL when scram is enabled but the stored password isn’t
  • Update SQL escaping
  • Use MEDIUMTEXT type for muc_room.opts in MySQL schema
  • Send unique stanza id and archived tag also in the message carbons
  • Fix “assume_mam_usage: if_enabled”
  • Fix typo in mod_mam:select()
  • Updated support of XEP-0313 from version 0.4 to 0.5.1
  • Mnesia: Avoid cleanup on bag when disc_only, switch in memory
  • Mnesia: Don’t exceed table size limit
  • Mnesia: Use transactions when writing
Client State Indication
  • Fix handling of chat states
  • Simplify check for carbon-copied chat states
  • Simplify handling of PEP stanzas
  • Pass chat states of other resources
  • Unwrap carbon copies when checking for chat states
  • Add queue_pep option
  • Queue chat state notifications
  • Move CSI queue handling code from ejabberd_c2s
  • When stopping, delete only the configured hooks
Other modules
  • ext_mod: Set HTTP/1.0 so Github accepts the request
  • gen_mod: Compile early to remove undefined behaviour warning
  • mod_http_upload: Let client retry HTTP upload on file size mismatch
  • mod_last: Produce mod_last entry on account creation
  • mod_muc_room: Notify on affiliation changes
  • mod_register: Check password with jid:resourceprep when registering account
  • mod_roster: respect roster item changes introduced with roster_process_item hooks upon pushing
  • PubSub: Fix PubSub RSM on get_items
  • PubSub: Add support for PubSub publishing options
  • PEP: Fix sender in case of explicit pep subscriptions
  • ejabberd_xmlrpc: Report error when conversion of argument type fails

As usual, the release is tagged in the Git source code repository on Github.

The source package and binary installers are available at ProcessOne.

If you suspect that you’ve found a bug, please search or fill a bug report on Github.

Tigase Blog: XMPP An Introduction Part VII: Multi-User Chat II

Planet Jabber - 3 August, 2016 - 01:21
The second part of MUC description, going over roles and affiliations.

Swift Blog: Swift 4.0 (Beta): What’s new

Planet Jabber - 3 August, 2016 - 00:00

Those of you keeping an eye on the Swift or Isode Twitter accounts will have noticed that a beta release of the new Swift 4.0 is now available for download.

Swift 4.0 includes a number of important functional changes compared to Swift 3.0 as well as a significant change to the look and feel of the product.

The main changes are listed in the changelog but there are two big changes that you’ll notice immediately on launching this Swift beta:

Better Chat Monitoring

Swift already makes it very easy to monitor events in multiple chat rooms through the use of keyword highlighting rules. In response to requests from a number of users we’ve supplemented this with the addition of a “trellis” layout option, allowing multiple chats and rooms to be tiled instead of being exclusively displayed as tabs within a single window.

This new option (Change Layout from the View menu) allows the user to define the number and arrangement of tiles to be displayed simultaneously and then move chats or rooms into an appropriate position. The trellis layout option and the existing tabbed layout option can be flexibly combined.

New Chat Design

We’ve introduced a new, cleaner chat design which we believe will enable users (especially in MUC rooms) to keep better track of their own contributions to conversations allows for better display of message receipts and better indication of unread messages.

The Swift 4.0 beta is available for Windows, MAC OS X, Ubuntu & Debian Linux. Please email ( or tweet (@swift_im) any feedback you have to help us further improve Swift.

Peter Saint-Andre: Philosophical Encounters

Planet Jabber - 1 August, 2016 - 00:00
As I begin the large and deep task of (re-)reading the complete works of Aristotle, I am spurred to ponder why I am drawn to working through various philosophers in this way. I've come to see that there is an almost visceral element here, of directly confronting the insights of a great thinker and gaining intimate knowledge about how that person approached life and the pursuit of wisdom. In order to do this, I find that I need to read the philosopher's original language of expression: Greek for Aristotle and Epicurus, English for Thoreau and Rand, and German for Nietzsche (which makes me consider learning classical Chinese so that I can directly encounter Lao Tzu). I also find that I need to immerse myself directly in the philosopher's own words and not spend too much time reading other people's commentaries. Ironically, the outcome of my doing so is in each case a book that comprises more commentary! Yet for me the book that I write is merely a record of my personal encounter, which I use primarily to remind myself of what I have learned. Secondarily, I hope that by recording my own philosophical encounters I might inspire you to do the same with the great thinkers you find most congenial (and I would love to read about similar encounters with philosophers I likely won't have the time or inclination to work through completely myself, such as Confucius, Krishna, Buddha, Plato, the Stoics, Montaigne, Kierkegaard, Emerson, and Sartre). What's most important is the encounter itself, because it helps me gain more wisdom as I adopt some of the outlook and practices of someone much more sagacious than I am.

Ignite Realtime Blog: Smack 4.1.8 and 4.2.0-beta2 released

Planet Jabber - 30 July, 2016 - 09:22

I've just uploaded Smack 4.1.8 and 4.2.0-beta2 to Maven Central.


Smack 4.1.8 fixes a few minor issues and is expected to be the last release of the 4.1 branch. As always, Smack releases with the same major and minor version numbers are drop in replacements. Ideally you just need to change a single variable somewhere in your build system.


Smack 4.2.0-beta2 is the latest beta of Smack's current development branch. Notable additions include support for XEP-0313: Message Archive Management (MAM) and the IoT XEP series.

Peter Saint-Andre: Aristotle Research Report #3: Ethical Beauty

Planet Jabber - 30 July, 2016 - 00:00
Until my current reading of Aristotle's ethical writings, I had never noticed the connection he draws between ethics and beauty. No, not the surface beauty of physical good looks with which people are so obsessed these days, but the desire for true beauty: to have a beautiful character, to perform beautiful actions, to live a beautiful inner and outer life. Indeed, he frequently argues that an action is not truly ethical if it is not done for the sake of beauty. For example, someone who does something outwardly courageous only for the sake of social conformity does a good thing but not for the right reasons, whereas someone who performs the same act because it is a beautiful thing to do is in a higher ethical realm.

Tigase Blog: SCRAM-SHA1 Authentication Added

Planet Jabber - 29 July, 2016 - 02:42

Tigase XMPP Server now offers the added security of SCRAM.

ProcessOne: XMPP Mobile groupchat — Introducing MUC Subscription

Planet Jabber - 27 July, 2016 - 08:10

We are announcing today MUC Subscription, a new experimental feature in ejabberd that make group conversations in XMPP work seamlessly with mobile clients.

Toward persistent group chat participation

Today, a large proportion of XMPP chat projects are targeting both mobile, focusing on Whatsapp-like group conversations. Developers of such projects had been deeply frustrated because it was not possible to easily implement this feature on top of XMPP group chat features.

The main issue with XMPP group chat is that it is bound to user presence. Group chat in XMPP is based on XEP-0045: Multi-User Chat. It was designed to replicate IRC-like chat room, at a time where mobile internet connections were very rare. As a result, the protocol is based on presence. You join a room when you want to participate. You leave it when you are done.

On mobile, presence is almost irrelevant. You are always somewhat loosely reachable. However, your application may not run all the time because, to save battery life, mobile operating systems will hibernate your application when you are not actively using it. Mobile applications are supposed to be reachable through push notification services as they have generally no open TCP connection to the server in background state.

From XMPP point of view, it means that when the application is asleep, the XMPP client is not online. When it is not online, the user cannot be a participant in any chat room. He does not get messages nor notifications and thus misses events in the chat room.

Moreover, every time the user gets online, he has to rejoin all his ongoing conversations (MUC rooms). This is very consuming in terms of battery life and bandwidth.

Several workarounds had been tried by developers:

However, none of this approach did prove to be an easy straightforward solution to the problem. It did not work very well in the sense that these work-around are not totally transparent and affect several parts of your client development.

MIX to the rescue

There is a work-in-progress at the XMPP Standard Foundation (XSF) that aims to build a full rework of the Multi-User Chat specification, taking the requirement to avoid relying on presence into account.

The specification is called XEP-0369: Mediated Information eXchange (MIX). ejabberd already implements the draft since a few months and we are actively working on it and supported the effort.

However, this is a work-in-progress that will take time before being fully usable as a Multi-User Chat replacement.

As we wanted to solve the problem today, for all XMPP developers, we decided to explore a path in-between. We developed a smaller, less ambitious extension, that solves the issues developers are facing to implement mobile group chat today. We are still committed to MIX implementation and we think our proposed extension will please mobile developers and help us channel feedback to the XSF to build future proof MIX specification.

Introducing MUC Sub

So, what is MUC Sub about and how is it designed ?

The goal of MUC Sub is to try to rely as much as possible on existing MUC specification, while making the smallest possible change that make mobile group conversation client easy.

We found that we only missed a few components. To play well with mobile, we just need to add the ability to send and receive messages to a room without having to send presence to the room. More generally we have to allow other type of interactions with the room (like configuration changes for example or kick and ban) without having to send presence to it to become a participant.

Basically, you need to be able to have a permanent subscription to a given room to receive the events. That subscription should grant you the right to send message and interact with the room. The name of our extension come from that simple idea: Add subscription feature to Multi-User Chat, hence MUC Sub.

We found we can put all the pieces together by reusing existing XMPP protocol components:

  • Reuse XMPP PubSub protocol to manage the subscription and wrap the events received as a subscriber from the room.
  • Rely on Message Archive Management to let client resync history as they need.
  • Rely on existing Push components (ProcessOne extension or XEP-0357: Push Notifications) to send events to mobile devices when application is asleep.

After writing a draft specification and a working implementation, we are very happy with the result: We have a working MUC Sub implementation that enables mobile group conversations. And we did all this by leveraging existing MUC specification and staying compliant with it.

The draft protocol is published on ejabberd documentation site: MUC Sub Draft

ejabberd main repository contains the code for MUC Sub. You can find it on Github: ejabberd.

The feature is enabled by default. To use it, just make sure you set the new parameter “Allow subscription” in the room on which you want to use it.

Next steps

We suggest, you can read the draft document we wrote, use the implementation and develop a mobile client.

Please, while you do so, send us your feedback about your success and troubles implementing your mobile group conversations.

MUC Sub is already available in ejabberd Community Edition repository and is going to be available as an experimental feature in ejabberd 16.07.

It will also be deployed as an experimental feature for ejabberd SaaS platform during the Summer. We are planning to test it as soon as possible with existing customers that are already willing to use it in production.

We hope you will like the approach and develop great new mobile clients thanks to ejabberd and MUC Sub !

ProcessOne: Fighting XMPP abuse and spam with ejabberd – ejabberd Workshop #1

Planet Jabber - 27 July, 2016 - 08:05

In this video, Mickaël Rémond explains the features, options and API that can be used to protect ejabberd servers from spam and various other types of attacks.

The video was recorded at ejabberd Advanced Erlang Workshop in Paris.

You can watch the full talk online:

You can also download the slides: Fighting XMPP abuse and spam with ejabberd.

Monal IM: More TVPortal

Planet Jabber - 23 July, 2016 - 22:43

I spent the day learning more about how tvOS and the focus engine work. I’ve further improved the UI for TVPortal.  I think the details screen is final, the recordings screen is almost done and playback screen is done.   This has been an interesting project and quite educational.  I haven’t really dabbled in media streaming in a while.  

Ignite Realtime Blog: Support for IoT XEPs added to Smack

Planet Jabber - 23 July, 2016 - 13:52

Starting with b91978dcc4ae partial support for the IoT XEPs was added to Smack. The XEPs consists, amongst other XEPs, of

  • XEP-0323: Data
  • XEP-0324: Provisioning
  • XEP-0325: Control
  • XEP-0347: Discovery

The XEPs are in experimental state, which means changes to them are possible.

Smack does currently only support a partial set of the mechanisms specified, especially when it comes to Data and Control. For example only boolean and integer values can be read and written But support for more data types can be easily added.


The IoT API for those XEPs is available in the latest snapshot builds of Smack, which are available via Maven Central's snapshot repository.  A quick start guide can be found here.


The development of the API was sponsored by Clayster.

Clayster creates technology to secure trust in the transactions between physical and digital entities, and strives to be that generic foundation for your physical assets digital life.

Clayster has an IoT discovery and provisioning platform supporting XEP-0347 and XEP-0324. The platform is available for those who are interested to explore XMPP and IoT further.  If you don't want to run your own infrastructure, Clayster is able to provide an XMPP Server and the discovery/provisioning platform for you. Feel free to reach out to rikard at if you are interested to learn more about using XMPP for your next IoT project.

Tigase Blog: XMPP An Introduction Part VII: Multi-User Chat

Planet Jabber - 23 July, 2016 - 03:09
Now that we’ve seen some basics of an XMPP server on motion, it’s time to start looking at components.
Distribuir contenido