This is the last week of my funding on Moderator Tools for PubHubs. It has been a pleasure working with the PubHubs team. The time seems to go quickly.
Over the last few weeks I have been documenting everything about the Moderator Tools for PubHubs project on my dedicated web site, https://www.ph.trax.im/.
To summarise, these are the main work areas in this project, linking to their web site sections:
I wanted to write “please matrix me!” with “matrix me” being a hyperlink to my matrix identity. Why should this be hard?
I wrote (in markdown mode, using Element-web/desktop): please [matrix me](https://matrix.to/#/@julian:foad.me.uk "@julian:foad.me.uk")!
This was formatted into HTML (by Element-web/desktop) as: please <a href=\"https://matrix.to/#/@julian:foad.me.uk\">matrix me</a>!. Already we've lost the “title” part of the mark-up. Let's consider that a separate issue and continue by looking at how clients render this resulting HTML.
How did clients render it? Ordered roughly best to worst.
good?
client
rendered
notes
☑
Hydrogen
a pill with my given text “matrix me” inside it, and my initial in place of avatar.
☑
Nheko
a plain hyperlink
☑
matrix-static/view.m.o
a plain hyperlink
!
Element (web/desktop) edit mode
a pill with my avatar and my given text “matrix me” inside it. Different from view mode!
-
Element (web/desktop, Android)
a pill with my avatar and username, losing the link text that I specified.
-
Fluffychat (desktop, Android)
a pill with my avatar and username, losing the link text that I specified.
-
Syphon
plain text, losing the hyperlink.
Differences in styling are not the issue, such as colour and shape and whether and how they display an avatar. Clients should differ in style. The issue is about functionality: it is a problem if the link text or the link target are lost.
The first three are good (correct link text and hyperlink). The last three are all bad. (And the middle one in that table is technically correct but is a weird inconsistency in the UI.)
Under Moderation, there are subsections for the main work areas of the project: Draupnir+Pantalaimon, Disclosure of Identity Attributes, and Civilised Discourse.
That last area is the one I am currently working on.
One of matrix's key properties is decentralised communication.
No single party controls the whole system, there is not a single service provider of whom everybody is a customer, anyone can choose who provides their service or run it themself.
When I install a Matrix client app, I expect it to connect to my Matrix server. What happens currently: most matrix client apps invite me to connect to one particular de-facto “central” server called “matrix.org”. As a user, connecting to my own server is a chore. In Element's flagship “Element X” preview, for example, currently I have to choose the less obvious buttons to skip past screens inviting me to choose the “matrix.org” server, twice, and input my server's domain on a “search” screen separate from where I enter my “username”.
What matrix client apps should do: discover my local server automatically, make a reasonable suggestion for my username (e.g. from my computer's or phone's user account details, address-book, etc.), and move on to asking me for my password.
It would be nice if we could standardise a way for a local matrix homeserver to advertise itself on the local network, and for a client to detect the local homeserver(s) automatically. Home media servers do this, and some other kinds of home servers. Technically there are a few different ways to achieve Zero-configuration networking, like UPnP, mDNS, DNS-SD.
A different and complementary approach is to integrate with the accounts already configured in the phone's settings (on Android for example). I should be able to configure one matrix account in one place, and then any matrix client app I install should pick up the settings from there.
Which technique(s) we use is not as important as that it should Just Work, for ordinary low-tech people who have not set up their own infrastructure but are perhaps subscribing to a matrix server provider.
(Traditional “enterprise” deployment techniques are still valid in an enterprise setting, for example where the enterprise IT department configures the employees' devices. But that is something they have the resources to develop and deploy. I am interested in what we can do for ordinary individuals at home.)
It seems to me that's the way things should Just Work, everywhere from homes to enterprises, if we care about decentralisation.
A moderator asks someone to disclose an attribute of their real identity. The recipient provide the requested attribute, using Yivi to attach a cryptographic proof.
In the last update I introduced a demo of attribute disclosure. I have since completed the main TODO there, making the disclosure flow happen on the recipient's account. (In the first demo the moderator's role and the recipient's role both took place in the same login session in the same account.)
This week I have been thinking about how we will need to improve the user experience, or flow, of this disclosure request and response.
Writing the dialogue boxes and associated logic by hand was tedious and buggy. Rapid prototyping would be helpful. I decided it's time for me to learn a better way. Being new to UI design and fervently open-source principled, I searched for a FOSS solution and found Quant-UX.
This month I have been building a PubHubs-specific feature, the ability for a moderator to ask a someone to disclose an attribute of their real identity.
When a person signs in to PubHubs hub through the Yivi verified credentials system, initially they are allocated a pseudonymous user identifier, for example @123-321:testhub.matrix.host. From this pseudonym, not even an operator or moderator of the hub can discover the user's real identity.
A moderator may wish to ask a user to confirm their real identity, to some degree. Through Yivi it is possible to ask a user to reveal a cryptographic proof [1] of one or more of their identity attributes. Some common attributes are one's real name, physical address, or email address. An attribute could also be something like “age is at least 18 years”.