Skip to content
This repository was archived by the owner on Feb 5, 2020. It is now read-only.

Project: MongooseIM

Michal Slaski edited this page Feb 6, 2019 · 10 revisions

MongooseIM is a robust and efficient chat (or instant messaging) platform aimed at large installations.

If you have any questions or want to suggest your own idea, send an e-mail to beam-community AT googlegroups DOT com.

Idea #1: MongooseIM Webhook

Through its event based architecture MongooseIM allows (third-party) modules to interface with various kinds of internal behaviours and processing of stanzas. By exposing those events to configurable REST APIs, MIM flexibility could be made accessible to web based services as well and thus encourage wide spread adoption of XMPP integrated services within the web community.

Expected result: a module that

  • lets external web based services register at internal hooks,
  • routes and exposes the internal API of those calls respectively to those registered URLs.

Knowledge prerequisites: Erlang or any other functional language, REST/HTTP

Possible Mentors: Piotr Nosek, Michal Piotrowski

Idea #2: Personal Eventing Protocol (PEP)

XEP-0163 defines a protocol to broadcast state change events associated with an account. It enables an XMPP user account to function as a virtual publish-subscribe service, easing handling notifications associated with such an account.

MongooseIM server implements XEP-0163, so-called PEP, in the mod_pubsub module. Current implementation is suboptimal, mainly because it runs on general purpose pubsub code. A specialised implementation of a subset of the pubsub functionality required by PEP can be more efficient in terms of consumed resources and end user experience.

The student is expected to:

  1. prepare a load test scenario and run it against the current PEP implementation
  2. implement PEP
  3. compare the new implementation with the old one using the load test scenario prepared

Expected results:

  • new pubsub modules implementing XEP-0163 PEP
  • a report comparing load tests of the old and new implementations

Knowledge prerequisites: Intermediate Erlang

Possible Mentors: Piotr Nosek, Michal Piotrowski