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.

2017-02-22 Moderation

Anil Dash: If Your Website's full of Assholes, it's your fault. (2011)

Robert Niles: If you can't manage comments well, don't offer comments at all. Also: “If the author of an article isn’t willing or able to participate in the discussion about that article, no opportunity for discussion should be offered on the site.” (2010)


Add Comment

2017-02-22 Facebook

Encouraging individual sovereignty and a healthy commons: «It is not the job of a corporation to “develop the social infrastructure for community” as Mark wants to do. Social infrastructure must belong to the commons, not to giant monopolistic corporations like Facebook. The reason we find ourselves in this mess with ubiquitous surveillance, filter bubbles, and fake news (propaganda) is precisely due to the utter and complete destruction of the public sphere by an oligopoly of private infrastructure that poses as public space. […] [T]he sum total of our various aspects as contained within our biological beings as well as the myriad of technologies that we use to extend our biological abilities. Once we understand this, it follows that we must extend the protections of the self beyond our biological borders to encompass those technologies by which we extend our selves.»


Add Comment

2017-02-20 Turning Undead

My games no longer have any clerics in them. But back when I had them, they turned undead. How exactly, asked Brett Eliot on Google+.

I ruled that LOS is important. I imagine the holy symbol shining some sort of holy light which hurts the undead. It’s that light which disintegrates them, too. Thus, distance is not a problem, in theory. But the undead can always take cover and so it depends. In a flat desert the army of undead will appear over the horizon and immediately freeze when they see the lone cleric, miles away, turning them. And slowly, in the milky twilight his holy light one zombie after another starts to melt, disintegrate. Do they rush forward, hoping to reach the cleric before all being destroyed, or do they build man shields to protect them, or do they take cover and wait for another day? Clearly, that explains why the undead prefer to exist underground. Less exposure to random holy photons. :)


Add Comment

2017-02-20 Dungeon Mapping

Noisms recentlz wrote Elementary Principles of Dungeon Drawing and his first point is this: “Snazzy weird shapes and arrangements of rooms look good on paper but in my experience are really hard to explain at the table without ending up with the DM doing lots of drawing, which defeats the purpose of having players do the mapping.”

The longer I run Castle of the Mad Archmage, the more I agree with this assessment.

If I can’t communicate it at the table in a reasonable amount of time, it’s a waste of time.

Check out levels 3 to 5 of Castle of Mad Archmage for an example of what I’m talking about. This is the absolute limit of what I’m willing to communicate to my players.

I get questions by the mapper because they want to get it right and everybody just zones out after “The one in the north western face heads westerly…” it’s not a question of difficulty in describing it. It’s a question of time taken to describe it before the game breaks down.

One could argue about verisimilitude, or how the referee should be drawing maps, or I could just simplify all the maps. After all, it’s a game for all of us to enjoy at the table.

Generally speaking though, I’ve found myself drifting towards node-based dungeon maps. The question of mapping now has a simple answer: draw a beautiful map to represent the nodes and entertain the referee. That’s it.

Back in 2010 I wrote about quality dungeons. Here are some of the points I made regarding the map:

  • Good looking maps. A good looking map appeals to the referee and says “Pick me! Pick me!” Hard to say what this is: an interesting density?
  • Notes on the map itself make it easier to get an overview of the place.
  • Multiple entrances for players to choose from.
  • Multiple exits for referees to append to.
  • A map that suggests multiple goals. Rescue prisoner here, kill boss there, find hidden treasure over there. That adds replayability. That is, the map must have visually distinct areas: prison cells, water ways, treasure chests, large caves, small caves, throne rooms.)
  • A map key that is easy to skim by using bold keywords for monsters and other stuff of prime importance to players.
  • A setup that can be exploited in combat by tactically minded players. A bottleneck, a ledge, a bridge, a fortified position, a sally port.
  • An opportunity to spy on enemies for the stealthily minded players. A murder hole, a grate, a tiny tunnel, a scrying ball.

Recent examples from my own games trying to strike a balance between these points and my free time:

Crown of Neptune Garaskis Monastery Cloud Giants vs. Djinn


Comments on 2017-02-20 Dungeon Mapping

You have a ZERO WIDTH NO-BREAK SPACE on the end of the “quality dungeons” link that makes it point to a missing page (that the Wiki offers to create for you).

– Derek 2017-02-23 05:22 UTC

Thanks! This is not the first time it happened. I’m not sure who appends these – I suspect it’s something about the G+ app on my phone.

– AlexSchroeder 2017-02-23 05:45 UTC

Add Comment

2017-02-17 Leisure

+David McGrogan writes on his blog about creativity requiring time off to be creative because you need to balance both free roaming thoughts induced by boredom with focus and attention induced by discipline. If you’re constantly distracted at work by meetings, or at home by social media, it’s hard to get anything done.

Luckily, I only work 60% so I get to have Fridays off and a four month break every year. People sometimes ask me whether this isn’t boring to the extreme. To which I say that most people simply adapt to their current way of life and that’s great. It allows us to be happy under a wide range of circumstances. It also means that we’re never bored, as in spending idle hours contemplating life, the kind of leisure the rich Greek philosophers must have felt without the need to work, when all you had to do was hang out, drink, talk, and some calisthenics to defend your city’s interests on the battlefield every now and then. Anyway, leisure and occasional bouts of boredom are essential, I think. As we’re busy at work and stressed out by family, squeezing in a few hours of playing games with friends, I think it’s easy to forget that something atrophies at the same time. That very source of novelty.


Add Comment

2017-02-15 Load

What the hell happened around 18:00 yesterday?

Processes going up Threads making a big jump Munin taking minutes to run CPU 100% Load over 30

Was it an unusual amount of requests? I don’t think so:

alex@sibirocobombus:~$ sudo cat /var/log/apache2/access.log.1 | bin/time-grouping
      15/Feb/2017:06        426     1%
      15/Feb/2017:05        949     3%
      15/Feb/2017:04       1050     3%
      15/Feb/2017:03       1320     4%
      15/Feb/2017:02       1292     4%
      15/Feb/2017:01       1272     4%
      15/Feb/2017:00       1253     4%
      14/Feb/2017:23       1205     4%
      14/Feb/2017:22       1181     4%
      14/Feb/2017:21       1195     4%
      14/Feb/2017:20       1161     4%
      14/Feb/2017:19       1015     3%
      14/Feb/2017:18        965     3%
      14/Feb/2017:17       1121     4%
      14/Feb/2017:16       1129     4%
      14/Feb/2017:15       1022     3%
      14/Feb/2017:14        852     3%
      14/Feb/2017:13       1085     4%
      14/Feb/2017:12       1094     4%
      14/Feb/2017:11       1154     4%
      14/Feb/2017:10       1115     4%
      14/Feb/2017:09       1198     4%
      14/Feb/2017:08       1408     5%
      14/Feb/2017:07        973     3%
      14/Feb/2017:06        531     1%

Nothing unusual in the Toadfarm logs.

I noticed something weird in my Apache logs, though:

alex@sibirocobombus:~$ sudo cat /var/log/apache2/access.log.1 | bin/leech-detector | head
           IP Number       hits bandw. hits% interv. status code distrib.
        1590     4K   5%   54.3s  200 (99%), 301 (0%), 404 (0%)       1255     2K   4%   68.7s  301 (33%), 200 (33%), 302 (32%), 503 (0%)

Who is and what are they doing?

communitywiki.org:80 - - [15/Feb/2017:06:38:14 +0100] "GET /de?action=rss;rcidonly=OpenWLAN HTTP/1.1" 301 487 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"
communitywiki.org:443 - - [15/Feb/2017:06:38:14 +0100] "GET /de?action=rss;rcidonly=OpenWLAN HTTP/1.1" 302 4026 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"
communitywiki.org:443 - - [15/Feb/2017:06:38:14 +0100] "GET /wiki?action=rss;rcidonly=OpenWLAN HTTP/1.1" 200 4687 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"
communitywiki.org:80 - - [15/Feb/2017:06:39:45 +0100] "GET /en?action=rss;rcidonly=ConservationOfRationality HTTP/1.1" 301 521 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"
communitywiki.org:443 - - [15/Feb/2017:06:39:45 +0100] "GET /en?action=rss;rcidonly=ConservationOfRationality HTTP/1.1" 302 4060 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"
communitywiki.org:443 - - [15/Feb/2017:06:39:45 +0100] "GET /wiki?action=rss;rcidonly=ConservationOfRationality HTTP/1.1" 200 4698 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"

What we see here is that somebody is requesting various pages via HTTP (port 80) and getting redirected permanently (status 301) to HTTPS (port 443) and getting redirected temporarily (status 302) to a different URL (/wiki instead of /en). We also see that they are getting the URL in various languages.

Just to make sure, I added the following to my .htaccess file:

# idiots downloading every single RSS file
order allow,deny
deny from
allow from all

And now they’re getting something else:

communitywiki.org:80 - - [15/Feb/2017:08:51:57 +0100] "GET /cw-fr?action=rss;rcidonly=LackOfReworking HTTP/1.1" 301 507 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"
communitywiki.org:443 - - [15/Feb/2017:08:51:57 +0100] "GET /cw-fr?action=rss;rcidonly=LackOfReworking HTTP/1.1" 403 3930 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36"

Their HTTP request gets redirected to HTTPS and then they’re getting an access denied (status 403).

But wait, are they perhaps the cause for all these problems?

alex@sibirocobombus:~$ sudo cat /var/log/apache2/access.log.1 | grep | bin/time-grouping
      15/Feb/2017:06         24     1%
      15/Feb/2017:05         60     4%
      15/Feb/2017:04         54     4%
      15/Feb/2017:03         44     3%
      15/Feb/2017:02         48     3%
      15/Feb/2017:01         48     3%
      15/Feb/2017:00         57     4%
      14/Feb/2017:23         78     6%
      14/Feb/2017:22         38     3%
      14/Feb/2017:21         41     3%
      14/Feb/2017:20         45     3%
      14/Feb/2017:19         42     3%
      14/Feb/2017:18         33     2%
      14/Feb/2017:17         65     5%
      14/Feb/2017:16         46     3%
      14/Feb/2017:15         69     5%
      14/Feb/2017:14         24     1%
      14/Feb/2017:13         45     3%
      14/Feb/2017:12         68     5%
      14/Feb/2017:11         62     4%
      14/Feb/2017:10         69     5%
      14/Feb/2017:09         63     5%
      14/Feb/2017:08         45     3%
      14/Feb/2017:07         48     3%
      14/Feb/2017:06         39     3%

Nope, they didn’t start yesterday at around 18:00.

Oh well. :(

Restarted Toadfarm. Manually killed all the farm processes I found via top. Restarted Apache for good measure. I think we’re good.

I also checked /var/log/syslog.1 and found nothing surprising around 18:00. Spamd is checking mails, Munin is running, more spam filtering, and that basically covers the time from 17:00 to 19:00.

Well, things are still not good.

top - 10:39:14 up 29 days, 23:18,  1 user,  load average: 5.26, 5.60, 5.69
Tasks:  66 total,   6 running,  57 sleeping,   0 stopped,   3 zombie
%Cpu(s): 98.7 us,  0.7 sy,  0.0 ni,  0.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   4194304 total,  2157836 used,  2036468 free,        0 buffers
KiB Swap:  1048576 total,   480444 used,   568132 free.  1456564 cached Mem

18835 alex      20   0  217104  71452   2284 R  19.0  1.7  20:59.77 /home/alex/farm
17130 alex      20   0  216768  71140   2268 R  18.6  1.7  37:40.49 /home/alex/farm
18286 alex      20   0  217932  72364   2308 R  18.6  1.7  23:40.29 /home/alex/farm
19937 alex      20   0  218128  72652   2332 R  18.6  1.7  16:56.54 /home/alex/farm
22862 alex      20   0  218780  73208   2332 R  18.6  1.7   7:35.41 /home/alex/farm
16345 alex      20   0  209860  68980   3432 S   1.7  1.6   0:52.01 /home/alex/farm
16344 alex      20   0  212272  69720   2180 S   0.7  1.7   0:52.34 /home/alex/farm
16346 alex      20   0  208112  65936   2012 S   0.7  1.6   0:55.12 /home/alex/farm
16347 alex      20   0  210904  68176   2120 S   0.7  1.6   0:52.76 /home/alex/farm

And they keep coming back. I’m slowly taking sites offline to where the trouble lies.


Comments on 2017-02-15 Load

OK, I started disabling sites in my Toadfarm configuration until I only had two sites left: campaignwiki.org and oddmuse.org. A few hours I checked back and I had ten farm processes running using 10% CPU each. Still a problem!

Then I disabled campaignwiki.org and tried calling it from the command line. Mojolicious allows me to do that, just like the CGI module does, too. It turns out that I can run a few requests, but when I load RecentChanges, I get a timeout.

Here’s me getting a regular page:

alex@sibirocobombus:~/farm$ perl campaignwiki.pl get '/?action=browse&id=Hauptseite'
[Wed Feb 15 22:39:27 2017] [debug] GET "/"
[Wed Feb 15 22:39:27 2017] [debug] Routing to a callback
[Wed Feb 15 22:39:27 2017] [debug] [CGI:CODE(0x1506388):11783] START /home/alex/farm/wiki.pl
[Wed Feb 15 22:39:28 2017] [debug] 200 OK (0.32674s, 3.061/s)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Here’s me getting RecentChanges:

alex@sibirocobombus:~/farm$ perl campaignwiki.pl get '/RecentChanges'
[Wed Feb 15 22:39:42 2017] [debug] GET "/RecentChanges"
[Wed Feb 15 22:39:42 2017] [debug] Routing to a callback
[Wed Feb 15 22:39:43 2017] [debug] [CGI:CODE(0x1552388):11786] START /home/alex/farm/wiki.pl
[Wed Feb 15 22:39:43 2017] [debug] 200 OK (0.350602s, 2.852/s)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<div class="rc"><hr />[Wed Feb 15 22:39:58 2017] [debug] Inactivity timeout
[Wed Feb 15 22:40:03 2017] campaignwiki.pl: Problem loading URL "": Inactivity timeout

When I check top, I see a perl process running eating all available CPU for every time I try to view RecentChanges and got an inactivity timeout. That’s suspiciously like the problem I’ve been experiencing.

So here’s the current status: All the web apps are back online except for campaignwiki.org.

– Alex Schroeder 2017-02-15 21:50 UTC

I added some debug warning messages and discovered that the infinite loop was somehow caused by StripRollbacks for the Gridmapper namespace. I looked at the rc.log file and found a single rollback entry. I removed the entire section and everything seems to work. So campaignwiki.org is up again and the bug remains a mystery.

It took me a while to get load back down

– Alex Schroeder 2017-02-15 22:16 UTC

Add Comment

2017-02-14 Handwritten Digits for Download

If you’re interested in “deep learning” or neural networks and the identification of handwriting, sooner or later you will run into the MNIST database. (“The MNIST database of handwritten digits, available from this page, has a training set of 60,000 examples, and a test set of 10,000 examples. It is a subset of a larger set available from NIST. The digits have been size-normalized and centered in a fixed-size image.”)

Strangely enough, Americans don’t write their numbers like the people around here do. If I want to train a neural network to identify digits, I’m forced to train and test it on data that is subtly different from what I’d expect from local (Swiss) data.

Unless I collect my own data, that is. Some coworkers and I have started doing just that.

How to help:

  1. print the random numbers
  2. print the empty page
  3. copy the numbers onto the empty sheet
  4. scan it
  5. mail it → kensanata@gmail.com


Every page gets us 600 digits. Our goal is 10,000 digits. We’re already half way there!


Add Comment

2017-02-13 To Linear B

To Linear B:

  • “man loves woman” → “𐂀 𐀫𐀸 𐂁”
  • “dis is a tekusutu fo linear be” → “𐀇 𐀂 𐀀 𐀳𐀓𐀱𐀶 𐀡 𐀪𐀚𐀀 𐀤”

Because I added a bunch of whole words form the Wikipedia page, as well as some more rules (such as v is w and -s disappearing).


Add Comment

2017-02-12 Grottos

Gridmapper now does caves (“grottos”). Click the image to get transported into dungeon mapping heavy.



Comments on 2017-02-12 Grottos

And I’ve prepared the ground for end-to-end tests using Nightwatch.js.

– Alex Schroeder 2017-02-12 12:45 UTC

Add Comment

2017-02-07 Load

I’m usually quite happy with our old MacBook Pro. We bought it many years ago and it has served us well. I don’t know when it started to downhill. After some upgrade or other, I guess? Starting up takes forever. It’s not anything in particular that takes forever. It’s just that everything is slow.

Everything is slow. Just now, maybe half an hour ago, the laptop was sleeping on the table and I wanted to get started with some web development. I opened it up and noticed that Firefox was not loading the pages I had open. I just got the spinning rainbow. Killed Firefox, started Emacs, started Safari, and then I noticed that it wasn’t just Firefox that wasn’t actually doing anything. Everything is slow.

Eventually I managed to open a terminal and run top. Here’s what it says. I’ve been watching it all this time and apparently the CPU is idle around 80% of the time and yet the load was higher than 7. No wonder it’s slow. But how is that possible?

Processes: 261 total, 2 running, 18 stuck, 241 sleeping, 1128 threads  21:35:37
Load Avg: 1.39, 2.19, 7.34  CPU usage: 10.9% user, 12.50% sys, 77.40% idle
SharedLibs: 121M resident, 33M data, 47M linkedit.
MemRegions: 49527 total, 790M resident, 68M private, 408M shared.
PhysMem: 4130M used (1380M wired), 220M unused.
VM: 2289G vsize, 623M framework vsize, 790349(0) swapins, 981169(0) swapouts.
Networks: packets: 4506731/4815M in, 3142372/731M out.
Disks: 17051508/261G read, 2698121/80G written.

I tried to quit it all again. Then I was looking at sudo top, ordered by mem, noticed a firefox, sent it a TERM signal, noticed some more like Keybase and two Keybase help processes still running, killed those, too. This still feels like a totally lousy approach. How can I get the old startup speed back?


Comments on 2017-02-07 Load

Well, right now I’m using Chrome and the system is reasonably fast. Is it Firefox? Is it the extensions I have installed? Is it because I just rebooted the laptop?

– Alex Schroeder 2017-02-07 21:20 UTC

There are a number of processes after reboot that clean-up caches of various things, perhaps those grinding concurrently are what’s running the load up?

– Kris Browne 2017-02-09 19:49 UTC

PhysMem: 4130M used (1380M wired), 220M unused. There is a lot of the memory being used…

Funny thing is, I had persistent-Firefox-although-terminated problems on Windows 7, too, but it’s a thing of the past. Could this be a firefox problem cross-platform if you use an older version?

– Rorschachhamster 2017-02-09 21:45 UTC

@Kris: Possibly. Sadly I can’t open a terminal window and run top while it grinding at the beginning. I’d need to see something in the logs but I’m not sure what to look for, or how to monitor that.

@Rorschachhamster: I think I’m always upgrading my browsers when new versions come out, so I don’t think that’s it. But then again, fixing the problem on Windows doesn’t mean it’s necessarily gone on the Mac.

Haven’t been running Firefox in a while and the system feels better. Installed uBlock Origin and uBlock Origin Extra. Some of my favorite extensions are still missing (recovery of text areas, Privacy Badger), but I’ll get there, eventually.

– Alex Schroeder 2017-02-10 06:58 UTC

Turn off auto-login temporarily, and SSH in from another device to run top (or htop if you build/brew it)? That’s how I found the above mentioned processes.

– Kris Browne 2017-02-10 20:04 UTC

Ah, good point!

– AlexSchroeder 2017-02-11 10:43 UTC

I also ordered top by vsize and killed Dropbox because it was first or second and using 470MB.

– AlexSchroeder 2017-02-11 10:45 UTC

I’ve been using the laptop for a bit now with Chrome instead of Firefox and it has never been sluggish and fast enough when starting up. Not sure yet how it will fare once we switched users back and forth a few times but for the moment I’m happy and I didn’t even have to watch processes using a remote.

– Alex Schroeder 2017-02-12 12:48 UTC

Add Comment



Please make sure you contribute only your own work, or work licensed under the GNU Free Documentation License. See Info for text formatting rules. You can edit this page if you need to fix typos. You can subscribe to updates by email without leaving a comment.

To save this page you must answer this question:

Please say HELLO.

Referrers: Akiyama's Blog Diary Planet Emacsen Dreams of Mythic Fantasy campaignwiki.org/gridmapper.svg ZENOPUS ARCHIVES Bloglines Gothridge Manor rsp-blogs.de