Planet Jabber

October 12, 2017

Erlang Solutions

Messaging feature sets and their benefits

This is an excerpt from Boost your engine of growth with chat and social value by Nicolas Vérité.

Messaging feature sets and their benefits

  • A lot of features have come and gone over the few generations of messaging.
  • Some of them stick around much longer than others.

Interpersonal assistant chatbots, for a warm welcome

A welcome bot will allow you - among other things - to handhold users through first uses, conducting them through a critical part of the customer journey, avoiding early churn. Also, it will fix a common situation with new apps: the emptiness and solitude. When you install a fresh app it should definitely show anything but the void and blank spaces.

A machinegun, marketing-driven push notifications could fit the companionship gap as well, but these are annoying and intrusive, and sometimes they come with disrupting the experience with the app. This may void user value, consequently, synthetically increasing your vanity metrics for an immediate fall once the shots are fired.

A chatbot has more empathy and emotional triggers due to its location: inside the one-to-one chat. This gives it an air of interpersonal feeling, as opposed to an external and disconnected notification center. A welcome chatbot is in-app automation (client-side or server-side), as it leverages the conversational experience (the vertical timeline). There is no absolute need for any type of AI - your chatbot can be rule-based with quick replies, as it belongs to a properly mapped user experience. Such a chatbot is an opportunity to be fun and warming, as it can establish the users’ first steps, and thus a general “connection” to the experience.

Warning: the experience of a chatbot leads to disappointment sooner or later in the user’s journey. That is especially true if the AI or the decision-tree is not fit for the job. So you have to set the expectations for your users, to prevent or delay that disappointment. “A smile is the universal welcome.” (Max Eastman)

Social, open networks, for higher discovery

Simply put, the social network sector is quite overcrowded, as the major players over there are really huge. The barrier of entry is high… Unless you are bringing a really disruptive innovation, that is proven to be a game changer, and fit for massive adoption. But then it is often a hard sell.

Instead, instant messaging is again booming, mainly thanks to its third generation. There are plenty of players here, and thus it is indeed very hard for a new app to get discovered on the stores, but the market is more accessible to businesses.

Social posting, liking and commenting are features all well known on social apps. Building the same features on top of conversational apps is a trend today, a real trend even if still a bit shy and hardly noticeable. Here is why: it allows users/customers to discover communities, places, and people. It enables browsing, searching, and interaction through all available open and public content. In other words, it indirectly gives humans more opportunities to interconnect with more humans and bots. And as a consequence, this increases their network value. It is about growing your users’ network and own branding, and to engage with their audiences.

Warning: the content inconsistency that you are used to in various apps, whether you refresh or change the device, is a real pain. Be careful about the expectations when people browse to find something. “The only real voyage of discovery consists not in seeking new landscapes but in having new eyes.” (Marcel Proust)

Groupchat, closed networks, for continuous interactions

The groupchat market is still accessible, although massive adoption is clearly observable. A multiplicity of categories and viable niches exist today, and the exploration is not over. Proof of this resides in some big players (Cisco, Microsoft, Google) jumping on the bandwagon, after the huge successes of Slack, HipChat, Mattermost,, Zulip, Matrix, Ring. The model has definitely won hearts, with the numbers following suit. Expect a wave of mergers and acquisitions to follow (Atlassian already bought HipChat).

What is cool and very well understood about those apps, is that they target groups and communities, in other words, they map to organically highly interconnected networks and serve them. Just bring in one team at a time, and retain them all. Third generation IM app makers understand that brings great engagement and retention to their networks. These activities are mainly happening at the workplace, and during the workday. So there is minimal annoyance after work.

The never-ending stream of groupchat messages is much more fluid and rapidly evolving than social content. Partly because the conversational timeline is much more intuitive and easy to use than social hierarchy and weird algorithms (Facebook and Twitter were much harder to grasp for beginners).

Group chats necessitate a far lower number of people in a closed environment to generate the same engagement, as compared to public social streams. That is aimed at deeper and consistent relations, that your users have to maintain over time.

Warning: easing your users’ maintenance of their network is key to consistency. “Success isn’t always about greatness. It’s about consistency. Consistent hard work leads to success. Greatness will come.” (Dwayne Johnson)

A balanced combination leads to a winning alchemy

Mixing together open and closed networks for discovery and engagement is key to users’ network growth. Don’t leave onboarding to the apathetic factory lines and lower the barrier of entry. Just provide a network, with a perceivable and obvious network value, and means to grow it over time. All these elements will contribute to and catalyse the acquisition, the retention, and referral.

An application that is fully loaded with tons of features is quite a clear signal that the makers don’t know what to do, and want to do it all. A carefully crafted feature set, with a strong focus is the path to reach your targets and fix their problems or address their needs.

Anyway, your feature sets always go through the funnel or the filter of adoption, measured by AARRR/pirate metrics. This is the path that is necessary to deliver network value to you user and customer base. “There is no decision that we can make that doesn’t come with some sort of balance or sacrifice.” (Simon Sinek)

For more insights and practical advices on how to find your optimal feature set and increase the network value of your product, read the full article: Boost your engine of growth with chat and social value by Nicolas Vérité.

Subscribe to our newsletter for the latest Instant Messaging news, visit our webpage or contact us directly to discuss your project or simply to ask a question.

October 12, 2017 14:59

Tigase Blog

Tigase XMPP Server v7.1.2 Released!

Tigase XMPP Server v7.1.2 has been released! Please review the change notes below to see what has changed since our last release.

by Daniel at October 12, 2017 01:51

October 08, 2017

Peter Saint-Andre

Ultra-Short Poems

Reading a book on Matsuo Bashō has renewed my interest in ultra-short poems. The best-known form here is haiku, which in Japanese consists of three sections of 5, 7, and 5 syllables each. The most famous haiku is probably this one written by Bashō in 1686:...

October 08, 2017 00:00

October 05, 2017

Fanout Blog

Dev-centric API pricing is the future

As folks who power realtime APIs, we’re always interested in broader trends in what is referred to as the “API Economy.” In the last couple of years, we (and everyone else) have seen the proliferation of APIs skyrocket. ProgrammableWeb indexes over 18,412 APIs. Even Walgreens has an API.

This has generally been a good thing for developers who want to build new technology. Instead of having to build your app from scratch, you can assemble distributed processes for everything from payments to messaging that are built and scaled by specialists, leaving you with more time to focus on your unique functionality. There are APIs and “as-a-services” (we’re one of them), for almost everything you can imagine – and this means developers are implementing more APIs in a single project than ever before.


by daniel at October 05, 2017 19:52

Erlang Solutions

Master your pirate metrics, AARRR

This is an excerpt from Boost your engine of growth with chat and social value by Nicolas Vérité.

Instant messaging or chat is a constantly self-reinventing universe. In this article we focus on businesses who are building chat apps and apps with chat. From early stage startups to big corporates, it is always good to remind and always be conscious of some the basics of business, and how the interlinking and mechanics of social and messaging allows you to accelerate growth and consolidate your sustainability.

Master your pirate metrics, AARRR

Pirate metrics are business KPIs for product or service marketing, sales and more generally product management. It is a big funnel of quantitative data telling the story of your customers’ journey. This data describes different stages of your relationship with the client: Acquisition, Activation, Retention, Revenue, Referral. Together these pirate metrics add up to a famous pirate battle cry - “AARRR”.

What are the metrics behind AARRR?

  • Acquisition: people who come to your product or service
  • Activation: people who actually do something with your product or service
  • Retention: people who continue to use your product or service regularly
  • Revenue: people who pay
  • Referral: people who talk (positively, hopefully) about your product or service!

More precisely, it is a set of critical engine parts of your growth machine. Each single value of these five metrics is important for your measure, so that you better understand your customer journey, and can optimise it.

The ratio of conversions for each step is also very important. But don’t lose sight of the bigger picture; it helps you identify what you are good at, and where to improve.

Going deeper, next we will focus on the organic aspects of Instant Messaging: Acquisition, Retention, Referral. We will not cover Activation, because it mostly belongs to your onboarding, neither will we cover Revenue because it mostly belongs to your business model. However, it is clear that Activation and Revenue are not fully disconnected from Acquisition, Retention, and Referral.

Here is how to boost the triplet “Acquisition, Retention, Referral”.

Features for Acquisition and traction

There are a number of generic chat features available that appeal to your potential users and thus contribute to Acquisition. One-to-one chat or interpersonal messaging obviously comes to mind first. Then group chat is definitely contributing a lot to your traction, as it is more fun and collaboration for users, the generation Slack/HipChat and their dozens of followers showed that massive enthusiasm and need. And finally, social networking is taking all of that to the super next level.

Then you can consider secondary features, such as presence, status, availability, profiles, avatars, and contact management, including blocking. There are even more features, such as typing notifications, last message correction, sent/received/read receipts, pictures/sounds/video/location messaging, archiving, mentions, stickers/emojis, integrations, chatbots, full-text search, the stories craze, and of course end-to-end encryption.

Let’s not look too deep into all the features on offer for now, you should focus on creating your own subset, based on your customer demand, and the problems you are trying to solve. Your unique custom features will be your differentiators.

Warning: carefully craft and tailor key distinctive features for your audience. Do not use ALL the commodity features. The goal is to avoid feature factories, making your app look like blinking Christmas decorations. “It seems that perfection is attained not when there is nothing more to add, but when there is nothing more to remove.” (Terre des hommes, Antoine de Saint-Exupéry, 1939)

Activities for Retention and engagement

Here you will use mechanics that will not add friction, nor will you focus on the features that “just add value” for individuals. You will focus on conversation (re)activators, such as chatbots, integrations, group chat and social chat (natural user feature, not marketing features to synthetically force the use of the app).

These “wake up” conversations are to be considered in the perspective of the user. These simple tricks allow you to re-capture a significant ratio of dormant users, and greatly improve user engagement with your app.

Warning: be careful of notification fatigue, and information overload. Of course you cannot control your audience’s activity. So be wise in buffering, aggregation, and re-activation. “A wealth of information creates a poverty of attention.” (Designing Organizations for an Information-Rich World, Herbert Alexander Simon, 1971)

FOMO for Referral and going viral

A highly interconnected community will naturally, organically pull the missing people in, and bring more nodes and interconnections into the network. This relies on a very simple psychology trick: FOMO (or the Fear Of Missing Out). If a group or community is almost fully present on your app, having fun with all the content and interactions, then the elements that are still outside this circle will be magnetically attracted.

Warning: do not expect virality to spontaneously generate. The ecosystem will grow starting with much seeding effort. This is why you need to focus on two major tasks: capture a niche first in order to jump into another one, and ignite a viral wildfire on social media using best practices, i.e. prioritising micro-influencers. “A referral is the key to the door of resistance.” (Bo Bennett)

Each one of the organic triplet “Acquisition+Retention+Referral” feeds each other:

  • Acquisition+Retention: an app user seeing new friends joining in will engage and explore even more with the network
  • Acquisition+Referral: virality reduces your cost of acquisition
  • Retention+Referral: missing elements of an active and consistent group or community will be invited to join in

Interested in learning more about the power of social messaging and how to successfuly expand your app engagement? Read the full article: Boost your engine of growth with chat and social value by Nicolas Vérité and get practical advices on how to combine the forces of chat and social to increase the network value of your product.

Subscribe to our newsletter for the latest Instant Messaging news, visit our webpage or contact us directly to discuss your project or simply to ask a question.

October 05, 2017 15:56

Peter Saint-Andre

Internationalized RFCs

Ever since the first "Request for Comments" (RFC 1) was published in 1969, the RFC series has been typeset exclusively in ASCII text. It's almost a running joke among technologists and programmers. Yet that is finally changing. The recently-published RFC 8187 marks the first time that RFCs have included Unicode characters and an encoding other than ASCII (i.e., UTF-8). Today, RFCs 8264, 8265, and 8266 take that a step further by using non-ASCII characters in a more thorough-going way; appropriately enough, these three RFCs define revised versions of the PRECIS specifications for the preparation, enforcement, and comparison of internationalized strings in application protocols (thus replacing RFCs 7564, 7613, and 7700, which I authored in 2015). I'm sure many readers never thought they'd see a symbol like ∞ (INFINITY, Unicode code point U+221E) in an RFC, but we did it! Many thanks to the RFC Editor team for making this day possible, and to my co-authors Marc Blanchet and Alexey Melnikov for making this day necessary. ;-)...

October 05, 2017 00:00

October 03, 2017

Tigase Blog

XMPP Meetup Recaps

Recently the XMPP community had has a number of meetups across Europe. Working to improve and expand the scope and visibility of the platform, these meets have been held independently and during other conferences.

by Daniel at October 03, 2017 21:09

October 02, 2017

Prosodical Thoughts

Prosody 0.10.0 released

It's not 1st April, it's 2nd October. Which means the rumours you heard were true. Prosody 0.10.0 is released!

This is the first release of our 0.10 branch. All of our recent releases have been from our stable 0.9 branch, which has served us well since the initial release of 0.9.0 back in 2013.

However time marches on, and we have a long list of new features and modules that we want to share with you.

This release contains over 1500 new commits from many contributors, adding and modifying over 30,000 lines of code.



While it has been available in our community modules repository for some time, this release brings official support for Message Carbons (XEP-0280).

This feature allows multiple clients connected to the same account to see the same view of a conversation, making it easy to hop from device-to-device during an ongoing conversation and not worry about missing any messages.

Message Archive Management

Also becoming official is our support for XEP-0313: Message Archive Management.

Like Message Carbons, this feature allows clients to synchronize conversations. However thanks to the server-side archive, it also allows clients that have been offline to "catch up" on conversations that they might have missed. Combined with Message Carbons this provides a complete solution for "every message on every device", which is a key feature expected of modern communication platforms.

Our implementation is flexible, allowing configurable retention times and selecting whether you to store archives in memory, files, an SQL database or anything else that you care to plug into our modular storage API.

Security: Channel binding for SCRAM

Using technological cryptographical wizardry, this new authentication mechanism allows a client to verify that it is speaking to the correct server even if it doesn't recognise the TLS certificate. This is made possible via a feature in the SCRAM authentication protocol that forces the server to prove that it also knows the client's password.

Many thanks to Tobias Markmann for contributing this.

Built-in configuration checker

Prosody now has a very handy utility that attempts to identify common issues with your server setup. This includes checking your config file for syntax errors, but also checks your DNS, certificates and other aspects of your server are looking good.

It's a great first place to check if something isn't working the way you expect.

Metrics support

This release also adds built-in support for gathering metrics about the server operation. Although we've had some community modules capable of measuring various things in previous versions, they were limited by a lack of support in our core code.

The new API is a core part of Prosody, and although it is early days (many more metrics to be added in future releases), the basis is there and module developers are able to start using it today.

Currently the metrics can be aggregated internally, or sent externally to any statsd-compliant server. Other backends are possible via external libraries, for example we have a Datadog integration.

Simplified certificate handling

One of the trickiest parts of setting up a new XMPP service has been setting up certificates. Excluding certificate handling, setting up a new Prosody instance on a Debian/Ubuntu server is as simple as one command (apt install prosody) and editing one line in the config file (change "localhost" to your domain name). But obtaining and configuring the certificates, figuring out whether you need to add in an "intermediate" certificate or not, that was not so simple.

But thankfully new projects like Let's Encrypt and the ACME protocol are solving the problems associated with obtaining and managing certificates.

We have made similar progress in simplifying Prosody's certificate configuration as well. For example, if you use Let's Encrypt, you do not need to add any certificate configuration to Prosody's config file at all! A single command will automatically "import" new/updated certificates for the hosts in your Prosody config file, and instantly activate them in Prosody without a restart.

We expect this new feature to be usable by the large majority of setups. However for those who need a different configuration, the old "manual" method still works to give fine-grained control over the certificate configuration.

Everything you need to know about Prosody's certificate configuration can be found in our documentation.

Lua 5.2 support

Lua 5.2 was a major step in the language's evolution. It has been around for a while, but for a number of reasons (including a desire to stay compatible with LuaJIT), Prosody stuck with Lua 5.1 for a while. But it's time. This release adds initial support for running under Lua 5.2. There may still be some edge cases, so while we encourage people to use Lua 5.2 and report any issues, a stable production server may want to stick with Lua 5.1 for now.

Native websockets

This release also adds official support for websocket connections. Many web clients are already able to take advantage of this, connecting directly to Prosody from Javascript without needing to implement BOSH.

Many thanks to Florian Zeitz for the initial contribution of this module.

Other improvements

Finally, we've made countless other improvements and fixes in this branch. These include support for the newer and simpler, blocking protocol (mod_blocklist), and numerous improvements to our internal APIs for module developers to take advantage of.


If you are upgrading from a previous release, your life will be made easier by reading the release notes!

The Prosody 0.9.x series will continue to be maintained for major bug fixes until at least June 2018.


As usual, download instructions for many platforms can be found on our download page

If you have any questions, comments or other issues with this release, let us know!

by The Prosody Team at October 02, 2017 15:35

September 29, 2017


ejabberd 17.09

ejabberd 17.09 is out! This release mostly contains bugfix and adds few improvements.

New feature

New mod_avatar module

The purpose of the module is to cope with legacy and modern XMPP clients posting avatars. It automatically converts vCard based avatars (XEP-0153) to PEP based avatars (XEP-0084) and vice versa.
Also, the module supports conversion between avatar image formats on the fly: this is controlled by convert option. For example, to convert all avatars into PNG format, configure the module as:

    default: png

In order to convert only webp format to jpeg, set the following:

    webp: jpeg

Note: the module depends on mod_vcard, mod_vcard_xupdate and mod_pubsub. It’s not working on Linux-armhf and Windows yet. If you compile from sources, ejabberd should be configured with –enable-graphics option.

Updated OpenSSL libraries

Our installers now include OpenSSL 1.0.2l. These libraries are used as a fallback only if you don’t have them on your system, else the system wide version is used.
On Very old Linux systems (Debian wheezy with older glibc for example), ejabberd will fail to load them. In this situation, you have to remove libcrypto and libssl installed in lib/linux-x86_64 of your installer, and ejabberd will use older OpenSSL 1.0.1 from your system. We highly recommend to plan a system upgrade in this case anyway.



  • Harden ejabberdctl
  • Fix ejabberdctl quoting when using iex
  • Call earlier deps configure scripts during compilation
  • Fix iexdebug and iexlive commands
  • Quote $PEER in ping command to avoid hostnames containing “-” being interpreted as arithmetic
  • Docker: Sync containers from rroemhild and add instructions in README
  • Use eimp instead of ImageMagick calls for thumbnails creation
  • Add forgotten caching options to the validator
  • Fix ‘make install’ to work with new output from rebar list-deps
  • Rewrite muc_register_nick and muc_unregister_nick to be DB independent
  • WebAdmin: Fix deletion of multiple offline messages


  • Add support for XEP-0368 in outgoing s2s: SRV records for XMPP over TLS
  • Deprecate s2s_use_starttls: required_trusted
  • Don’t attempt to access(2) a certificate file
  • Let ‘domain_certfile’ take higher precedence instead of s2s_certfile or c2s_certfile


  • mysql.sql: Use multi-column index on username/ID
  • Use forked repo of Riak Erlang client to support OTP20


  • mod_avatar: New module with support for legacy and modern clients
  • mod_block_strangers: Introduce option ‘allow_transports’
  • mod_block_strangers: Block messages from strangers before mod_mam/mod_offline processing
  • mod_http_upload: Don’t ignore ‘custom_headers’
  • mod_muc: Improve presence-error and unavailable of multi-session occupants
  • mod_multicast: Fix start and reading of configured limits
  • mod_mam: Simplify check for anon MUC JID filtering
  • mod_mam: Refuse filtering anon MUC queries by JID
  • mod_privacy: Explicitly match against
  • mod_register: Introduce ‘redirect_url’ option
  • mod_stream_mgmt: Delete ‘c2s_init’ hook
  • mod_vcard_xupdate: Also replace vcard-x-update in direct presences


  • Fix get_items/get_item calls
  • Add correct order when requesting all items
  • Implement ‘6.5.7 Requesting the Most Recent Items’
  • Fix RSM support on SQL
  • Add RSM support on mnesia
  • Fix node_options: default options only apply on first plugin
  • Broadcast updated node configuration
  • Enforce controls on publish and delete items


  • Preserve correct order of deserialized XML elements
  • Suppress push notifications for online clients
  • Extract strings and prepare translation files works again


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.

by Christophe Romain at September 29, 2017 14:27

September 28, 2017

The XMPP Standards Foundation

Return of experience on XMPP meetup in Krakow

In May of 2017 a meetup was organized in Krakow, Poland. We announced it on the XSF blog, and on (also a few social networks).  The response from the XMPP/Jabber community was very positive, as we were fresh off the heels of FOSDEM and many members had just recently met at the XMPP Summit.

Philosophy & goals

Firstly, it was a cooperation between Tigase and MongooseIM. Both organizations provide open source XMPP server software and bring professional expertise to the protocol and its ecosystem.  However, we wanted it to be a humble and rapidly organized meetup, rather than a meticulously planned event. The meeting was planned with the adage 'done is better than perfect' in mind. The ultimate goal of the meetup was to meet colleagues of the XMPP and Jabber community, brainstorm, and overall improve communication between users and developers of the protocol.  An additional benefit from the meeting so soon after the Summit was to strengthen the trend and popularity of XMPP meetups in the European Union.

Speakers and presentations

Two speakers from Erlang Solutions and one from Tigase were on hand to make presentations.

Andrzej Wojcik of Tigase gave a presentation titled "Why use XMPP for IoT?". It was a factual comparison, efficient and straight to the point, as to why other options do not provide a proper solution. The alternatives, such as HTTP, AMQP, MQTT all have their advantages, but none bring a global solution as exhaustive as XMPP's. A demonstration was shown of a proof-of-concept of IoT devices being controlled via XMPP commands.

Andrzej Wojcik of Tigase

Szymon Mentel from Erlang Solutions, exposed the "ICE, STUN, and TURN" open standards implemented in MongooseICE, an open source server written in Elixir. The demo showed a movie and a camera stream from a Raspberry Pi. The stream was provided using Mangosta Android software, an open source XMPP client.

Szymon Mentel from Erlang Solutions

Piotr Nosek from Erlang Solutions, interacted with the audience around "Fantastic XMPP use-cases", showing the near-complete feature coverage of the open standards protocol and exploring what's missing or could be improved.  We hope that this discussion led to participant brainstorming and even more use cases for the protocol.

Piotr Nosek from Erlang Solutions

Feedback and outcome

We received nice feedback from all attendees, all were happy to have attended. There were some interesting question and answers following the presentation.  Followup discussions indicated that participants were engaged and were eager to contribute to the session.  It’s clear that these meetups can be far more engaging than a traditional chat session.  Being physically present seems to bring more wild and bright ideas to the front.

Audience of the XMPP Meetup Krakow

After the meetup, we all went in an underground bar to share some stories and beverages, near the old market square in the city center of Krakow.  It is hoped that this post-meetup tradition can be continued for the next session.  Ideally we’d like to host another in the autumn, please suggest topics and times and share your thoughts with us!

Follow us on

by Nÿco at September 28, 2017 09:29

September 26, 2017


Real-time Stack Issue #2

Here are the technology articles we found interesting in Issue #2. You can subscribe to this newsletter here.

Riot/Web 0.12 is Released

Riot developers announce another major update to Riot on Web & Desktop: v0.12

Run ejabberd as an Elixir Application Dependency

It wasn’t so easy to make it works on OS X, so I would like to share the list of challenges I faced during the installation. After this, I was able to run it locally, register a new user and connect via XMPP client!

Deep Look Into Matrix Protocol

Matrix is primarily characterised as a chat protocol. This protocol is designed to link up existing chat solutions such as XMPP (Jabber), IRC or Mattermost. XMPP originally had the same idea. But it lacked the various connections to the other protocols.

Time to Replace Slack! Who Will Win, MatterMost or Riot/Matrix?

Slack is the prodigy of the revival of team communication. This is an awesome development. In the begin days of the internet IRC (the grandfather of chat channels) was the way for nerd to have non stop communication with each other.

Gmail Chat was a Much Better Hangout

I remember the time I discovered Gmail’s new “Chat” feature. The small menu at the side of my inbox, with a list of friends I contacted most often. Occasionally, one of those people would become “green” and start a chat. It was like meeting each other, only it happened online.

An Analysis of Criminal Communications Strategies [PDF]

In the continuous game of cat and mouse between cybercriminals and the information security community, the criminals have long understood that they can act much more effectively together than they can individually.

by Marek Foss at September 26, 2017 14:43

September 23, 2017

Peter Saint-Andre


Having done a lot of hiring and recruiting lately, I've been struck by the deep asymmetries of information and power involved in the process of building a team. Because the organization has the money, it can compel the applicant (supplicant?) to complete intelligence tests and personality assessments, ask lots of questions about background and knowledge and experience, require completion of a sample work task or delivery of a short-term project, perform background checks, call character references, and just about whatever else the hiring manager or HR department can dream up. Yet how much information does the applicant get to truly learn about the organization or, especially, the hiring manager? Consider that, supposedly, 50% of voluntary terminations occur because the employee does not like or agree with or get along with the employee's manager - yet the fundamental asymmetry of the hiring process means that the employee is mostly in the dark about potential problems in this key aspect of the employment relationship....

September 23, 2017 00:00

September 22, 2017


Server-to-Server Stream Management Support

Last week we presented the first ejabberd project that participated in this year’s Google Summer of Code (GSoC) through the BEAM Community. Now let’s look at the second one.

This project aimed at implementing XEP-0198 for “Server-to-Server Stream Management Support” in ejabberd. It is developed by Anna Muharram, with Holger Weiß as the mentor. Reliability is essential for communication using XMPP. This extension allows to request stanza acknowledgement and quickly resume session. Any messages that were not delivered over previous connection will be retransmitted during session resumption without duplication.

Anna’s pull request is available on GitHub. It was a good experience for me, she says, and at the moment there are some issues that should be solved for the full functionality of server-to-server part of XEP-0198. I want to solve these problems.

The code will require some additional work before it can be merged, Holger acknowledges, but I’d say it’s a success. I’m interested in this feature and I want to see it completed.

Anna hopes this project will be useful for the community, and plans to be involved with it more. It’s not her first time with ejabberd and GSoC. Last year, she implemented “Privileged Entity Support to Write Powerful External Components” for ejabberd.

ejabberd is the first open source project I have been involved with. Furthermore, it is my first real world Erlang project. Both these projects are important to me.

ProcessOne is happy to support the Erlang & ejabberd development community. We are glad to see developers take on difficult issues, gain experience and solve problems for the benefit of all ejabberd supporters. We hope the next GSoC edition will bring even more ejabberd-related implementations.

by Marek Foss at September 22, 2017 12:28

Fanout Blog

Taking user experiences to the next level (with realtime)

Realtime is increasingly becoming table stakes for messaging, collaboration, or event apps. But this doesn’t mean there isn’t room for improvement – and there are all sorts of engaging ways to add realtime to apps that don’t have it yet. We’ll dive into some examples and best practices.


by daniel at September 22, 2017 01:40

September 15, 2017


Let’s encrypt ejabberd

Back in May we announced that 2 ejabberd projects will participate in this year’s Google Summer of Code (GSoC) through the BEAM Community. The summer has ended and now it’s time to see the results!

Today we will look at the first ejabberd project, aimed at implementing ejabberd support for “Let’s Encrypt” ACME protocol. It is developed by Konstantinos Kallas, with ProcessOne’s Evgeny Khramtsov as the mentor. In the days when encryption should be widespread, it certainly would be convenient to be able to create certificates for ejabberd quickly, easily and for free.

The outcome of this project was quite successful. The pull request in question is available on GitHub. “We will merge it for sure (modified or not), because we’re interested in having this feature” Evgeny says. For Konstantinos, it was his first GSoC. “I would sure like to participate again next summer” he says. “The ability to discuss with an experienced developer and ask them questions about issues is the most interesting and beneficial part of it. It is also very pleasing to see that your work is integrated in a real life open source project.”

Konstantinos was also keen on continuing his participation in open source projects and being active in the community. This sentiment is exactly what GSoC is all about.

“The whole GSoC experience was fascinating. I never had the chance to work on such a big and interesting project collaborating with experienced people. The development went pretty smoothly after the initial period that I had to absorb a lot of new information. My mentor, Evgeny Khramtsov, helped me a lot especially with all the technical issues that appeared throughout the process.”

When I asked Evgeny, he was happy with the experience as well, saying “This is my first GSoC project. The student asked the questions, I answered them :)”

Here at ProcessOne we believe open source software and open development communities benefit everyone. We will continue to support BEAM Community and Google Summer of Code, and keep ejabberd community strong.

by Marek Foss at September 15, 2017 07:33

September 12, 2017


Real-time Enterprise Issue #3

Here are the articles concerning business aspects of real-time enterprise we found interesting in Issue #3. To receive this newsletter straight in your inbox on the day it’s published, subscribe here.

Automating really big ideas

We have many problems, few apparent solutions, and could use some novel ideas about what to do next. Among inventors, the flash of genius comes not from nowhere, but usually by analogy — one thing is so, so why not another?

What football site Goal has learned from its Messenger bot

U.K. football site Goal is convinced of bots ability to build brand awareness, spending the last six months refining its bot strategy.

The enterprise need for speed: real-time meets its mandate

Economics 101 teaches us the concept of perfect information, that is, that the markets function best when everyone has access to the same information. In this scenario, no party has an unfair competitive advantage.

Building the digital enterprise

As digitisation matures, organisations are increasingly finding themselves part of a digital ecosystem — which encompasses business partners, competitors, customers, regulators and other stakeholders that exchange information and engage digitally.

Welcome to wireless collaboration

Have you noticed that across the enterprise – from Ethernet to headsets – we’re ditching cables? The ‘wireless office’ is a little like the ‘paperless’ equivalent, something that we aspire to and can continuously work towards.

The business case for customer service chatbots

Chatbots can provide real value to companies when properly conceived and have a tremendous amount of potential to support a business’ customer service efforts.

by Marek Foss at September 12, 2017 16:07

September 11, 2017


Real-time Stack Issue #3

Here are the technology articles we found interesting in Issue #3. You can receive this content in your inbox on the day it’s published by subscribing here.

The challenges of easy XMPP

Over the last years, the XMPP community has had a hard time competing with other Instant Messaging implementations, especially in the mobile / smartphone ecosystems. By focusing a small part of our resources on user experience (UX), we can gain significant improvements.

Introducing (n+1)sec – a protocol for distributed multiparty chat encryption presents “(n+1)sec”, a free (libre), end-to-end secure, synchronous protocol for group chat developed with support from the Open Technology Fund.

diaspora* version released

August 27th marks five years since diaspora*, the open, privacy-oriented social network, was placed into the hands of its community by its founders. One year ago the community released diaspora* version 0.

Power of in-house chat

One of the key things to the success of a service professional marketplace like Urbanclap is the seamless communication between customers and professionals. One of these channels is via in app chat.

Disney uses Big Data, IoT and Machine Learning to boost customer experience

In 2013, after years of development and testing, Disney World launched its MyMagicPlus program. Now, every guest to Disney World gets a MagicBand, a wristband that is equipped with RFID technology and a long-range radio.

Smart factories will deliver $500B in value by 2022

These and many other insights are from Capgemini’s latest market analysis, “Smart Factories: How can manufacturers realize the potential of digital industrial revolution.” A PDF of the report is available here (32 pp., free, no opt-in).

Enterprises are leading the Internet of Things innovation

The number of connected devices on the Internet will exceed 50 billion by 2020, this according to Cisco. By 2022, 1 trillion networked sensors will be embedded in the world around us, with up to 45 trillion in 20 years.

by Marek Foss at September 11, 2017 11:32

Real-time Enterprise Issue #2

Here are the articles concerning business aspects of real-time enterprise we found interesting in Issue #2. To receive this newsletter straight in your inbox on the day it’s published, subscribe here.

Why Amazon is eating the world

Consensus is that we’ve hit a tipping point and the retail industry is finally seeing some major collateral damage from Amazon’s monster growth — and mainstream/non-tech news has started giving this a lot of coverage.

Can we chat? Instant messaging apps invade the workplace

New communications tools are on the rise, including instant messaging applications. 43% of respondents said they used these tools at work. Not surprisingly, instant messaging is widely popular in the tech industry, where 71% percent of employees rely on the application.

AI and chatbots are transforming the customer experience

Artificial Intelligence is dramatically changing business, and chatbots, fueled by AI, are becoming a viable customer service channel. The best ones deliver a customer experience in which customers cannot tell if they are communicating with a human or a computer.

UK ‘wastes billions every year’ on failed agile projects

The company questioned 300 CIOs about how they’re using agile project management methodologies and their successes and failures.

How to determine when and why to use microservices

The wave of hype and excitement about microservices continues unabated. Understanding exactly why and how your organisation will benefit from a microservice architecture is an important first step to adoption and shouldn’t be left as an afterthought.

Why open source projects favor new users, and what you can do about it

Every now and then, all developer products (SDKs, frameworks, APIs) will have to choose between favoring their existing ones or new ones. Make the initial app “just work” for beginners with some default magic? You hurt the debuggability of large apps.

by Marek Foss at September 11, 2017 11:29

Real-time Enterprise Issue #1

Here are the articles concerning business aspects of real-time enterprise we found interesting in Issue #1. To receive this newsletter straight in your inbox on the day it’s published, subscribe here.

Welcome to the era of conversation!

The Social Client offers a white paper on Messaging aimed to provide the keys to a connected customer experience. More than 50% of French consumers are now mobile first. Every day, there are 26 million people connecting to the internet via their smartphone.

The good, the bad, and the ugly of chatbots

It’s amazing how rapidly the world of technology can turn commerce and customer service on its ear. Transformational tech is completely revolutionizing the online sales experience.

Four ways startups can harness innovation and disruption

We live in a time when doctors no longer have to rely on costly and unwieldy medical imaging devices to diagnose illnesses. A simple “visual stethoscope” would help them see deep into the human body more easily than ever, thereby accelerating both diagnosis and therapy.

So you want to go digital? How to avoid the next legacy IT platform debacle

Most companies realise their IT systems are overly complex, having been added to multiple times over the years without much effective pruning. The most common response is to simplify systems using new technologies like the public cloud and SaaS platforms, which help to gain speed and lower costs. But those are temporary fixes. Complexity inexorably creeps back over time, due to the fundamental nature of people and organisations.

Instant messaging apps invade the workplace

With the internet, we have more ways to communicate than ever. Email, instant messaging, and smartphones completely changed how we interact with family and friends. Increasingly, they’re also changing how we connect with colleagues at work.

Instant messaging in on-site and online classes in higher education

In the past, instant messaging (IM) was considered “a teen thing” rather than a serious tool for education. As teenagers who rely on IM as a communication tool arrive on college campuses, however, IM usage will become more prevalent in higher education.

The business case for customer service chatbots

By embracing messaging channels, companies will immediately benefit from an “eternal conversation thread” with their customers.

by Marek Foss at September 11, 2017 11:20

Real-time Stack Issue #1

At the end of June, ProcessOne introduced a new series of its newsletters: Real-time Stack, focused on all real-time technologies and Real-time Enterprise focused on business aspects of using real-time infrastructure. You can subscribe to these newsletters here. Here are the technology articles we found interesting in Issue #1:

MQTT: The Nerve System of IoT

There are billions of smart devices in our world today, but what if these devices were interconnected? What if these devices can interact with each other just like how their owners do and form a kind of global nervous system? This essentially describes what people call the Internet of Things or IoT.

Practical IoT Cryptography on the Espressif ESP8266

We’re often critical of the lack of security in the IoT sector, and frequently cover botnets and other attacks, but will we hold our projects to the same standards we demand? Will we stop at identifying the problem, or can we be part of the solution?

Kivy and XMPP

Kivy is an open source Python library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps. In this presentation, we learn how to create an example XMPP client using Kivy environment.

Device-friendly XMPP Client

Kaidan is a simple, user-friendly Jabber/XMPP client providing a modern user-interface using Kirigami and QtQuick. The back-end of Kaidan is completely written in C++ using the Swiften Library of the Swift Instant Messenger and Qt5.

Naturalizing IOT Through Standardization

Internet of Things is one of fast growing technology in the recent years. It’s expected that the growth of connected things will be around 50 billion by 2020.

Delivering Billions of Messages Exactly Once

Read about a new de-duplication system to get as close as possible to exactly-once delivery, in the face of a wide variety of failure modes. This system is able to track 100x the number of messages of the old system, with increased reliability, at a fraction of the cost.

Want to know more about ProcessOne Real-time Newsletters? Read the announcement.

by Marek Foss at September 11, 2017 11:17

September 06, 2017

Fanout Blog

Realtime processing and edge computing: the end of the cloud?

At Fanout we’re always interested in trends involving moving and processing data in realtime. A major shift is coming, driven by the rise of connected devices and the vast amount of data they are going to collect. According to a Gartner report, 8.4 billion connected “things” will be in use in 2017, representing a 31% increase from 2016 – and every one of these IoT devices is going to need to collect, process, and transmit data in order to be effective.


by daniel at September 06, 2017 17:30

August 29, 2017

Tigase Blog

Tigase XMPP Server v7.1.1 Released!

Tigase XMPP Server v7.1.1

has been released! Please review the change notes below to see what has changed since our last release.

by Daniel at August 29, 2017 22:24

Tarun Gupta (GSoC 2017)


Hello all,

This was indeed an exciting summer. During this summer, I initially implemented the elements along with their parsers and serializers, required to implement the MIX features. Then I implemented a MIX Registry to keep track of channels joined by a client, and sync the same information with their rosters. This Registry is responsible for returning an object of the joined channel, which can be used for various features like setting nick for the channel, sending messages, etc. Finally. I implemented basic functionalities for MIX in Swiften, along with a MIX Example client and MIX Mock Server to respond to clients. Let me explain the features I have added as part of GSoC'17 along with examples:

1.) Client querying MIX service for hosted channels: This allows my client to query server for hosted channels.

2.) Client querying for publish-subscribe nodes supported by MIX channel: This allows my client to query server for supported standard nodes for a MIX channel.

3. Client joining a channel hosted on MIX domain: Client then published its already joined channels and sends a request to channel service to join.
./Swiften/Examples/MIXListAndJoin/MIXListAndJoin mixtest2
Request list of channels.
List of rooms at
1. coven -

Request supported nodes for MIX channel:
Nodes supported by channel
1. urn:xmpp:mix:nodes:participants
2. urn:xmpp:mix:nodes:messages
3. urn:xmpp:mix:nodes:presence
4. urn:xmpp:mix:nodes:jidmap

Already Joined channels:
No channels already joined.

Successfully joined channel
[warning] Swiften/MIX/MIXRegistry.cpp:40 joinChannel: Channel already joined:
In the example above, user with JID initially connects to server and request list of channels, followed by supported nodes for MIX channel.
  • urn:xmpp:mix:nodes:participants: holds information about all participants of the channel along with their nick.
  • urn:xmpp:mix:nodes:messages: holds all messages sent to the channel.
  • urn:xmpp:mix:nodes:presence: holds presence status for all clients of the channel.
  • urn:xmpp:mix:nodes:jidmap: holds mapping information from client's real JID to proxy JID.
The warning in above example indicates a use case where user tries to join an already joined channel.

4.) Join Sync: This is an interesting and much required feature, which allows different clients of the same user to sync already joined channels and other information.
./Swiften/Examples/MIXListAndJoin/MIXListAndJoin mixtest2
Request list of channels.
List of rooms at
1. coven -

Request supported nodes for MIX channel:
Nodes supported by channel
1. urn:xmpp:mix:nodes:participants
2. urn:xmpp:mix:nodes:messages
3. urn:xmpp:mix:nodes:presence
4. urn:xmpp:mix:nodes:jidmap

Already Joined channels:
1. coven -

[warning] Swiften/MIX/MIXRegistry.cpp:40 joinChannel: Channel already joined:
In the example above, same user tries to connect to server with JID initially connects to server and client successfully indicates already joined channels and yet another warning when user tries to join an already joined channel.

5.) Retrieve Participants of Joined channel: This allows a client to retrieve the list of participants of the joined channel. This however, only returns proxy JIDs of the participants along with their nicks, if set by user.

6.) Real JID lookup of participants: This allows a client to lookup participants proxy JID in the channel and retrieve its real JID. Right now, the present client only offers join as a simple join with subscriptions, however for join with preferences, if user have jid-hidden preference for its JID Visibility, then this will still return participants proxy JID.

7.) Sending/Receiving Messages: The client can now send messages to the channel, which will be forwarded to all online clients and a replicated message will be sent to sender with same submission ID as the ID of message sent.

Client I
./Swiften/Examples/MIXListAndJoin/MIXListAndJoin mixtest2
Request list of channels.
List of rooms at
1. coven -

Request supported nodes for MIX channel:
Nodes supported by channel
1. urn:xmpp:mix:nodes:participants
2. urn:xmpp:mix:nodes:messages
3. urn:xmpp:mix:nodes:presence
4. urn:xmpp:mix:nodes:jidmap

Already Joined channels:
No channels already joined.

Successfully joined channel
[warning] Swiften/MIX/MIXRegistry.cpp:40 joinChannel: Channel already joined:

Participants of channel

Lookup of participant in channel
1. -

[ ] : Hello, I am here! some
Client II
./Swiften/Examples/MIXListAndJoin/MIXListAndJoin mixtest
Request list of channels.
List of rooms at
1. coven -

Request supported nodes for MIX channel:
Nodes supported by channel
1. urn:xmpp:mix:nodes:participants
2. urn:xmpp:mix:nodes:messages
3. urn:xmpp:mix:nodes:presence
4. urn:xmpp:mix:nodes:jidmap

Already Joined channels:
No channels already joined.

Successfully joined channel
[warning] Swiften/MIX/MIXRegistry.cpp:40 joinChannel: Channel already joined:

Participants of channel

Lookup of participant in channel
1. -
2. -
Above two examples shows client I joining, retrieving participant list (only himself for now), and lookup of real JIDs of participants. Then client II connects, repeats the same procedure as client I, and sends a message Hello, I am here! some to channel, which is forwarded to client I. Client II simply ignores the replicated message, however it can still be useful to correlate the message with the submitted message.

8.) Setting Nick for joined channel: The client can set its nick for joined channels. If there is a nick conflict, an error payload will be returned with ErrorPayload:Condition:Conflict.

9.) Presence updates: With this client can now receive presence of all participants of the channel, as well as updated its  own presence. Client can go offline, and indicate its unavailability to other clients and similarly come online again. When a client joins a new channel or comes online after being online, channel presence of all participants is pushed to the client. 

Client I
./Swiften/Examples/MIXListAndJoin/MIXListAndJoin mixtest
Request list of channels.
List of rooms at
1. coven -

Request supported nodes for MIX channel:
Nodes supported by channel
1. urn:xmpp:mix:nodes:participants
2. urn:xmpp:mix:nodes:messages
3. urn:xmpp:mix:nodes:presence
4. urn:xmpp:mix:nodes:jidmap

Already Joined channels:
No channels already joined.

Successfully joined channel
[warning] Swiften/MIX/MIXRegistry.cpp:38 joinChannel: Channel already joined:

Nick Assigned: some

Participants of channel
1. Nick: [some]

Lookup of participant in channel
1. -

Client is now online

[ ] : is available
[ ] : Hello, I am here! yetanother
[ ] : is now unavailable
[ ] : is available
[ ] : Hello, I am here! another

Client II
./Swiften/Examples/MIXListAndJoin/MIXListAndJoin mixtest
Request list of channels.
List of rooms at
1. coven -

Request supported nodes for MIX channel:
Nodes supported by channel
1. urn:xmpp:mix:nodes:participants
2. urn:xmpp:mix:nodes:messages
3. urn:xmpp:mix:nodes:presence
4. urn:xmpp:mix:nodes:jidmap

Already Joined channels:
No channels already joined.

Successfully joined channel
[warning] Swiften/MIX/MIXRegistry.cpp:38 joinChannel: Channel already joined:

[ ] : is available
Nick Assigned: yetanother

Participants of channel
1. Nick: [yetanother]
2. Nick: [some]

Lookup of participant in channel
1. -
2. -

Client is now online

[ ] : is now unavailable
[ ] : is available
[ ] : Hello, I am here! another
Client III
./Swiften/Examples/MIXListAndJoin/MIXListAndJoin mixtest
Request list of channels.
List of rooms at
1. coven -

Request supported nodes for MIX channel:
Nodes supported by channel
1. urn:xmpp:mix:nodes:participants
2. urn:xmpp:mix:nodes:messages
3. urn:xmpp:mix:nodes:presence
4. urn:xmpp:mix:nodes:jidmap

Already Joined channels:
No channels already joined.

Successfully joined channel
[warning] Swiften/MIX/MIXRegistry.cpp:38 joinChannel: Channel already joined:

[ ] : is available
[ ] : is available
Nick Assigned: another

Participants of channel
1. Nick: [another]
2. Nick: [yetanother]
3. Nick: [some]

Lookup of participant in channel
1. -
2. -
3. -

Client is going offline

Client is now online

[ ] : is available
[ ] : is available
In above examples, client I joins first, sets its nick and indicates itself to be online. Then it just wait for message/presence updates from other clients. Then client II joins, receive presence status of client I on successful join, and sends a message which is received by client I (only other online client). Then client III joins, sets its nick, receive presence status of client I and client II on successful join, and then goes offline. As it goes offline, client I and II now receive presence updates indicating that client III is now unavailable. Then client III comes online again after 3 seconds and receive full presence updates from channel. Finally, it sends a message to channel, which will be received by client I and II. When clients go offline, neither they will receive any message nor any presence updates.


I would also like to include what challenges and progress struggles I faced while working on this project:

  • Firstly, the major challenge I faced was unavailability of a working MIX server. If a working MIX server was available, checking my client implementation could have been a lot easier. This forced me to write a mock server using limber framework, which could mock the responses of an actual server. This wasn't originally planned as per the proposal, but was an immediate requirement.
  • Secondly, having worked on implementing MIX features till last week of July, we had a major design change for our MIX implementation in first week of August. Initially the MIXImpl was handling all channel requests, however as per advice from mentors, I created a MIX Registry class which took care of joining / leaving channels and provide instances of MIXImpl for the joined channel. So in essence, the MIXImpl class will now only handle methods for one joined channel. This is indeed a very efficient design, and also allows syncing of roster across different clients of same  user.
  • This roadblock was rather a personal one, and required me to work on my masters thesis to be submitted in first week of August and its presentation in upcoming weeks. This costed me around 1.5 weeks of my time. However, after chatting with mentor, I worked double during my last week and submitted pull requests for all the use cases. I know that working during last week might not have been sufficient to compensate.
In the end, I was at able to submit my pull requests demonstrating the testing of use cases via mock server and client. I could've achieved more by working full time during the lost weeks and maybe PR's would have been merged by now.

I would like to thank my mentors Edwin, Tobias and Kevin for successfully guiding me through this project. I would like to continue working on this project after GSoC as a lot of new features could be added and also integration of MIX in Swift.

That's all for now :)

by Tarun Gupta ( at August 29, 2017 11:48

August 25, 2017

Paweł Alameyo Ścibiorski (GSoC 2017)

#15 The End of the GSoC



This week I changed a bit way of using blacklist KeyStore. Earlier when certificate was revoked I was moving it from original KeyStore to the blacklist KeyStore. Later in the certificate table content of the both KeyStores was displayed. Now I only add copy of the revoked certificate to the blacklist and later when I want to display content of each other KeyStores I compare it's certificates with blacklist. If certificate match one of the blacklisted I add to it’s GUI model status: „revoked”. What I achieve by that? It simplifies a bit managing certificates. I had to move certificates beetween TrustStore, ExceptionsStore and BlacklistStore, now it is done only between first two KeyStores. What else? Spark now make use of JRE default cacerts KeyStore. That should give users some widely trusted certificates at the beginning. Access to this KeyStore is made in way that content of this KeyStore isn’t ever deleted. When user will remove such certificate via my GUI it will be added to the list of distusted „non displayed and not used” certificates.


It’s the last week of the Google Summer of Code so it is also time to sum up my work. From technical point of view I have done it pretty well here so there is no reason to repeat myself. Though it is last week of the Google Summer of Code I have still some work to do fixing some smaller bugs. But generally I think the project ended up well.


From non technical point of view it was fun. Sometimes a bit tiring and frustrating but that’s happen when something doesn’t work as you wish and you are hopelessly trying to fix that. The thing I like is feeling after succeeding when you just want to run few times around your chair from happiness that something finally work. Both situations were occurring during this summer. Definitely GSoC was great opportunity to improve my coding abilities and extend my knowledge about XMPP and Public Key Infrastructure. I have meet many other contributors which is also great experience. To anyone hesitating to join to the Google Summer of Code I can say it is worthy.


Also thanks for my mentor Guus because it was really teamwork and I could learn a lot from him. And thanks for other community members who were supportive like wroot, speedy, dwd, akrherz, Flow and Kevish.





*Or not really farewell as I still plan to contribute.

by Paweł Alameyo Ścibiorski (GSoC 2017) ( at August 25, 2017 20:19

Paul Schaub

Final GSoC Blog Post – Results

This is my final GSoC update post. My name is Paul Schaub and I participated in the Google Summer of Code for the XMPP Standards Foundation. My project was about implementing encrypted Jingle File Transfer for the client library Smack.

Google Summer of Code was a great experience! This is a sentence you probably read in almost every single students GSoC resumé. Let’s take a look at how I experienced GSoC.

GSoC for me was…

  • tiring. Writing tests is something almost everybody hates. I do especially. In the beginning I imposed on myself to do test-driven development, but I quickly began to focus on real coding instead. Nevertheless, often I sat down for hours and wrote tests for classes and methods that were designed to allow easy tests, so I have an okayish test coverage, but it is far from perfect.
  • nerve-wracking. Dealing with bugs of sub-protocols I never worked with before drove me crazy sometimes. Especially that SOCKS5 Transport bug has a special place on my hit list. All in all I think the Jingle protocol has some flaws which make it harder to implement than it should be and those flaws (more precise – the decisions I derived from the Jingle XEP design) often really bugged me.
  • highly demotivational. Can you imagine how devastating it can be, when you spend days and days getting your implementation working with itself, only to see it miserably fail when you test it the first time with another implementation? It didn’t help that I tested my coded not only against one, but two other applications.
  • desocializing. I had to dedicate a huge part of my day to coding. As a result I often had no time left for friends and family.
  • devastating. In the end I wrote far more code than I should have. Most of it was discarded along the way and got replaced. It really annoyed me having to start from zero over and over again. Also giving up on goals like using NIO for asynchronous event handling pricked my pride.
  • to the highest degree depressing. Especially near the end I sometimes sat down and starred at my screen for some time without really knowing what to do. Those days I ended up making small meaningless changes like fixing typos in my documentation or refactoring. Going to bed later on those days made me feel bad and kinda guilty.

But on the other hand, GSoC also…

  • taught me, that coding is not only fun. Annoying parts like tests are (sometimes) important and in the end it is very satisfying to see that I managed to tame my code to a degree where all test cases run successful.
  • gave me deep insights into areas and protocols that were completely new to me. Also I think you can only fully gain understanding of how things work if you tinker with it for more than just one day. Finding and fixing bugs are a good exercise for this purpose.
  • was super motivational. Contrary (or let’s say additional) to what I wrote above, it is highly motivational to see your code finally work hand in hand with other implementations. That’s the magic of decentralized protocols – knowing that on the other end is a completely different device, running a completely different operating system with a language you might have never seen before, but still in some magical way, both implementations harmonize with each other like two musicians from different countries do when playing together.
  • was very social by itself. Meeting online with members of the community was a real pleasure and I hope to be able to participate in conversations and meetings in the future too. Also there were one or two (or three…) evenings that I spent gaming with my friends, but *shht* don’t tell anyone ;P.
  • taught me important lessons. While I usually aim too high with my goals, I learned that sometimes you have to take a step back to set more reasonable goals. Nevertheless ambitious goals can’t hurt and I heard that you grow together with your challenges.
  • was satisfying as f***. Sure, sometimes I was feeling bad because I could have done more on that day, but in the end I was a little surprised seeing the whole picture and how much I really accomplished.

The Result

An overview about what I achieved during the Google Summer of Code can be found on my project page.

This week I did some more changes to my code and wrote more tests *gah*. I’m really proud that my JET proposal found it’s way into the XSFs inbox. I’m really excited, what the future may bring for my specification :)

I want to take the chance to thank everyone in the XMPP community for welcoming me and allowing me to become a part of it. I also want to thank Florian Schmaus for mentoring me and giving me the idea to participate in GSoC in the first place.

As a last impulse -  why do we need Google (thank you too btw :D ) to initiate programs like GSoC? Shouldn’t there be more public, government financiered programs? I certainly think so, even though Google did a very good job.

So in the end GSoC was really a great experience. Sometimes it was hard and challenging, but I’m sure it would have been boring without a certain degree of difficulty. I’d absolutely do it again (either as a student or maybe a mentor?) and I can only encourage students interested in free software to apply next year :)

Happy Hacking!

by vanitasvitae at August 25, 2017 11:21