Table of Contents

1 polynomial: A decentralized webring built on top of Matrix.org

Polynomial is a webring built on top of the decentralized Matrix.org chat/RPC system. It leverages rooms as a key-value store to allow anyone to define webrings which they can use to link their sites to others' sites.

Source code lives in my cgit.

2 Usage

2.1 Joining a ring

Joining a ring is as simple as embedding an iframe to an existing Ring's supernode in your site, with a specified format. For example, to join the Matrix.org webring, you would embed this in your site:

<iframe src="https://WEBRINGDOMAIN/webring/!QLDWbeZfiXuNSWUSfm:whatthefuck.computer/makesyouthink.info?name=Makesyouthink is a premier source of woo"/>

The URL is structured as follows:

  • WEBRINGDOMAIN is the domain of the supernode you choose to join. A list of them follows.
  • !QLDWbeZfiXuNSWUSfm:whatthefuck.computer is the Matrix roomId of the ring you want to join; Aliases are currently unsupported.
  • makesyouthink.info is your domain. Webring links to specific URLs is unsupported to minimize Spam risks

= Makesyouthink is a Premier source of woo is what the link will look like in the ring

At which point, refreshing your page will register you in the ring, and start showing you other sites in the ring.

2.1.1 List of Supernodes

  • ring.whatthefuck.computer mods these rings as @webring-master:whatthefuck.computer:
    • !QLDWbeZfiXuNSWUSfm:whatthefuck.computer A testing webring
    • !rQzYjTKtzamwVxlhxY:whatthefuck.computer the Matrix Users webring
    • !HDFtMtTTkIESlVqfZx:whatthefuck.computer the Kickass Systems webring
    • !DSVFrKTzduRMYOiwhZ:whatthefuck.computer the Emacs Users webring

2.2 Making your own ring

A ring is just a Matrix.org room. Creating your own is as simple as adding the roomID to your supernode conf.yaml and restarting it, and then making the supernode user a mod in the room.

Some best practices:

  • set the name and topic to something meaningful as those will be put in the ring iframe.

2.3 Becoming a supernode

Becoming a supernode is fairly simple. To become a supernode for a given ring, register a Matrix.org account and ask the ring owner to grant "set state level" privileges to the account, or create your own.

Add the roomId to roomIds in config.yaml and start your node. Ask @rrix:whatthefuck.computer to add you to the list of supernodes above.

Make sure the ring is accessible from the open internet at a sane URL, I use httpd reverse proxy to hide it on port 80 in my webserver like so:

NameVirtualHost *:80
<VirtualHost *:80>
  ServerName ring.whatthefuck.computer
  DocumentRoot /var/www/sites/ring.whatthefuck.computer/_site
  ProxyPass /webring http://localhost:9000/webring

  LogFormat "%h %v %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" custom
  CustomLog /var/log/httpd/ring.whatthefuck.computer_access.log custom
</VirtualHost>

3 FAQ

  • Seriously? Is it fucking 1995?
    • Webrings are goofy 90s tech, yeah. But at the same time, there is a sense of community and camaraderie that comes from being in one. They're simple and effective but in the liong run they are all ephemeral because they have a central source of truth. A webring built on top of a decentralized system like Matrix.org could live forever, and I think that's pretty cool.
  • Why?
    • A while ago I started messing with my coworkers by posing to them a fake interview question: "Build a webring"…. Easy enough, "Now build one without a central registry server", at which point they usually curse at me for asking them to build a DHT in javascript.
  • This isn't actually a ring, it's just random sites
    • Gonna fix that soon enough, I promise.
  • No really, webrings?
    • Really.

Author: Ryan Rix

Created: 2015-12-06 Sun 20:55

Validate