Welcome! :-)

This is both a wiki (a website editable by all) and a blog (an online diary about the stuff Alex Schroeder reads and does). If you’re a friend or relative, you might be interested in reading Life instead of this page. If you’ve come here from an RPG blog, you might want to head over to RPG. There are other similar categories to be found on the SiteMap.

Für Rollenspieler gibt es ebenfalls eine eigene RSP Kategorie.

2019-11-16 Pleroma

OK, so I tried Epicyon and it used a lot of CPU cycles doing not much. Would Pleroma fare any better?

I am ready to give it a try: Installing on Debian Based Distributions.

apt install postgresql postgresql-contrib elixir erlang erlang-dev erlang-tools erlang-parsetools erlang-ssh erlang-xmerl

Well, I was following the instructions until I got to this step:

root@sibirocobombus:/opt/pleroma# sudo -Hu pleroma mix deps.get
Could not find Hex, which is needed to build dependency :phoenix
Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] 
** (UndefinedFunctionError) function :inets.stop/2 is undefined (module :inets is not available)
    :inets.stop(:httpc, :mix)
    (mix) lib/mix/utils.ex:560: Mix.Utils.read_httpc/1
    (mix) lib/mix/utils.ex:501: Mix.Utils.read_path/2
    (mix) lib/mix/local.ex:149: Mix.Local.read_path!/2
    (mix) lib/mix/local.ex:126: Mix.Local.find_matching_versions_from_signed_csv!/2
    (mix) lib/mix/tasks/local.hex.ex:56: Mix.Tasks.Local.Hex.run_install/1
    (mix) lib/mix/dep/loader.ex:168: Mix.Dep.Loader.with_scm_and_app/4
    (mix) lib/mix/dep/loader.ex:121: Mix.Dep.Loader.to_dep/3

This helped:

apt install erlang-inets


I also changed registrations_open to false in config/prod.secret.exs.


Comments on 2019-11-16 Pleroma

And I wrote my first Elixir code with the help of @wim_v12e:

diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex
index a3f8bc945..964209c96 100644
--- a/lib/mix/tasks/pleroma/user.ex
+++ b/lib/mix/tasks/pleroma/user.ex
@@ -442,6 +442,20 @@ defmodule Mix.Tasks.Pleroma.User do
+  def run(["list"]) do
+    start_pleroma()
+    Pleroma.User.Query.build(%{local: true})
+    |> Pleroma.RepoStreamer.chunk_stream(500)
+    |> Stream.each(fn users ->
+      users
+      |> Enum.each(fn user ->
+        shell_info("#{user.nickname} moderator: #{user.info.is_moderator}, admin: #{user.info.is_admin}, locked: #{user.info.locked}, deactivated: #{user.info.deactivated}")
+      end)
+    end)
+    |> Stream.run()
+  end
   defp set_moderator(user, value) do
     info_cng = User.Info.admin_api_update(user.info, %{is_moderator: value})

This allows me to run:

root@sibirocobombus:/opt/pleroma# sudo -Hu pleroma MIX_ENV=prod mix pleroma.user list
Compiling 1 file (.ex)
internal.fetch moderator: false, admin: false, locked: false, deactivated: false
alex moderator: false, admin: true, locked: false, deactivated: false
admin moderator: false, admin: true, locked: false, deactivated: false
kensanata moderator: false, admin: false, locked: false, deactivated: false

– Alex Schroeder 2019-11-17 13:29 UTC

For now I’m happy with Pleroma. Notice how load came back down again after switching from Epicyon to Pleroma and PostgreSQL. I wasn’t running a database before the Pleroma installation.


– Alex Schroeder 2019-11-17 21:11 UTC

Add Comment

2019-11-16 Boomers and Generation-X

Recently, I stumbled upon a thread by @troodon about the phrase OK Boomer (a disparaging reply to baby boomers, individuals born between 1946 and 1964) from the perspective of my generation (Generation X, people born between the mid 1960s and the mid 1980s).

honestly, given the reactions that the phrase “OK, Boomer” have been getting in the media, you’d think packs of teens have been systematically targeting elderly people for brutal street muggings or something. but, no... it’s just a phrase, and a mild one at that. why is it so upsetting?

because it’s not rebellious or confrontational, which are things older people are used to getting from younger people. it’s straight-up dismissive. and it’s not something we, GenX, the first-generation children of the Boomers, ever had the chance to express.

our rebellion was taken away, repackaged, and sold back to us when we were too young to know what it was for or why it could be powerful. we grew up feeling helpless and hopeless, trapped in a world where we had nothing meaningful to say and nothing useful to do because Doom was Nigh – the ozone layer, nuclear war, the Y2K bug, politicians that hated us sending us off to wars for blatant lies. Boomers got to have their Swinging 60s – we grew up under the specter of AIDS. we were isolated from each other, so we never realized that we weren’t alone. and when we were finally able to get our own voice out into the popular culture, we spoke obliquely of isolation, depression, inward-turned knives.

and when we did manage to rebel, it was seen as the usual childish rebellion against our parents. kids these days! it’s a phase, we’ll grow out of it and grow up to be just like the people who raised us.

but the kids these days... they have something magical: they have a voice, and the voice gives them power, and they know it.

their voices let them speak to each other about their world and the problems they see. it lets them look for solutions that aren’t reliant on their parents or grandparents, not even for advice, not even for opinions. and make no mistake, they’ve noticed the decade of fucking “Millennials Ruined [X]” thinkpieces written by annoyed Boomers, the endless, relentless victim-blaming of slapping down the Kids These Days for the crappy situations they have to deal with and that they had nothing to do with creating.

this is Boomers reaping what they’ve sown. because this is Millenials saying “OK, Boomer... you’ve said your piece. we’re aware of your opinion, we’ve heard your advice. now we’re going to do our own thing. and you can keep talking all you want, but we’re doing something. so why don’t you have a nice big cup of sit the fuck down and shut the fuck up for a god damn change.”

it hurts because it’s speaking truth to power. it hurts because Boomers have built a culture that looks to them as the wise ones, the gatekeepers, the elders with power, and the Kids These Days aren’t playing the game right. it’s not disrespectful or confrontational – it’s a swerve, a dodge, taking a pass on the whole packaged cycle of obedience and rebellion.

and that’s why it doesn’t hurt their parents, us GenXers. I have to admit, if somebody said “OK Gloomer” (heeee) to me I’d have to shake my head, laugh a little, and say “yeah, you got me.” we’re used to being disregarded and silenced. we love you, our kids... but we know better than to try and take away your voice. even if we wanted to, we know we can’t. we can give advice and support, and you can take it or leave it as you will. but you’re the ones who are leading the charge to change the world right now. drive us to a brighter, better future, or drive us off a cliff... either way, we’re proud of you.

OK, Millenials and Zoomers. you’ve got this. 💚

I’ve recently felt similarly uplifted by kids these days demonstrating and feeling uplifted by their optimism. When Fridays For Future started, I felt like laughing. Oh, suddenly people are going to take their concerns seriously? Of course not. I remembered when I was a young kid and nobody seemed to really care about smog in inner cities and the trees dying and acid rain. I was used to getting back the reply that the forests are still standing and where was my pollution now? And I looked at them and thought in my heart of hearts: fuck you and fuck your kids and all your descendants for seven generations you idiot. But I never said it.

I also felt that nobody cared about demonstrations. Did Bush stop the war in Iraq when we took to the streets? Of course not. Fools. I had decided for myself that the world was fucked and I didn’t know how to unfuck it and I would certainly not bring kids into this world to serve me when I’m old and have them stare into the abyss that we were digging for them.

It had never occurred to me that maybe it was simply a question of demographics. We were the first generation after the boomers and of course we would never outvote them! @troodon replied to somebody else in the same thread:

Xers never had the numbers to outvote the Boomers, and it felt like we were being bullied all our young adulthood – “stop hitting yourself!” while preventing us from doing anything about it. but now the numbers are on our side, and what we are watching right now is an Old World Order dying out and being replaced with something new. I hope it’ll be better, I truly believe it can and most likely will be better, but it will certainly be different, and that’s beautiful. 😀

Maybe the future will not be as gloomy as I had concluded all those years ago.


Add Comment

2019-11-15 The Century of the Self

I’ve started watching The Century of the Self, Part 1. There are four parts.

I found a copy on YouTube at the time and downloaded it in 2018 after reading a discussion online. [1] It’s also available from the Internet Archive. [2] [3] [4] [5]

A few minutes in: Using propaganda for peace! Renaming propaganda to council on public relations… I’m liking this documentary already!

A bit later, the first experiment: convincing women to smoke in public. WTF this callousness is what creates evil in the world. 🤮

The idea that somebody had to discover a way to turn objects like cigarettes into a way to make a statement (”torches of freedom” and all the cigarette ads ever that followed), and that many other people were willing to come along, and benefit from the manipulation of their fellow humans… The disgust still lingers when people talk about marketing, when they work in marketing.

Did I think my stance against consumerism was a kind of hidden knowledge and nobody else had studied it? Or had the noise drained out all the truth from advertising? When I look at this documentary and hear bankers say we need to change society from a needs culture to a culture of desires, that people must be trained to desire new things before having used up the old, it’s as if somebody had removed my earplugs and said: yo, you’re not alone. We all know this! We’ve been doing it for years.

@technomancy asked me whether it was for a mature audience. Hah, I wouldn’t dare tell an American what to show or what not to show to their kids. The Atlantic is a cultural gulf we all try to ignore. I’m 24 minutes in and I’ve seen pictures of the first world war, but no corpses; I’ve seen women smoke but nobody was naked; there was no cruelty or torture. After all, it was shown on British television. If you’re watching it with kids ten or twelve years old and talk to them about advertising, you’re going to be fine. Also, I have no kids. 😃

This four part series looks like a must-see.


Comments on 2019-11-15 The Century of the Self

Thanks for recommending these! I watched them the other night and thought they were great.

I’ve seen another documentary by Adam Curtis called HyperNormalisation that I liked too, will have to go through his whole filmography.

– rjt 2019-11-20 11:09 UTC

You are welcome! 🙂

On Mastodon, I also saw the following recommendations:

@clew said: “There’s a book called No One Makes You Shop at Wal-Mart that’s good on that. Tom Slee. Not especially about Walmart, as it happens.”

@dredmorbius also recommended HyperNormalisation, and The Loving Trap.

@ludibrium recommended Noam Chomsky - Manufacturing consent (1992).

@krozruch said: “I’ve been going through all of Adam Curtis’ documentaries recently. The Mayfair Set most recently - which is more relevant to Brexit than I may have realised. All of them have something to say. I first watched a handful of them (The Power of Nightmares, The Century of the Self, and All Watched Over by Machines of Loving Grace) as they came out and talked about them a lot. I’m working on reviews of a few of them now. Great stuff!”

So I guess you’re not alone.

– Alex Schroeder 2019-11-20 17:33 UTC

Add Comment

2019-11-11 One Page Dungeon Generator

@Provinto recently linked a new generator by the person that did the fantasy city generator:

I just found out about watabou’s new itch.io generator: One Page Dungeon generator (which is maybe just a one-level dungeon generator). Very pretty maps, too.


Add Comment

2019-11-09 Upgrading Debian from Stretch to Buster

I did it! I upgrade the server. No restart required. I was a bit intimidated by the extensive documentation. But I was fine.

First, I improved my backup. I currently use the following:


# Using sudo rsync --archive to preserve ownership.
# Using --fake-super to avoid changes to groups and owners

echo Backing up Sibirocobombus
echo home directory
rsync --archive --fake-super --verbose --compress --delete --delete-excluded \
      --itemize-changes \
      --exclude '/home/alex/logs' \
      --exclude '/home/alex/alexschroeder.ch/share' \
      --exclude '/home/alex/planet/osr/' \
      --exclude '/home/alex/planet/indie/' \
      --exclude '.cpan/build' \
      --exclude '.cpan/sources' \
      --exclude '.cpanplus' \
      --exclude '.cpanm' \
      --exclude '.cache' \
      --exclude '.Trash' \
      --exclude '.local/share/Trash' \
      --exclude 'temp/' \
      --exclude 'pids/' \
      --exclude 'visitors.log' \
      --exclude 'referer/' \
      --exclude '.git/' \
      --rsh="ssh -p 882" \
      root@alexschroeder.ch:/home \

# https://www.debian.org/releases/buster/amd64/release-notes/ch-upgrading.en.html#data-backup
echo etc directory
rsync --archive --fake-super --verbose --compress --delete --delete-excluded \
      --itemize-changes \
      --rsh="ssh -p 882" \
      root@alexschroeder.ch:/etc \
      root@alexschroeder.ch:/var/lib/dpkg \
      root@alexschroeder.ch:/var/lib/apt/extended_states \
      root@alexschroeder.ch:/var/lib/dehydrated \
      root@alexschroeder.ch:/usr/lib/cgit/filters \

I also installed and ran apt-forktracer:

apt install apt-forktracer
apt-forktracer | sort > packages-not-from-debian

I also checked my system using dpkg --audit.

I ran everything inside script -t 2>~/upgrade-busterstep.time -a ~/upgrade-busterstep.script.

I was very afraid!

But eventually I just changed my /etc/apt/sources.list to the following:

deb http://deb.debian.org/debian buster main non-free contrib
deb http://security.debian.org/debian-security buster/updates main contrib non-free

# deb  http://ftp.debian.org/debian stretch main non-free contrib
# deb-src  http://ftp.debian.org/debian stretch main non-free contrib

# deb  http://ftp.debian.org/debian stretch-updates main non-free contrib
# deb-src  http://ftp.debian.org/debian stretch-updates main non-free contrib

# deb http://security.debian.org/ stretch/updates main non-free contrib
# deb-src http://security.debian.org/ stretch/updates main non-free contrib

I guess I should think about updates and security? Or perhaps they aren’t used anymore? I have no idea. I’ll look at this some other time.

Finally I ran the upgrade itself:

apt update
apt upgrade
apt dist-upgrade

I had two changes to system config files:

  1. in /etc/logrotate.conf I changed weeklydaily (keeping 4 days worth of logs instead of 4 weeks)
  2. in /etc/ssh/sshd_config I merged my changes with what upstream had provided

I am amazed to see that the server is still up. It didn’t even reboot. Let me sing the praise of Debian and all the things it includes and all the volunteers and maintainers and testers—thank you all. ❤️

I think I’m going to be fine. 😃

I noticed that I had to reinstall all my pip3 stuff.

For the Mastodon bots:

pip3 install Mastodon.py cairosvg html2text

For Epicyon:

pip3 install requests commentjson beautifulsoup4 pycryptodome

My monitoring also broke down.

Monit stopped monitoring a bunch of stuff because the checksums failed.

Munin isn’t running at all...

Well, time to look at this tomorrow!


Comments on 2019-11-09 Upgrading Debian from Stretch to Buster

Cleaning up non-default config files... I installed debsums and use debsums -ce to find config files that I have changed.

Then I use a little script I got from StackExchange to find the diff.


# Usage: debdiffconf.sh FILE
# Produce on stdout diff of FILE against the first installed Debian package
# found that provides it.
# Returns the exit code of diff if everything worked, 3 or 4 otherwise.

command -v apt-get >/dev/null 2>&1 || {
  echo "apt-get not found, this is probably not a Debian system. Aborting." >&2;
  exit 4; }
command -v apt-file >/dev/null 2>&1 || {
  echo "Please install apt-file: sudo apt-get install apt-file. Aborting." >&2;
  exit 4; }

FILE=$(readlink -f "$1")
while read PACKAGE
  # verify from first installed package
  if dpkg-query -W --showformat='${Status}\n' | grep installed > /dev/null
    DIR=$(mktemp -d)
    cd "$DIR"
    echo "Trying $PACKAGE..." >&2
    apt-get download "$PACKAGE" >&2
    # downloaded archive is the only file present...
    mkdir contents
    # extract entire archive
    dpkg-deb -x "$ARCHIVE" contents/ >&2
    if [ -f "contents$FILE" ]
      # package contained required file
      diff "contents$FILE" "$FILE"
      # cleanup
      rm -Rf "$DIR"
      # exit entire script as this is the main shell
      # with the return code from diff
      exit $RET
      # cleanup
      rm -Rf "$DIR"
done < <(apt-file -l search "$FILE")
# if we are here, it means we have found no suitable package
echo "Could not find original package for $FILE" >&2
exit 3

And if I think the changes I made could be reverted, I run patch --reverse $FILE on the file and paste the diff seen above to revert it.

– Alex Schroeder 2019-11-10 11:38 UTC

The problem I had seems to due to changes I made to the Apache configuration. Apparently I created a special account with password to allow access to Munin from remote systems. This makes sense since I’m running Munin on the server...

*** apache24.conf~	2019-05-16 01:21:08.000000000 +0200
--- apache24.conf	2019-11-10 12:47:00.533056622 +0100
*** 14,25 ****
  Alias /munin/static/ /var/cache/munin/www/static/
  <Directory /var/cache/munin/www>
!     Require local
      Options None
  <Directory /usr/lib/munin/cgi>
!     Require local
      <IfModule mod_fcgid.c>
          SetHandler fcgid-script
--- 14,36 ----
  Alias /munin/static/ /var/cache/munin/www/static/
  <Directory /var/cache/munin/www>
!     Order allow,deny
!     Allow from all
      Options None
+     AuthUserFile /etc/munin/munin-htpasswd
+     AuthName "Munin"
+     AuthType Basic
+     require valid-user
  <Directory /usr/lib/munin/cgi>
!     Order allow,deny
!     Allow from all
!     Options None
!     AuthUserFile /etc/munin/munin-htpasswd
!     AuthName "Munin"
!     AuthType Basic
!     require valid-user
      <IfModule mod_fcgid.c>
          SetHandler fcgid-script

– Alex Schroeder 2019-11-10 11:51 UTC

Add Comment

2019-11-09 Epicyon needs Python 3.6 which needs a Debian upgrade

I’ve tried to install Epicyon on my server but I’m running into a Python problem. I think I have everything set up correctly (my notes below) but I’m getting a syntax error in webfinger.py:

python3 webfinger.py 
  File "webfinger.py", line 81
    return f"data:application/magic-public-key,RSA.{mod}.{pubexp}"
SyntaxError: invalid syntax

I’m using Debian stable (9.11) on my server which means I have Python 3.5.3 installed. f-strings joined Python in 3.6, apparently.

So... Upgrade my server? Make Epicyon work with Python 3.5? Postpone the entire thing?

I don’t know...


I was more or less following the official installation instructions.

Some decisions:

  • I’m not using certbot because I am using dehydrated.
  • I don’t want to install in /etc/epicyon. Let me use /home/epicyon instead.

Install the code as root:

apt-get -y install tor python3-pip python3-socks imagemagick python3-numpy python3-setuptools python3-crypto python3-dateutil python3-pil.imagetk
pip3 install commentjson beautifulsoup4 pycryptodome
adduser --system --home=/home/epicyon --group epicyon
cd /home
git clone https://gitlab.com/bashrc2/epicyon
cd epicyon
./theme purple
chown -R epicyon:epicyon /home/epicyon

Create the demon by creating the file /etc/systemd/system/epicyon.service as follows:


ExecStart=/usr/bin/python3 /home/epicyon/epicyon.py --port 443 --proxy 7156 --domain fedi.alexschroeder.ch --registration open --debug


Activate the demon:

systemctl enable epicyon
systemctl start epicyon

Check how it is doing:

journalctl -u epicyon

On my first attempt I had forgotten to install the Python modules using pip3 and saw the error messages in the journal alerting me to the fact.

As for the website, I’m using Apache. I’m on my own, now. I edited /etc/apache2/sites-enabled/100-alexschroeder.ch.conf because that’s where my site is configured and added the following:

  • a redirect from HTTP on port 80 to HTTPS on port 443
  • the right server name
  • SSL files generated by dehydrated
  • proxying to port 7156

I’m basically trusting my remaining SSL and security settings.

Here’s what I added to the site configuration:

<VirtualHost *:80>
    ServerName fedi.alexschroeder.ch
    Redirect permanent / https://fedi.alexschroeder.ch/
<VirtualHost *:443>
    ServerName fedi.alexschroeder.ch
    SSLEngine on
    SSLCertificateFile      /var/lib/dehydrated/certs/alexschroeder.ch/cert.pem
    SSLCertificateKeyFile   /var/lib/dehydrated/certs/alexschroeder.ch/privkey.pem
    SSLCertificateChainFile /var/lib/dehydrated/certs/alexschroeder.ch/chain.pem
    SSLVerifyClient None
    ProxyPass /             http://alexschroeder.ch:7156/

Next I had to tell my domain name service provider (Gandi) about the new subdomain. In the DNS zone file, I had to add a line for IPv4 and IPv6:

fedi 10800 IN A
fedi 10800 IN AAAA 2a02:418:6a04:178:209:50:237:1

Then I had to tell dehydrated about the new subdomain by editing /etc/dehydrated/domains.txt and changing the line for my site to:

alexschroeder.ch www.alexschroeder.ch fedi.alexschroeder.ch

With that, I was ready to regenerate the certificates (still doing everything as root). The version of dehydrated in Debian isn’t working for me so I have to use a copy of the master branch I checked out.

/home/alex/src/dehydrated/dehydrated -c

And now I should be ready!

  • the domain name server points to the right machine
  • on that machine, the web server knows how to redirect from HTTP to HTTPS for this domain
  • the web server also knows how to proxy HTTPS to port 7156 locally
  • the application is running and listening on the port

Or is it? I’m getting an error! journalctl -u epicyon shows the following:

Nov 09 14:56:01 sibirocobombus python3[27300]: Traceback (most recent call last):
Nov 09 14:56:01 sibirocobombus python3[27300]:   File "/home/epicyon/epicyon.py", line 9, in <module>
Nov 09 14:56:01 sibirocobombus python3[27300]:     from person import createPerson
Nov 09 14:56:01 sibirocobombus python3[27300]:   File "/home/epicyon/person.py", line 19, in <module>
Nov 09 14:56:01 sibirocobombus python3[27300]:     from webfinger import createWebfingerEndpoint
Nov 09 14:56:01 sibirocobombus python3[27300]:   File "/home/epicyon/webfinger.py", line 81
Nov 09 14:56:01 sibirocobombus python3[27300]:     return f"data:application/magic-public-key,RSA.{mod}.{pubexp}"
Nov 09 14:56:01 sibirocobombus python3[27300]:                                                                  ^
Nov 09 14:56:01 sibirocobombus python3[27300]: SyntaxError: invalid syntax


Comments on 2019-11-09 Epicyon needs Python 3.6 which needs a Debian upgrade

I decided to stop Epicyon for now. It was basically using up all the CPU resources I had granted it via systemd. With no actual activity, I find that unacceptable.

Load goes up

Sometime between November 10 and 11 I managed to get it up and running and load goes up, and stays up.

– Alex Schroeder 2019-11-14 21:30 UTC

A lot of back and forth on this issue. Increase the CPU quota? Work on debugging this? What’s the problem?

Or should I just try Pleroma instead?

– Alex Schroeder 2019-11-16 22:09

I think I’ll give Pleroma a try...

systemctl stop epicyon
systemctl disable epicyon
apt remove tor python3-socks python3-numpy python3-setuptools \
  python3-crypto python3-dateutil python3-pil.imagetk

– Alex Schroeder 2019-11-17 11:09

Add Comment

2019-11-08 Paint Monsters Challenge

I just read A Blogging Challenge: MSpaint Monster Manual by Tristan Tanner on The Bogeyman’s Cave. The challenge is to draw a monster (or more than one) using MSpaint, a very simple paint program for Windows but I’m guessing any tool would work. The important part to me is that this is not the result of years of training and a polished masterpiece but a simple thing that any of us could have done, like running a game or creating a character or writing a session report or drawing a map.


Add Comment

2019-11-08 Mastodon Introduction

Recently a big wave of Twitter users from India joined Mastodon. This page collects some of the posts I made, hoping to do my part in welcoming them to the Fediverse.

For some context: Twitter in India: Why was rival Mastodon trending? It all began with @sanjayuvacha getting suspended from Twitter because he posted the famous picture of August Landmesser.

This is how it started

Wow if you look at the profile of @Deepsealioness you can see the Indian influx as it unfolds. Welcome, welcome! 🥳


If you’re new to Mastodon, write a post and tag it #introduction. Add some more hashtags indicating your interest and post it. Then got to the context menu and pin it to your profile. Click on the hashtags and find other people, new people, welcome them and spread the news. In the beginning, hashtags are an important way of finding people to connect to.

User Interface Quirks

Here’s another Mastodon quick help toot because it took me a while to understand the user interface: if you click on a toot, you will see all the ancestors (the chain that leads to the one you are looking at) and all the descendants (all the replies and their replies in turn). But in order to see the whole conversation, you now need to scroll up to the top and click the first (!) toot of the conversation: you’ll see no new ancestors but ALL the replies.

Image 1 for 2017-01-05 Mermaid

“Verified” Accounts

If you want a cool emoji next to your name, just put it into the name field. You can be 💯☣️❤️⛺️🏔🥇🥋☀️🐥🦁 or whatever else you want. You can even be verified. ✅ But don’t put too many emoji in your name because screen readers will read every single one of them and that gets very annoying very fast, I presume. Mastodon also allows every admin of an instance to have custom emoji that can be seen on other instances. It’s pretty cool. Not all the apps support entering them, though. 😅


If you’re on Mastodon with a single persona, talking about some far out topics can feel odd. People solve this by creating accounts on other instances. I have an account for tabletop roleplaying games on the appropriately named instance tabletop.social. There are other special interest instances! Board games, free software, LGBTQI, and many more. Most Mastodon clients make it pretty easy to switch between instances. Thus, the tradition of alts continues on the Fediverse. See you elsewhere. 🐣


Mastodon Groups have been implemented by third parties using auto-boosting accounts. Here is one example: search for @india@gup.pe (you must type their username into the search box: at India at gup.pe!) and follow them. The gulp.pe server creates the account when you search for it. If you mention it, it will boost your message, and thus everybody else following them will get their message.

If you are interested in a much longer blog post, see 2019-09-26 Groups on Mastodon.

I guess now that I created the India account in gup.pe people no longer need to search for it, they can just follow the link? Even better!

Has it been well received? I don’t know. All I can say is that I haven’t seen much use of it. But it works for everybody, irrespective of clients, using standard activities like following and boosting. 😀

I know is that the Russian speaking community has a bot that does that for them and it seems very active: @rf.

See Also


Add Comment

2019-11-07 Epicyon

Today I stumbled upon Epicyon:

Epicyon is an AGPL licensed ActivityPub protocol compliant federated social network server suitable for hosting a small number of accounts on low power systems requiring minimal maintenance, such as single board computers. It’s the ActivityPub equivalent of an email server, storing posts as human readable JSON on file, rather than in a database. It also uses only a small amount of RAM.

This is right up my alley. No weird Ruby code like Mastodon. No new stuff like Elixir. No database! I work with databases all day long and that’s why my wiki also doesn’t use a database.

Yay! I might try this myself.

Continued: 2019-11-09 Epicyon needs Python 3.6 which needs a Debian upgrade.


Comments on 2019-11-07 Epicyon

Now that I have it running, I noticed:

  • requests is a dependency (should fix docs)
  • using ö in the bio resulted in an encoding error
  • images can only be PNG files, perhaps?

– Alex Schroeder 2019-11-09 22:27 UTC

I edited /etc/systemd/system/epicyon.service to set --registration to closed and reloaded it all by running systemctl daemon-reload. I think the subsequent systemctl restart epicyon wasn’t necessary.

– Alex Schroeder 2019-11-10 12:34 UTC

Well, I’ve added some issues. And I’m still struggling with remote following.

– Alex Schroeder 2019-11-10 21:31 UTC

Another aspect I dislike is that basically whatever CPU Quota you give Epicyon, that’s what it takes. What’s it doing? Somehow I was expecting it to not do anything if other instances didn’t contact it.

– Alex Schroeder 2019-11-12 21:13 UTC

Add Comment

2019-11-02 Whirlwind Attacks

Jeff Rients wrote about all weapons doing d6 damage, saying that he didn’t use the rule. Well, I do. What’s it like, at the table?

I haven’t noticed any drawback at all to my game. Only two-handed weapons needed a change as in my game shields can be sacrificed to annul one hit (after the seeing the damage done), making them very valuable.


  • battle axes can be used to break through doors
  • pole-arms allow you to attack from the second rank
  • two-handed swords allow you to do “whirlwind” attacks: make one roll and everybody who is in melee with you gets attacked by the same roll

The Wikipedia article on the Zweihänder has the following fragment:

Frisian hero Pier Gerlofs Donia is reputed to have wielded a Zweihänder with such skill, strength and efficiency that he managed to behead several people with it in a single blow.

And this is the Battle of Kappel, showing soldiers wielding two-handed swords against pikemen. Yikes!

By Johannes Stumpf, Hans Asper - Chronik des Johannes Stumpf, 1548. Scanned from Schwabe & Co.: Geschichte der Schweiz und der Schweizer, Schwabe & Co 1986/2004. ISBN 3-796-52067-7., Public Domain


Comments on 2019-11-02 Whirlwind Attacks

I prefer this approach. I played Pathfinder Adventurer Card Game, where you are constantly trying to improve your inventory of weapons - it was fun, but too videogamey. I prefer the weapons to be thematic. “You have my sword... And you have my bow. ... And my axe.”

I did introduce an intelligent sword (charisma 16, gets in charisma contests when what it wants - the PC to take a leadership role - differs from the PC) and the players were disappointed it didn’t offer some unusual attack or damage. So there are drawbacks.

J. Alan Henning 2019-11-02 16:21 UTC

On the other hand, if all swords do 1d6 then a +2 or a +3 already sounds more impressive. 🙂

– Alex Schroeder 2019-11-02 16:41 UTC

Regarding the attacking pikemen with a 2-handed sword... I’d always understood that was the point of the Zweihänder. They didn’t attack the guys with the pikes but aimed to chop off the head of weapon and drive the long staff to the side so others could move in past the pokey parts. Must have been some brave fellows.

– Ruprecht 2019-11-05 15:21 UTC

Yeah. But they also got double pay. And as I understand it, they were not in the first rank. They waited in the second rank behind shield bearers and other pikemen for crush and then they moved forward. At least that’s what one Wikipedia page says even though the picture shows something else. I know nothing…

– Alex Schroeder 2019-11-05 17:33 UTC

Does seem like using the shield guys would be better than standing out in no mans land waiting for every pikeman to poke you.

– Ruprecht 2019-11-05 19:28 UTC

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.

Referrers: d4 Caltrops: hex-describe Alex Schroeder Backup Blog Diary Diary