Oddmuse is the wiki engine running all the wikis at emacswiki.org – including EmacsWiki itself. My main interests are:

See OddmuseRoadmap for my thoughts about the design of Oddmuse.

2018-07-19 Paginated Feeds

Recently, @jamey was talking about feed pagination (RFC 5005). I finally got around to adding the necessary code to Oddmuse and deploy it for all my sites. So if you check out Recent Changes and click on RSS with pages you should get a feed for all the pages changed in the last month (ignoring minor changes), and if your feed reader supported it, you could fetch previous pages of the same feed and thus scroll through the backlog until somewhere around 2003 those edits would dry up and there’d be nothing left but empty pages.

I’m currently not implementing the first page link so your feed reader wouldn’t realize that it should stop going back in time. It will follow links forever but eventually loops things will get strange. I just tried to see how far back in “negative time” we can go and if we try it with Recent Changes, you’ll get a page saying “Updates since 1900-01-00 00:00 UTC up to 1970-01-01 00:00 UTC”. I guess 1900 is the limit, then. 😂


Comments on 2018-07-19 Paginated Feeds

Sadly, the Journal RSS Extension – which I use a lot – doesn’t fit into the existing RC/RSS framework.

– Alex Schroeder 2018-07-19 12:03 UTC

Add Comment

2018-06-06 Away from GitHub

Microsoft is buying GitHub. Mastodon is abuzz with discussions. Let’s remind ourselves of Embrace, extend, and extinguish, the phrase used internally by Microsoft to describe its strategy for entering product categories involving widely used standards, extending those standards with proprietary capabilities, and then using those differences to disadvantage its competitors, according to Wikipedia. 🤢

Just read through the examples on that page. 🤮

So I want to move away from GitHub.

Git itself is federated. You can pull from anywhere and push wherever they allow you to. Some of the things you cannot do, however:

  • send patches via the website
  • track issues
  • browse code and documentation online

What other functionality do you use? I think that’s all I do.

Maybe I’ll just create a software wiki for myself which implements these features and leave it at that. This requires a few things:

  1. hosting my own git repositories ✔️
  2. a platform to manage tickets ✔️
  3. notifications by mail ✔️

I have a proof of concept up and running. It’s based on Oddmuse and a bunch of additions in the config file.

I suspect it’s either going to be that, or something like Fossil. The main drawback is that nobody else uses it, however. All those Mercurial users know what I’m talking about. I know that I don’t like to contribute to projects using “unpopular” version control software.

Fossil has tickets and it serves a website for its repositories. I dislike the database stuff but SQLite has a good reputation and at the end of the day all the .git directories are gobbledygook to me anyway.

I don’t really need code browsing via the web. That’s why I don’t need cgit, I think. I hardly ever do it. Sometimes I link to particular lines of code when I comment on an issue, perhaps. I guess I do kind of miss the cheap README.md = project homepage and project documentation.

A feature I sometimes used was online text editing: I sometimes fixed typos in documents which resulted in automatic pull requests on GitHub and that was useful and cool.

The other alternatives like GitLab and Gitea have a reputation for needing a lot of resources, so that’s bad.


Comments on 2018-06-06 Away from GitHub

JWZ comments: “Anyway, this is your periodic reminder that Microsoft is a vile garbage fire of a company.”

– Alex

I guess I do kind of miss the cheap README.md = project homepage and project documentation.

cgit actually kind of has this, I just discovered. Just sprinkle this in your /etc/cgitrc:


(above scan-path, if you put that in your cgitrc).


· http://koldfront.dk/git/fffs/about/

(I haven’t fixed the broken image link yet).

Adam 2018-06-06 14:51 UTC

Nice! And works for me: Face Generator README.

Current setup:

# cgit config
# see cgitrc(5) for details





Anything else I would need?

– Alex Schroeder 2018-06-07 06:14 UTC

Note to self: I use git clone ssh://git@alexschroeder.ch:882/home/git/face.git where as others will use git clone https://alexschroeder.ch/cgit/face.

– Alex Schroeder 2018-06-07 07:15 UTC

The only things I have besides what you’ve got is:


and I’ve set root-title and root-desc

Adam 2018-06-08 15:31 UTC


– Alex Schroeder 2018-06-08 15:36 UTC

I’m also using this opportunity to splitting subfolders out into new repositories for some projects. The GitHub help pages are still useful. :)

– Alex Schroeder 2018-06-09 20:25 UTC

Free Software Needs Free Tools. «The only cost, we are told, is that the tools themselves are nonfree or run as network services with code we cannot see, copy, or run ourselves. In their decisions to use these tools and services—services such as BitKeeper, SourceForge, Google Code and GitHub—free software developers have made “ends-justify-the-means” decisions that trade away the freedom of both their developer communities and their users. These decisions to embrace nonfree and private development tools undermine our credibility in advocating for software freedom and compromise our freedom, and that of our users, in ways that we should reject.»

– Alex Schroeder 2018-06-21 19:06 UTC

Add Comment

2018-05-27 Privacy Policies

I’ve been writing some privacy policy statements...

I will need a few more: Community Wiki, Campaign Wiki, etc. But they’ll all be basically copies of the Oddmuse Wiki Privacy Statement. I might have to adapt the markup but basically that’s it. From an admin perspective, they’re all set up the same way: they use the same software and the logs all use the same logrotate configuration.


Add Comment

2018-05-24 Feeds

I think I’m going to unsubscribe from all the blogs that don’t provide full articles in their feed. If they do that, I need to click through and open a browser. That makes me think people want to show me their ads and I’m doing my very best to block them. They probably don’t like me blocking the ads, and I don’t like seeing the ads, so it’s better to part ways, I think. And now I can use feh as the external browser for newsboat, I guess. (feh is a simple image viewer.)

Sometimes I guess the fault lies with the authors of tools and the defaults they picked. What were they thinking? Then again, the Oddmuse default feed (my own wiki and blog software) also defaults to showing the default instead of the full text. Gah.


  • default RSS feed, which works for a wiki but not for a blog
  • the preferred feed I manually added to the configuration of my site such that it gets picked up by tools people point at my site


Comments on 2018-05-24 Feeds

Another thing I noticed on your default feed is it includes comments (I like that!). Is there a way Oddmuse can combine the full feed with comments in full? Call it the “deluxe” feed, if you will!



– At PresGas at freeradical dot zone 2018-05-25 17:21 UTC

I noticed that my markup rule for Mastodon accounts assumes all lower case for account names. Heh. 😏

– Alex Schroeder 2018-05-25 22:20 UTC

I’ll have to investigate the full feed thing. It should be possible for sure.

– Alex Schroeder 2018-05-25 22:21 UTC

https://alexschroeder.ch/wiki?action=rss;full=1 Perhaps?

– Alex Schroeder 2018-05-25 22:22 UTC

Hey! I believe that does it. Trying it out on newsboat/newsbeuter (haven’t fully migrated my server to 18.04 Xubuntu) shortly, but Firefox’s view looks good

– At PresGas at freeradical dot zone 2018-05-26 02:12 UTC

Add Comment

2018-03-17 Oddmuse and the EU

I have started working on a plan for Oddmuse regarding the EU Data Protection Directive, today. You can read about it on the Oddmuse Wiki.

The basic idea is that I want to get rid of IP numbers as far as possible. I got rid of hostnames a while back already. But IP numbers are still to be found all over the place.

My plans:

  1. run the strip-host.pl script for all my sites
  2. work on the remaining issues as listed on link above


Add Comment

2018-03-05 Troff

When writing for this wiki, I am always conscious of how it will look using Gopher. Basically raw mode. This includes thinking about line breaks. And I end up not liking inline linking so much. It makes the plain text really hard to read. But writing the plain text with manual line breaks on a handheld device runs into the problem that iOS will autocapitalize all line beginnings. You have to “fix” that manually. And it uses “real” quotes, which are neither ASCII nor Latin-1 so older Gopher clients fail to display them correctly.

Into all this mess comes a Gopher post by dbucklin about using Troff. That’s an old formatting tool from the very early days. Way older than LaTeX, and that’s pretty old, too. It’s an excellent introduction for somebody who knows nothing about it. I want to give it a try because all the the things that are old but that have been kept alive by enthusiasts have their own ways of being super efficient.

I guess that’s why I use Emacs, too. It’s weird, but it works, if you adapt to it’s way of working. These things are like living fossils. We like to think that those are species that split off from the rest millennial ago and thus they are “primitive” but not so: they just evolved on their own, for exactly the same amount of time, and they are just as adapted to their niche as whatever mainstream is to its niche.

Anyway, looking at troff was very cool, but I think I will continue to manually write Markdown on these wiki pages and I just hope that future changes to this site will be able to automatically migrate from one format to the next. Then again, if you look at the old pages, you will see how well that worked in past as I switched markup rules. If you look hard enough, you will see how badly it worked, actually.

There is a lot of cover-up at work. HTML is being cached, for example. But every global search-and-replace operation that touches a page discards the cached HTML and regenerates it and therefore if those global search-and-replace operations don’t do their job, the leftover markup is broken, and the HTML cache is useless.

Oh well. Here is to hoping that Markdown will last longer than WikiWiki markup, UseModWiki markup, or WikiCreole markup. At least it’s not limited to just the wiki world!

I’m sure there is a Troff markup wiki somewhere. It would Be beautiful in plain text, HTML, or PDF. (I assume?) But I will stick to manually formatting the text I write in Markdown, for now.

That reminds me that my implementation of CommonMark is still sorely lacking.


Add Comment

2018-02-12 Gay Halifax

Every now and then I’m surprised to learn that the Rainbow Community for Halifax, Nova Scotia uses Oddmuse for their site. Daniel MacKay runs the site and that makes him the biggest Oddmuse user other than me, I think.

Oddmuse is the wiki engine running this site. A wiki is a kind of light weight content management system with an emphasis on simplicity (ideally, hah!). Basically anybody is can edit pages. Originally there was not much more to it than that and projects like Smallest Wiki showed how you could get these going in just a few lines of code. Or this wiki I wrote in Go a few years ago: Oddµ.

If you want to come and talk to us, fire up your IRC clients and join us on Freenode, in the #oddmuse channel. The link takes you to a web chat thing so that you can get a feel for it without having to struggle with an IRC client.


Add Comment

2018-02-02 Markdown

I’m having fun implementing the CommonMark Spec 0.28 for Oddmuse using their spec file for automated testing. Current status:

# Looks like you failed 493 tests of 624.

Implementing simple stuff is fun. :)


Comments on 2018-02-02 Markdown

OK, sometimes it is not as fun it could be:

This is not emphasis, because the closing * is preceded by whitespace:
*foo bar *

This is hard for the Oddmuse parser because it works like a state machine and prints immediately when looking at every token. So for Oddmuse, starting at the first * it sees a legal beginning of emphasis and prints <em> without considering whether there is a legal end to this emphasis. Oddmuse will print the closing tag when the paragraph ends. But that’s not what CommonMark wants us to do. And I can’t use a simple positive look-ahead as that will fail in this situation as the closing emphasis is actually within a code element and thus it seems to me that I need to parse and backtrack in order to solve this problem. Gaaaah.

*foo `bar* bar`

– Alex Schroeder 2018-02-03 13:03 UTC

Add Comment

2018-01-03 Gopher Mode

Yeah, I’ve been working on Gopher stuff over the holidays.

  1. a Gopher server wrapper around Oddmuse wiki (and this site is running it, see gopher://alexschroeder.ch)
  2. a proposal of a new item type to write to a Gopher server with examples based on netcat, i.e. nc
  3. improvements to the Emacs Gopher client with support for HTML and the new item type (see this branch on GitHub)

Isn’t that amazing.


Add Comment

2017-12-27 Markdown for Campaign Wiki

I’m experimenting with letting users switch between the default (Wiki Creole) and Markdown on Campaign Wiki. You start a page with “#MARKDOWN” on a line of its own and that switches some stuff around. Most of the text formatting rules still apply – you can still use bbCode, for example. But it switches off Creole and it switches on Markdown.

Here’s an example page, Halberds & Helmets: Treasure.

What do you think? Do you foresee any problems?


Add Comment



Please make sure you contribute only your own work, or work licensed under the GNU Free Documentation License. Note: in order to facilitate peer review and fight vandalism, we will store your IP number for a number of days. See Privacy Policy for more information. See Info for text formatting rules. You can edit the comment page if you need to fix typos. You can subscribe to new comments by email without leaving a comment.

To save this page you must answer this question:

Please say HELLO.