cadence’s website.

Some changes will be applied after reloading.
Some changes will be applied after reloading.

Introducing BreezeWiki

Check it out! Bookmark the page! Install the browser extension! Everything you need to know should be written on https://breezewiki.com.

The rest of this post will be technical analysis.

Why Fandom

Fandom, formerly Wikia, is one of the most annoying websites on the internet. It is always accelerating and gaining traction and scooping up other wikis and wiki farms. The site now contains so much important knowledge contributed by so many people, but the user experience is really really horrible. To put it in the words of an anonymous user:

Fandom pages crashing and closing, taking forever to load and locking up as they load the ads on the site... they are causing the site to crash because they are trying to load video ads both at the top and bottom of the site as well as two or three banner ads, then a massive top of site ad and eventually my anti-virus shuts the whole site down because it's literally pulling more resources than WoW in ultra settings...

The site has too many ads. But even with ad-block, the layout still sucks a lot and the page is slow to load.

Software freedom does not ensure a good end-user experience

Fandom itself is actually built on top of open source software, MediaWiki. MediaWiki is the software that runs Wikipedia, and most other interesting wikis on the internet. MediaWiki can be heavily skinned and modified, so you might not recognise that you're using it. Fandom has taken open source software and used it to build the most annoying ad-infested website of all time.

MediaWiki is open source/free software with the GNU GPL 2 license. Free software helps, well, software freedom, but it doesn't ensure that end-users will have a friendly experience, and Fandom is the evidence. An example of a potential solution is the Anti-Capitalist Software License, because software tends to be user-friendly when it's made with people in mind rather than profits, but there's a lot of questions that have yet to be satisfactorily answered.

Anti-Wikia Alliance

Hilariously, wiki text authors have hated Wikia for a long time — as far back as 2010. In 2010, Wikia rolled out a new "user-friendly" skin for the site that many protested against, but I'll let the Anti-Wiki Alliance speak for itself. Why not take a look at its site?

If you are a wiki text author, the Anti-Wikia Alliance also provides guides and assistance on moving your own wiki off Fandom to somewhere more ethical, and lists suggested destinations you could move to, free and paid.

"Why would I pay for wiki hosting?" Because someone has to pay to keep it online, and if you aren't paying, then either ads or investors are. That's the unfortunate reality.

How BreezeWiki gets data

MediaWiki has extensive APIs. BreezeWiki queries those APIs for HTML page content, search results, category listings, and whatever else it needs.

How BreezeWiki presents data

Wiki pages are written in wikitext markup, which gets transformed to HTML for display. This can be any HTML at all, so BreezeWiki needs to be flexible and minimal in how it handles the page content so that it can deal with a variety of sites with different appearances and layouts.

BreezeWiki is written in the Racket programming language, a dialect of Lisp. In Lisp, s-expressions are the core building block of all data structures, and they can be used to hold XML (HTML) representations easily. This means all the core list manipulation tools can be used for editing the structure and content of the HTML, making it a really natural fit for the site.

BreezeWiki uses the html-parsing module to convert the HTML to a nested tree of s-expressions, then it walks that tree with a recursive function to edit the tree. At each step, the function takes in the current element, and returns a replacement element. This functional style lets the tree be transformed in a consistent and immutable way. Once it's all done, the s-expression content is added to BreezeWiki's page template, and that's all converted back to HTML with the html-writing module and sent to the client.

This tree walking code is how it converts inter-page links, for example. As it walks the tree, whenever it finds an "a" element with a src attribute that points to the same wiki, it rewrites that attribute and returns the new element.

You can open src/page-wiki.rkt in the source code to see precisely how it does it.

The future

You might recall that I recently stopped running Bibliogram, and be wondering, how long will BreezeWiki exist for?

The answer is, I don't know, so enjoy it while it lasts! What I do know is that it'll be fun as hell. Tell your friends, tell your co-workers, and tell any wiki authors you know to transition to another hosting platform.

See you next time!

Cadence

A seal on a cushion spinning a globe on its nose.
Another seal. They are friends!