Coming in iOS 3.8 is in app password change and registration. Password changing works but needs some better UI feedback.
this week has seen a bit of work on the website (mostly porting pages from the older one), and again the time to work on the project was short.
When your work on your free time, any moment you take for yourself (a week-end outside, reading a book/newspaper, watching a movie, having a drink, doing sport, etc.), or for the "things which must be done" (cleaning house, administrative things, fixing stuffs, etc.), or simply when you are sick, is time lost for the project, and it goes quickly. I'm living in such spirit for more than 10 years, feeling remorse for everything taking time, and it's not healthy or even sane, not for your nor your loved ones. And even in your project itself, there are a lot of stuff you have do to around it (server administration, website, documentation, communication – like progress notes –, keeping up to date with technologies, etc.) which are not directly improving the software.
I'm explaining this for you, the reader, to understand why it takes so long to develop a project, and why it can get on nerves. You can see now with the progress notes, that the release is nearly ready but still I've had little time to fix issues, and I wont be able to have everything perfectly oiled for this release.
Last week I've mentioned Pubsub, so let's move to this topic.
I won't elaborate on Pubsub itself, just for short Publish/Subscribe is a way to store/get data and to be notified when there are changes. You can see my talk at last FOSDEM (mp4 version) for some use cases. It is notably used in XMPP for blogging, i.e. for the "social network" part of it, and in SàT for events, tickets, merge requests, forums, etc.
During implementation of blogging features in SàT, years ago, the Pubsub implementations in XMPP servers were uneven, and mostly incomplete (because it was not needed for chat which most of the clients were focusing on). There was two options to work around that: choose a server with a working implementation, focus on it and recommend it, that's what have done Jappix and Movim with Metronome, or create a server agnostic component. We have chosen the latter with SàT, and have created "SàT Pubsub", a server independent implementation of PEP/Pubsub, which aims to be the most complete possible.
I've had to write and propose 2 XEPs (XEP-0355 and XEP-0356) to make this possible, but I'll pass the details to avoid making this post too long. Also, this would have hardly be possible without the work of Ralph Meijer which made the base Pubsub implementation in its library Wokkel that we use in top of Twisted, and Idavoll that SàT Pubsub derivate from.
So we now have an independent Pubsub implementation where we can implement everything we need without having to wait for every server to follow some new XEP. And even today when XMPP servers implementations have improved a lot, SàT Pubsub has some unique features, can follow novelties quickly, and is a good place for experimentation. I don't think all server implementations can be on a par with that, at least in the close future.
With that background explained, I'll now explain what I've worked on this week. In standard Pubsub (XEP-0060) when you have the suitable right, you can publish an item (a blog post for instance) with an existing id, this will create a new item and delete the one which was existing previously. But if we have a node where many people can publish, like a blog comment node, that means that anybody can replace the comment of anybody. So if Louise has written something, Pierre can replace the comment, not great.
In some pubsub implementations, which is the case for SàT Pubsub, you can't overwrite an item if you are not the publisher of this item, except if you are admin or owner of the node. That's better regarding blog comments, but there is still an issue: if Louise is owner of a node, and overwrite an item of Pierre, to modify something, she become the new publisher of the item, and Pierre can't modify it anymore. This is notably a problem with tickets: if Pierre report a bug, and Louise changes its status (e.g. because she starts working on the ticket), she becomes the new publisher, and Pierre can't edit it anymore).
To work around that, I've added a new node option which can be activated in configuration, "consistent publisher", which will keep the original publisher even if the item is overwritten (updated) if the entity overwriting the item is owner or admin. I've also prepared an option in database to restrict the maximum number of items in a node, but it's not implemented yet. I can now safely change status of reported issues for SàT without loosing initial publishers.
This week the post was longer than usual, I'll try to keep it shorter next time. As usual, feedbacks are welcome.
The near final 3.7 beta should be going out to testers right now. This is what will change in the next release.
If you have talked to me on XMPP you will notice that I often switch accounts. I keep four active accounts, two accounts on two different server platforms each that I test with the most (Prosody and ejabberd). I am a big fan of dogfooding, as in using my own product to see where the pain points are for users. This is often what spurs me to go in and fix something seemingly random. It annoys me.
I originally stated the end goal of this app was to be a replacement for expensive SMS plans. That was a decade ago, I now want to have a respectable open source alternative to WhatsApp and Facebook Messenger. This current iteration of Monal will be “done” when someone can just tell their family and friends to contact them on Monal. You shouldn’t have to explain much else. If you do then there is something to fix. This often requires me to find a balance on default settings that preserve privacy but cause the least amount of friction for users. I know from experience (and a decade of metrics I’ve collected) that every additional screen in setup causes a a large drop off in users. Every additional exposure to the of the inner workings of XMPP (e.g. the roster, online/offline e.g.) causes people say this isn’t user friendly and drop off. If you are wondering what the product direction for Monal on iOS is, it is a balance between secure and private and simple. This may be infuriating at times to other people who are techies but bear with me, if we can get more people to use XMPP, it is better for everyone.
There are about 25,000 devices using the Monal push sever at the moment. The good news is there have been very few errors on the server and my AWS instances have been able to handle this traffic without problems. This also provides me with a lot of data points for the effectiveness of push. For most people it near 100% reliable. I am trying to nail down some issues with notifications. I think I have found issues on both prosody and ejabberd’s push modules and will file bugs to work with the developers. They are two different issues, prosody servers seem to send hundreds of extra pushes and will drain your battery (this is especially true if you have group chats, which is how I found this). The battery drain at times is pretty terrible. On an iPhone X it was using 20% of my battery at least and was running for 14 hrs in the background. Ejabberd in comparison uses maybe 1% battery in a day with a few min in the background. Interestingly the bug I have found in ejabberd is the opposite, occasionally, for example at night, when there is a prolonged period of inactivity, some pushes do not arrive and there isn’t a notification for the message.
If you want to help me test things out, feel free to send messages to any of these addresses:
My Prosody test accounts:
My Ejabberd test accounts:
ProcessOne curates two monthly newsletters – tech-focused Real-time Stack and business-focused Real-time Enterprise. Here are the articles concerning business aspects of real-time development we found interesting in Issue #21. To receive this newsletter straight in your inbox on the day it’s published, subscribe here.
The Web was born 30 years ago. We all know that it has changed the world, even more deeply than smartphones. However, while it is time to celebrate it is also a good time to think about its future and how we can protect its core values.
There is no end in sight to the growing amounts of data in today’s digital world. By 2020, analysts project there will be 6 billion smartphones and 50 billion telematics devices as an ever-increasing number of people access the internet and devices go online to communicate in a connected world.
Through this development, Scotiabank becomes the first Canadian bank to offer this self-service tracking tool. The functionality leverages SWIFT’s Global Payments Initiative. This enables Scotiabank business customers to track their wire payments in real-time.
The company helps customer support teams analyze and improve performance in real time. With the new API-powered platform, customer service representatives receive immediate feedback from customers through a digestible, social media-like user interface.
That’s the findings of Vodafone’s latest IoT Barometer study. As the global leader of Internet of Things infrastructure with nearly 81 million connections, Vodafone surveyed 1,758 businesses across the globe.
Now that consumers are more excited about IoT, the focus is switching gears toward business applications for IoT. And, while there are applications for industrial and commercial use, small business owners may be wondering if this is the time to invest in IoT.
Amazon, Google and Microsoft see old industrial giants as a new source of income. Energy companies are keen to produce oil and gas more efficiently, as they grapple with volatile prices and uncertain long-term demand. Digital investments promise to cut costs and boost output.
As I’ve mentioned in the past, a focus of Monal development going forward is going to be improving the UI/UX. I have been thoroughly modernizing many components of the app that have been largely untouched for years. Notifications and image handling is one of them. This is how I added the aesgcm: encrypted link support as well as grouped notifications. Building on that, I have updated notifications to show a preview of the image (which is transparently decrypted in the background) as well as showing the senders name instead of the JID.
The Debian XMPP Team, the people who package Dino, Gajim, Mcabber, Movim, Profanity, Prosody, Psi+, Salut à Toi, Taningia, and a couple of other packages related to XMPP a.k.a. Jabber for Debian, have this blog now. We will try to post interesting stuff here — when it's ready!
Little progress during this week, I've had a busy week-end far from computer (and it's a relief from time to time to be freed from screen).
I'm working mainly on the new website, so I'll explain a bit why doing a new website.
When you have a project, the website is the place people go to know what it is, and SàT is a quite difficult project to explain because it's doing a lot of things, and people get lost easily with it. We are now using the term "communication ecosystem" to explain it, as it seems to fit well: a generic tool for most of your communication needs (chat, file sharing, blog, events, etc.).
We have done current website a while ago using Django, which is one of the most popular web framework on Python (and even outside Python). Django is a great piece of software and has a huge community, but working on the official website with it means that we have to learn, maintain and follow extra technologies. Note that I'm using "we" because we are several people at the association, but I'm currently the only active developer and any extra amount of work is hard to take.
On the other hand, 0.7 version of SàT brings a web framework, based on the ecosystem and so on XMPP. That has many advantage: notably there is nothing new to learn and follow, and it's a concrete use case which allow to test and improve the ecosystem.
Furthermore, the XMPP integration allows to integrate effortlessly things like the official blog, while in the former version we had to include a page of Libervia in a
To summarize, moving the official website on Libervia web framework make the task more easy and is an occasion to test and improve the whole ecosystem.
This is used to generate SàT documentation, using Sphinx to create HTML page from reStructuredText: when Libervia is launched with
--dev-mode, each time the doc is modified, the HTML pages are rebuilt, really handy to check quickly that the syntax gives what you're expecting.
The new official website will be simple, with only a small page of presentation of the software, the documentation, social contract, and few extra pages. Most of it is done, and now I'm porting some pages from Django (the template system is similar to Jinja2 that we use, but it still needs adaptations, and the CSS classes are not the same).
During this, I'm also fixing bugs when I see them or somebody reports them. For instance, I've fixed this week a bug with registration on https://www.libervia.org. If you test any part of the ecosystem (being it desktop or mobile with Cagou, web with Libervia, TUI with Primitivus or CLI with jp), please give feedback either on our chat room (web), or via the SàT/XMPP based ticket system at https://bugs.goffi.org.
I was going to explain some changes I need to do on SàT Pubsub but this post is already long enough, I guess I'll keep it for next week (wow, teasing!).
There are several bug fixes coming in the next release. I have been working in improving OMEMO and i think I have identified the issue preventing some people from starting new sessions. I am also fixing performance issues in the image handling introduced by the aesgcm links. After those are resolved I will add support for sending aesgcm links for attachments. In the process of looking at performance I have noticed higher then expected battery use when connected to some prosody servers. I hope to work with the server side developers to figure out whats going on there. Generally speaking it appears to me to be due to push notifications sent for more than just new messages. I am also testing with ejabberd to see if there is a problem there as well. Genreally speaking though I believe that XEP-0357 that defines how this is supposed to work is flawed and needs to be updated. It is very trusting and does not give the actual app developer the ability to regulate pushes based on the capabilities of his app. A few minor changes to the specification would let us make something that can compete with the experience of proprietary chat clients.
After months of work on the Agayon, I can present some significant improvements ! This article is a little bit longer than the previous ones but it worth the read!
During the past few weeks, the code base of the Agayon has been updated. I forked my own project, r1d2 to update it. The new repository is named r1d3. I hesitated a long time before forking it. As the hardware base of the Agayon completely changed, I preferred to change the code name to maintain coherence between hardware and software.
The update aims to provide
As I made tests with SLeekXMPP to control the bot, I observed some problems with Gajim. The Ad-Hoc extension allows one to send commands to an XMPP bot. R1D3 displays the following menus and submenus (in french):
When I try to use the "execute" button, SleekXMPP start a new session and Gajim complains that the session identifier has changed. I reported the problem to SleekXMPP and its fork SliXMPP. The XMPP community is great and Maxime Buquet responded quickly. To quote him, there are two problems (see the bug report for the whole explanations):
- Slixmpp shouldn't assume execute is the start of a command
- I don't see a place in the XEP that says that next or execute can be equivalent to complete. What to do?
He sent an email on the "Standards" mailing list and some responses followed. It seems difficult to fix the protocol at the moment without breaking compatibility. Maxime proposed a patch to fix Slixmpp and it should work on SleekXMPP. For now, I just don't use the "Execute" button as "Forward" does the job. The depreciation of the "Execute action" is actually discussed.
The Agayon has now 8 LEDs and 6 switches. They are placed on a control panel.
The LEDs aim to provide status information
The switches aim to provide
In addition, the following hardware are also mounted to provide information and input/output. I2C addresses are displayed (0Xxx)
The documentation of the SHT71 explains why the sensor has no I2C adress.
The serial interface of the SHT7x is optimized for sensor readout and effective power consumption. The sensor cannot be addressed by I2C protocol, however, the sensor can be connected to an I2C bus without interference with other devices connected to the bus. Microcontroller must switch between protocols.
I have been advised to use an epoxy base coated with a copper layer. The aim is to connect it to the negative pole of the battery. It is really useful because it decrease the wiring. The perfboards are fixed on metallics spacer bars to avoid shortcuts.
I²C is a bus communication that allows multiple device to communicate with each other.
I2C devices are recognized by the Arduino (5V) and the Raspberry PI (3.3V) with the help of a level shifter.
I've used the I2C scanner provided by the Arduino documentation.
Scanning... I2C device found at address 0x1D ! I2C device found at address 0x20 ! I2C device found at address 0x6B ! I2C device found at address 0x70 ! done
user$ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- 1d -- -- 20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- 6b -- -- -- -- 70: 70 -- -- -- -- -- -- --
During the past few months, my best friend has been my hot glue gun. I was skeptical at first but really much effective and fun. I used it to insulate some connectors. In Liège, we would say "mettre une noquette de colle" which translates to "put a knob of glue".
One of my colleague has been cleaning his lab, and he asked me if I was interested to have an old 20 MHz oscilloscope. I gladly accepted. It is a 34 years old Circuitmate 9020 (bought in 1985). I will use it for I2C debugging and visualization.
The hardware is almost done. I am happy to have a nice reliable base. I hope to be able to drive it with my smartphone soon. I will continue the programming to add the mapping functionality and a nice demo mode.
Stay tuned !
this week has been quite busy with the release of SàT 0.7.0b1. Entering the beta phase means that no more big features will be implemented (small modifications may still be done if necessary), and I'll concentrate on debugging and stability.
The UI of Cagou and Libervia are usable now, even if not perfect, but it was necessary to release to get feedback. Also Python 3 port is the first thing which will be done for next version (0.8), and some features/improvements are waiting for it.
I'm currently focusing on the new website based on Libervia web framework, and on reworking the documentation. The documentation is important to work on, as many people don't know the capabilities of SàT. Furthermore, it can be later used to generate man pages, notably for
jp (CLI frontend), and will be available on the new website.
So the plan now is to have the website online a soon as possible, then finish the work started months ago to have SàT (and mostly Cagou) available on flatpak. It would be good to have Cagou available at least on F-Droid, that's another thing to check.
Last but not least I'm planning to work on SàT Pubsub, the server independent PubSub implementation, I'm missing some features before releasing it, but I'll talk about that in a future progress note.
Salut à Toi version 0.7.0 beta 1 has been released. In other words, we are starting the beta phase, the feature are frozen (beside small adjustments) and now we will concentrate on stability, debugging and usability.
As a reminder, "Salut à Toi" is a libre, decentralised, and ethical communication ecosystem. It offers numerous functionalities (instant messaging, end-to-end encryption, blogging, file sharing, events, forums, etc.) and works natively on desktop, mobile devices (Android), on the web, and as well without graphic interface (text interface and command line).
It has been a relief to move over this stage after enourmous amount of work since the last version (0.6.1), released more than 2 and half years ago!
If you know Python, I am looking for people who could help me to make the project installable on Windows, Mac OS and *BSD. I am also working on a flatpak package. It would be good to have he web frontend on Yunohost, there again help would be much appreciated (cf. work already started).
Please note that SàT is already available on Debian and probably its derivated (however, beta is not there yet), as well as on Arch Linux (you'll have to use the
sat-*-hg packages to test the beta).
The installation instructions are available in the documentation, and I'm working on a new website, which would be more reading friendly, and should be on-line this week.
Here are the links for installation files, and you'll find most of them on Pypy (please note that you'll have to go through "release history" to get beta version)):
SàT backend: https://ftp.goffi.org/sat/sat.tar.bz2
It includes the Primitivus (TUI) and jp (CLI) frontends
Cagou (desktop): https://ftp.goffi.org/cagou/cagou.tar.bz2
Cagou (Android): https://ftp.goffi.org/cagou/cagou.apk
Libervia (Web): https://ftp.goffi.org/libervia/libervia.tar.bz2
SàT templates: https://ftp.goffi.org/sat_templates/sat_templates.tar.bz2
templates used by Libervia and jp for web rendering
SàT Media: https://ftp.goffi.org/sat_media/sat_media.tar.bz2
needed for graphical UI
I'm concluding with a screenshot of the Android version of Cagou, and note that this blog is also made with this project:
It’s more than 20 years since I got involved with chat technologies. In the late 90’s I got hired by company for developing a chat client. We did this by reverse engineering the ICQ and AIM protocols and created a compatible client. Then Jabber was announced, we switched to it immediately, using the gateway feature to talk to the proprietary systems.
Later I worked for SLTS Communications on the myJabber client, which was very popular on the Windows platform. Also one of the first clients which bridged Jabber and SIP for VOIP integration.
Then I became self employed and focused mostly on libraries which helped many companies to bring their Jabber/XMPP products faster to market. I also did lots of consulting and custom development on clients, servers and other Jabber/XMPP related products.
Also many products which were not IM related, but using the realtime capabilities and other modern XMPP features.
Working on chat clients was always one of the tasks I enjoyed most. I missed the client work over the last 10+ years. So I thought its time to get back to it ;-)
Over the last 12+ month I did lots research on clients and their UIs. This includes XMPP, other open IM protocols and proprietary chat systems.
I worked on several prototypes with different toolsets and technologies. The aim was to evaluate languages and their frameworks. As well as available XMPP libraries for creating a modern cross platform client using the latest compliance suites.
The focus was on desktop clients only. While we have pretty good mobile clients, we are lacking on good desktop clients these days. Especially on Windows. Many people still spend most of their time on the desktop.
I created prototypes with:
I got the best results with technologies that have good implementations of the MVVM pattern. This narrowed it down to some web frameworks and the .NET platform for me.
With netCore the .NET platform became finally open source and cross platform. What’s still missing is an official cross platform GUI from Microsoft. But there is the open source XAML framework Avalonia, supporting all major platforms. And my own MatriX library is available for netCore for a while now, also open source, licensed under the GPL.
Because of the great Avalonia UI framework I decided on the netCore stack using for the new Palaver XMPP client.
Its still in very early stages. Once I can stabilize the prototype into a working client for daily usage all code will be published under the GPL license on GitHub. If anyone is already interested to contribute to this project then feel free to contact me.
this week I've had to fix the way jid are used for file transfer.
To explain you the problem, I need to explain you how communication is done in XMPP (*). To be brief, when an entity (with jid
email@example.com) want to access a component (with jid
files.example.net), it sends a "stanza" which is an XML element. There are 3 kinds of stanza (
In our case we use
iq stanza, so Louise sends something like:
<iq from="firstname.lastname@example.org" to="files.example.net" type="set"> […] </iq>
and the component answers with something like this:
<iq from="files.example.net" to="email@example.com" type="result"> […] </iq>
Last week I've explained how I've used the local part in components to access files from somebody else. So far, when creating a stanza, I was using the jid we are connecting with in the
from attribute (i.e. where we set the sender of the message).
This is working well with clients, or components if you don't use local part, but when somebody was accessing files from
firstname.lastname@example.org, the jid used by the component is
files.example.net, a different one, so this was not working anymore.
To fix that, I've simply had to change the code to use the jid used to contact the components (i.e. the one in the
to attribute of the original request) instead.
I've also fixed a MAM (Message Archive Management, XEP-0313) bug where the same messages were requested again on next start up under certain conditions.
Finally, I've completed a generic invitation mechanism to notify somebody when an event or photo album is available. When the invitation is received, the data needed to retrieve the thing is saved in a private "list of interest", which is a pubsub node. With that I can now diplay in Libervia the available photo albums as you can see in the screen capture below.
We are nearly there, I still have to complete the guest page (page for people without XMPP account), so they can see events or photo albums, and I can launch the beta. It's a matter of days now.
Thanks for reading, as always feedbacks are welcome.
(*) to learn more about XMPP, you can check my series of articles "Let's talk XMPP". It's originally written in French, and only 4 articles on 10 are translated, help would be welcomed to translate the other ones.
A new whitepaper on the Isode website (Interconnecting XMPP and IRC) shows how Isode’s M-Link XMPP Server can be connected to and used in conjunction with chat services using IRC (Internet Relay Chat) in a range of deployment scenarios.
In order to help our customers and evaluators establish connections between XMPP Multi-User Chat (MUC) rooms and IRC channels, without downgrading security for XMPP users with XMPP traffic we’ve published a new evaluation guide.
We have two small changes to our evaluation guide series to announce (with many more coming soon).
Our core XMPP Messaging Evaluation Guide, using our M-Link XMPP server and M-Vault LDAP directory, now includes a section on adding a Security Policy to your XMPP service. In this new section we show you how to add a the policy to your service and clearances to your users. You can additionally apply label based controls to multi-user chat, domains and peer services (all of which and more is covered in the M-Link Admin Guide).
The Security Policy we use in the evaluation guide is one of the demonstration policies we ship with M-Link but, if you want to create your own, contact us about evaluating our SPIF Editor. SPIF (Security Policy Information File) is a file representation of a Security Policy, in other words the definition of which labels are valid and how to check them against clearances.
The High Frequency Industry Association (HFIA) provides an â€œindustry driven forum for the interactive exchange of technical and information in the area of High Frequency Communications.â€ Physical meetings of the group usually take place twice a year and in September 2014 Portsmouth was the location for the latest of these meetings. This is the first of two blog posts covering our attendance at this meeting.
As Isode has an interest in applications for constrained bandwidth communications, we often attend and occasionally present at these meetings. This year we had two presentations to share with the attendees.
Isode CEO, Steve Kille, gave a talk focusing on Isode’s proposed extensions to STANAG 5066 to improve performance of applications running over wideband HF links. The first was an update to a talk Isode gave at the February HFIA meeting, this time including hard measurements showing that Isode’s extensions (known as LFSN, Long Frame Sequence Number) result in significant performance gains.
This was followed by a live demonstration of the extensions in action, enabling co-existence of bulk and time critical applications over narrow-band and wide-band HF. The applications used were Multi-User Chat and Real-Time Military Forms (both using the XMPP protocol) and military email messaging.
We’re pleased to announce the availability of Isode’s latest release, R16.3, which can be downloaded now from our website. R16.3 is a major Isode release which adds new capabilities across the entire Isode product range, including:
We’ve introduced a multi-master capability to M-Vault, complementing the single-master approach to replication defined in the X.500 protocols around which M-Vault was developed. M-Vault is the first directory to offer both multi-master and X.500.
M-Link gains a new Archive Server for archive of all messages (including 1:1 chat, MUC and PubSub). XMPP clients can access archives using Message Archive Management (MAM) as defined in XEP-0313. M-Link also gains three new web applications:
We’ve added gateway support for text based organisational message protocols, which we’re collectively describing as ACP127. The first release of this capability supports ACP127 and DOI 103S, a popular US variant, and enables conversion with STANAG 4406 (compliant to STANAG 4406 Annex D) and SMTP (following the MMHS over SMTP extensions).
In addition we’ve made extensive improvements to MConsole and M-Link Console to support the new M-Switch and M-Link family capabilities. For a full run-down of new capabilities in R16.3, please see the Product Release page. We’ll be publishing further blog posts over the coming weeks focusing on some of the new R16.3 capabilities.
I have added an unread message indicator in the chat screen to indicate where unread messages begin. You can see this towards the bottom in the screenshot below. This should be useful when combined with the new date separators and shorter date display.
At this point. I think 3.6 is done with new features. The final change log is: