Write a little article about Matrix Highlight
116
content/blog/introducing_highlight/index.md
Normal file
|
@ -0,0 +1,116 @@
|
|||
---
|
||||
title: "Introducing Matrix Highlight"
|
||||
date: 2021-12-13T16:49:42-08:00
|
||||
tags: ["Matrix", "Project", "Matrix Highlight"]
|
||||
draft: true
|
||||
---
|
||||
|
||||
I wanted to briefly introduce a project that I've been working on in my spare time over the past couple of months.
|
||||
It's called __Matrix Highlight__, though this is a working title. However, it does exactly what the title claims:
|
||||
this little project is a browser extension to annotate the web, using [Matrix](https://matrix.org) as a communication and storage protocol.
|
||||
My goal with this project is a __decentralized, federated,
|
||||
collaborative annotation system for web pages and documents (that can be self-hosted).__
|
||||
See the image below for a quick sneak peek at what it looks like.
|
||||
|
||||
{{< figure src="mhl_many.png" caption="Text randomly highlighted with Matrix Highlight" class="fullwide" >}}
|
||||
|
||||
### Project Goals
|
||||
#### Decentralized
|
||||
Quite literally, the word "decentralized" lies in opposition to "centralized". In a centralized application, the data,
|
||||
or computation, or anything really, is controlled by a single entity. An example of this might be Google Docs: Google
|
||||
is in charge of Docs, and no one else. You log in through Google, and Google manages your various documents and edits
|
||||
to them authoritatively.
|
||||
|
||||
I don't think that's a good idea. Although convenient, this kind of arrangement shifts control out of your hands
|
||||
as a user, and into the hands of the entity running your software. Google has the power, if they wanted, to ban you from
|
||||
using Google Docs, or to manage your content in ways you don't like. They can (and do) impose storage limits. You are,
|
||||
in a sense, at their mercy. Furthermore, in the (admittedly unlikely) case that Google goes down, Google Docs goes down
|
||||
for everyone. There's a single point of failure. Whereas it's hard to imagine Google itself having any real trouble (although
|
||||
the recent AWS outage proves that such a thing is possible), most services aren't Google.
|
||||
|
||||
A decentralized application does not suffer from these problems. As the Matrix website briefly explains:
|
||||
|
||||
> Fully decentralised conversations with no single points of control or failure
|
||||
|
||||
The failure of a single server in a decentralized system does not bring it down for everyone. Furthermore, users have
|
||||
the ability to switch between different servers or providers if one becomes abusive (or simply stops existing). Users
|
||||
have more choices, and more control.
|
||||
|
||||
__For Matrix Highlight specifically__, this means not having to rely on one specific group or company
|
||||
for storing and managing your annotations or notes.
|
||||
|
||||
#### Federated
|
||||
Decentralization by itself does not make for useful software. There might very well be multiple servers providing access
|
||||
to a particular piece of software. However, there's no guarantee that users of one such server can meaningfully interact
|
||||
with users of another server. Microsoft's Office 365 has collaborative document editing, and so does Google Docs. However,
|
||||
users of the two services cannot collaborate with _each other_.
|
||||
|
||||
In a federated system, the various providers establish a way of working together. The [Fediverse](https://en.wikipedia.org/wiki/Fediverse)
|
||||
is a big example of this. Users of various [Mastodon](https://joinmastodon.org/) servers can see each other's messages and posts,
|
||||
despite residing on servers with differing rules and administration. Users of Matrix can send messages between servers, with only
|
||||
one account.
|
||||
|
||||
__For Matrix Highlight__, this means that users who choose to use different servers or providers are still able to collaboratively highlight
|
||||
and annotate pages together.
|
||||
|
||||
#### Self-Hosted
|
||||
Self-hosting is the practice of running the various software you use yourself. This allows you yourself to be in charge of your data,
|
||||
instead of _any_ other entity, however trustworthy. A popular self-hosted solution is [Nextcloud](https://nextcloud.com/), which
|
||||
may be used, among other things, as a Google Drive replacement that you run on your own server. With Nextcloud, your files
|
||||
are completely under your own management, rather than that of some other person or company elsewhere.
|
||||
|
||||
__For Matrix Highlight__, this means that users can choose to run all the necessary software themselves, and thus remain in complete
|
||||
control of their annotation and other data.
|
||||
|
||||
### What it Looks Like
|
||||
First of all, you can watch a little demo video I recorded here:
|
||||
|
||||
{{< youtube Q3h5A0DsE1s >}}
|
||||
|
||||
You already got a little taste of Matrix Highlight in the opening screenshot. However, I'd like to show you some more of what I have
|
||||
so far. The most important aspect of the tool is the ability to annotate web pages. The tool can be brought up on any page;
|
||||
I typically test it on my blog, but that's just because it's convenient. Selecting some text brings up a little highlighting tooltip:
|
||||
|
||||
{{< figure src="mhl_tooltip.png" caption="A matrix highlighting tooltip appearing over one of the sidenotes in a different article." >}}
|
||||
|
||||
Selecting one of the colors in the tooltip creates a new highlight of the text you had selected:
|
||||
|
||||
{{< figure src="mhl_highlight.png" caption="The result of clicking a color in the previous screenshot." >}}
|
||||
|
||||
Annotations applied in this way are shared across all active instances of a Matrix Highlight page, including those shared with other users.
|
||||
|
||||
{{< figure src="mhl_multi.png" caption="Two chrome windows with the same annotations." class="fullwide" >}}
|
||||
|
||||
Highlights created by users can also be browsed as a list:
|
||||
|
||||
{{< figure src="mhl_quotelist.png" caption="A list of highlights from another page." class="medium" >}}
|
||||
|
||||
Highlights are stored in Matrix rooms. Since Matrix rooms are effectively chat rooms, they are built for being shared with other users.
|
||||
Thus, it is very simple to give another user access to the current list of highlights.
|
||||
|
||||
{{< figure src="mhl_userlist.png" caption="A list of users for a particular page." class="medium" >}}
|
||||
|
||||
This also means that a single page can have multiple
|
||||
independent sets of highlights, allowing you to organize them however you like. For instance, if you're proofreading a page of your own,
|
||||
you may have a highlight set (Matrix room) for every editing pass. The rooms can be switched at a moment's notice:
|
||||
|
||||
{{< figure src="mhl_roomlist.png" caption="A list of rooms for a particular page." class="medium" >}}
|
||||
|
||||
### Current and Planned Features
|
||||
|
||||
The following are the current and planned features for Matrix Highlight:
|
||||
|
||||
* __Current__: Create and send website annotations over Matrix.
|
||||
* __Current__: Store data in a decentralized and federated manner.
|
||||
* __Current__: Share highlights with other users, including those on other servers.
|
||||
* __Current__: Group annotations together and create multiple annotation groups
|
||||
* __Planned__: Use Matrix's End-to-End encryption to ensure the secure transmission and storage of highlight data.
|
||||
* __Planned__: Leverage the new [`m.thread` MSC](https://github.com/matrix-org/matrix-doc/blob/gsouquet/threading-via-relations/proposals/3440-threading-via-relations.md) to allow users to comment on and discuss
|
||||
highlights.
|
||||
* __Planned__: Use something like [ArchiveBox](https://archivebox.io/) to cache the current version of a website and prevent annotations from breaking.
|
||||
* __Planned__ Highlight PDFs in addition to web pages.
|
||||
|
||||
### Project Status and Conclusion
|
||||
For the moment, I'm refraining from publishing the project's source or output extensions. This is a hobby project, and I don't want to share
|
||||
something half-baked with the world. However, I fully intend to share the code for the project as soon as I think it's ready (which would probably
|
||||
be when I feel perfectly comfortable using it for my own needs).
|
BIN
content/blog/introducing_highlight/mhl_highlight.png
Normal file
After Width: | Height: | Size: 180 KiB |
BIN
content/blog/introducing_highlight/mhl_many.png
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
content/blog/introducing_highlight/mhl_multi.png
Normal file
After Width: | Height: | Size: 595 KiB |
BIN
content/blog/introducing_highlight/mhl_quotelist.png
Normal file
After Width: | Height: | Size: 127 KiB |
BIN
content/blog/introducing_highlight/mhl_roomlist.png
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
content/blog/introducing_highlight/mhl_toolbar.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
content/blog/introducing_highlight/mhl_tooltip.png
Normal file
After Width: | Height: | Size: 183 KiB |
BIN
content/blog/introducing_highlight/mhl_userlist.png
Normal file
After Width: | Height: | Size: 91 KiB |