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.

2018-07-13 Killing Gopher From Russia

My gopher server crashed...

Remember Killing Gopher Servers From Russia, part 1, from April 2018? Well, It’s July and they’re at it again.

$ bin/time-grouping-gopher < farm/gopher-server.log.1
         Hour Connections   [%]  Selectors   [%]
2018-07-12 06          22    1%         22   1%
2018-07-12 07          38    1%         38   1%
2018-07-12 08          32    1%         32   1%
2018-07-12 09          35    1%         35   1%
2018-07-12 10          34    1%         34   1%
2018-07-12 11          37    1%         37   1%
2018-07-12 12          38    1%         38   1%
2018-07-12 13          35    1%         35   1%
2018-07-12 14          32    1%         32   1%
2018-07-12 15          36    1%         36   1%
2018-07-12 16          35    1%         35   1%
2018-07-12 17          38    1%         38   1%
2018-07-12 18          39    1%         39   1%
2018-07-12 19          41    1%         41   1%
2018-07-12 20        3619   88%       3607  88%

OK, so who did this?

$ bin/ip-numbers-gopher < farm/gopher-server.log.1 | head -n 2
                  IP Connections   [%]        3610   88%

And who is this?

$ whois|grep "org-name\|address"|head -n5
org-name:       "Central Telegraph" Public Joint-stock Company
address:        7, Tverskaya street
address:        125375,
address:        Moscow
address:        RUSSIAN FEDERATION

And who was it last time? It was, also “Central Telegraph”, Russia.


To get a feeling for those 3610 requests:

$ grep < farm/gopher-server.log.1 | head
2018/07/12-20:01:50 CONNECT TCP Peer: "[]:59651" Local: "[]:70"
2018/07/12-20:01:51 CONNECT TCP Peer: "[]:59776" Local: "[]:70"
2018/07/12-20:01:51 CONNECT TCP Peer: "[]:59808" Local: "[]:70"
2018/07/12-20:01:51 CONNECT TCP Peer: "[]:59825" Local: "[]:70"
2018/07/12-20:01:51 CONNECT TCP Peer: "[]:59900" Local: "[]:70"
2018/07/12-20:01:51 CONNECT TCP Peer: "[]:60000" Local: "[]:70"
2018/07/12-20:01:52 CONNECT TCP Peer: "[]:60020" Local: "[]:70"
2018/07/12-20:01:52 CONNECT TCP Peer: "[]:60083" Local: "[]:70"
2018/07/12-20:01:52 CONNECT TCP Peer: "[]:60085" Local: "[]:70"
2018/07/12-20:01:52 CONNECT TCP Peer: "[]:60123" Local: "[]:70"
$ grep < farm/gopher-server.log.1 | tail
2018/07/12-20:17:01 CONNECT TCP Peer: "[]:62389" Local: "[]:70"
2018/07/12-20:17:01 CONNECT TCP Peer: "[]:62397" Local: "[]:70"
2018/07/12-20:17:01 CONNECT TCP Peer: "[]:62400" Local: "[]:70"
2018/07/12-20:17:01 CONNECT TCP Peer: "[]:62415" Local: "[]:70"
2018/07/12-20:17:01 CONNECT TCP Peer: "[]:62418" Local: "[]:70"
2018/07/12-20:17:01 CONNECT TCP Peer: "[]:62427" Local: "[]:70"
2018/07/12-20:17:02 CONNECT TCP Peer: "[]:62436" Local: "[]:70"
2018/07/12-20:17:02 CONNECT TCP Peer: "[]:62442" Local: "[]:70"
2018/07/12-20:17:02 CONNECT TCP Peer: "[]:62449" Local: "[]:70"
2018/07/12-20:17:02 CONNECT TCP Peer: "[]:62471" Local: "[]:70"

It took them 16 minutes to take out the server...


Add Comment

2018-07-05 Preventing Dog Piling

@freakazoid recently said “the Internet can’t just be a wide open mesh where everyone is broadcasting to everyone and can see everything all the time.” This inspired the following blog post.

I think we could write a list of design patterns to make harassment and dog piling on the Internet much harder and most people growing up on today’s Internet would be shocked and say that this is not what they wanted. We’ve been raised to expect the kind of features that make the negative interactions possible.

Everything we post must be non-public. This prevents random strangers from discovering it and thus it works like talking in meatspace. You cannot shout and the whole world will hear it, let alone look it up long after you’ve said it.

We need to bring back introductions because the lack of public interaction also means that you cannot step into a timeline of strangers and join the conversation. You need to be introduced to strangers. The situation is very similar in meatspace: it is hard to talk to strangers unless you are introduced, or the situation is highly scripted by cultural expectations: it’s easy to talk to hair dressers or shop keepers because the topics and the nodes of interaction are highly constrained.

We will call people you have been introduced to your acquaintances. This works better than “friends” because we’re not friends, yet; it also works better than “followers” because it’s a mutual relationship.

Next, we need constrained conversation starts with strangers. All your posts are shown to your acquaintances and a very small number of strangers. We want to prevent dog piling of strangers, right? One possible implementation would shown your “public” post to all your acquaintances and one other person. If they don’t interact with it, they lose access to your post. They didn’t care and so the opportunity to interact went away. Another person is shown the post and the cycle repeats until somebody picks it up or enough time has passed.

If the post is picked up by a stranger, the conversation is no longer shown to strangers but with every interaction, participants can invite one of their acquaintances. This automatically introduces them to the existing participants, if they aren’t acquainted already.

A participant is a person that said something in a conversation. If none of your acquaintances spoke up or your don’t have any, then you are the only participant in the conversation. The stranger reacting is another participant.

We could implement this by saying that you cannot add (“mention”) more than one acquaintance per response of all the participants that joined before you. The later you joined the harder it is to add new friends of yours.

Example: If Alice makes a public post and Beatrice is the stranger making a reply, then Alice doesn’t need to add another participant because all her acquaintances can already see the conversation. If Alice replies to Beatrice, the Beatrice can mention her acquaintance Claudia, thus introducing her to Alice. Both Claudia and Alice are now acquainted by default unless they choose to undo this.

If the conversation goes sour, people can leave and cancel their introductions. If they do, they will not get reacquainted by future introductions. This would require an explicit action on both parts.

This service doesn’t do celebrity accounts and news bots. Use blogs for this.

This setup doesn’t solve people working their way into your inner circles and then turning on you. It doesn’t solve ostracizing by your supposed friends. It doesn’t solve gossip and rumors and slander. And yet, it already feels very different from Twitter and Mastodon.

I guess one could make Facebook behave like this by avoiding public posts and groups?

This service would need lists and mass introductions: it was called “circle sharing” in the old Google+ user interface. Sadly, it is no more.


Comments on 2018-07-05 Preventing Dog Piling

A good thread on Mastodon by @freakazoid, @ajroach42 and @ishara starts here: Sean argues for organic growth, like I do in my doomed proposal. Andrew says we need to keep the possibility of meeting strangers alive. Barry adds that hashtags facilitate community finding. It’s interesting food for thought!

– Alex Schroeder 2018-07-06 20:41 UTC

Add Comment

2018-07-03 Rotating Text Mapper Maps

A user sent me a little NodeJS script to rotate a map in order to get “stacked columns”.

I wonder whether I should add a different hex stacking option to Text Mapper.


Add Comment

2018-07-03 Privancy and Agency

Why personal agency matters more than personal data: „For example, the clothes that we wear are privacy technologies. We also have norms that discourage others from, for example sticking their hands inside our clothes without permission. The fact that adtech plants tracking beacons on our naked digital selves and tracks us like animals across the digital frontier may be a norm for now, but it is also morally wrong, massively rude and now illegal under the GDPR.“


Add Comment

2018-06-29 No Take Back

I’ve been hearing about Secure Scuttlebutt (ssb for short). It’s not immediately obvious but one thing is key, I think. The ssb documentation doesn’t mince words: “Secure Scuttlebutt is a database protocol for unforgeable append-only message feeds.” I kept wondering: what about expiring and deleting content? Does that work at all?

No, it doesn’t. Once you publish something here, there is no way to ever remove it again from the public. This thread talks about the thing that has been bothering me for a while. @ckeen calls ssb messages “eternal messages”. And he’s right.

I like some things about sbb:

  • distributed, federated
  • works well with intermittent connectivity

But I don’t like systems where I cannot delete things. I don’t need non-repudiation since I’m talking to people, not signing contracts. Basically a “unforgeable append-only” system is similar to a legal set of contracts and not at all like conversations in real life. But that’s what people claim. They’ll say that ssb works like conversations work in real life. What’s been said cannot be unsaid.

But this is precisely not how it works in real life. The memories might not disappear, but the insult is not repeated every time we meet. The newspaper disappears from the stand, the books get impounded, the graffiti is painted over. Secure Scuttlebutt is an example of a the kind of software design that doesn’t follow human nature even though the words used to describe it (“gossip”) try to paint it that way. Once again, we design systems to never forget but the human thing is to forgive and forget. That web page where I am called a dick still makes me angry, years later. That’s why Oddmuse has Kept Pages instead of a version control backend. I want the system to forget.

As it is, sbb is not for me. If somebody writes something illegal there is no way to effectively retract it. If you’re sorry you wrote something, you can only say you’re sorry and you didn’t mean it and you want it undone but there’s no way to actually do it. I don’t think that’s the kind of service I want to use. How do you deal with this? Assume that mores will change? I don’t think so.

People will also say that it’s impossible to assure you that deletions are honored. And even if you can delete messages others will make screenshots. This happens and it makes people angry, and we can’t stop them, that is true. But it doesn’t follow that the tools we develop must prevent us from doing the things that cannot be guaranteed. After all, our locks are not perfect and yet we still use them to lock our doors. The law and norms take care of the rest.

I don’t like to design a system that doesn’t allow for any take backs. Human lives, our legal systems, or social conventions – they all allow for take backs wherever possible. It’s the humane thing to do. Our software should reflect this.


Comments on 2018-06-29 No Take Back

In court, we will find some people who have embedding a crime in the blockchain, merkletree, or whatever it is. Then what? Eventually the crime will make it worth it for law enforcement to confiscate your equipment and impose daily fines until you’re done for. Until then, it’s legal uncertainty for all. Thus I claim such a system will never work in practice.

People will use it, and problems will occur, I’m sure. But no big player will want to use it. And if your Mastodon instance is full of hentai then many will block you. I think the legal frame of mind is absolutely the way to see these issues. It can be as powerful as code.

@ckeen dig up this paper: A Quantitative Analysis of the Impact of Arbitrary Blockchain Content on Bitcoin, by Roman Matzutt, Jens Hiller, Martin Henze, Jan Henrik Ziegeldorf, Dirk Müllmann, Oliver Hohlfeld, and Klaus Wehrle.

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

Add Comment

2018-06-29 A Project For One

In a different context and elsewhere, @linkskywalker gave some advice on things to do for a community. Here’s what he said, slightly edited such that it applies to any community, not just the specific community he was talking about:

Alright, you asked for my advice and thoughts, so I’m gonna give ’em to ya. Gonna give ’em to ya hard. Forgive me for being repetitious.

I like your idea. I think it’s a good idea. The community has needs, you want to fill those needs, and that’s good shit. I need for you to succeed, and that’s why I want you to scale that shit back.

Do something small. Do something sustainable. Don’t expect people to help you, but leave a window open for people to help you. If you start with focused intent, and manageable goals, then you’ll be able to see this through no matter what happens.

Bigger projects work because they got money. We don’t have money. Money is not the resource we’re operating on here. Time is what we have to spend, and you can only spend your own.

A small, consistent good is better than a big, short-lived good.

It seems like there’s a lot of things you want. All of these things are good. I say: pick one of them. When I get the sense that what you’re most passionate about something then that’s good shit. Do that.

Do something that one person can do.

It’s also a goal that is clear and easy to understand. If you say “Hey guys, I’m trying to make the one grand mega site, does anyone wanna help me?” then nobody is gonna know what you fuckin’ mean. They’re gonna wonder “why should I write for this guy when I could just write for my own blog?”

If you say “Guys, I want to make a resource for new people, will you help me?” then people still might not help you, but at least they’ll understand what you’re doing. They’ll see how it has value as a stand-alone project separate from their individual blog, and will be more inclined to offer help.

I think this is excellent advice. It applies to so many individual efforts. Thank you for writing it.


Add Comment

2018-06-28 Murten

We went to Murten for a three day trip and I finally got around to picking a few pictures.


Comments on 2018-06-28 Murten

As always, some notes to myself. This time I created the album on the Mac. Sitelen Mute still seems to work!

perlbrew exec --with perl-5.22.0-thread-multi ~/src/sitelen-mute/sitelen-mute -f --title "Murten 2018" --description "Wir haben ein langes Wochenende in Murten verbracht." --url https://alexschroeder.ch/gallery/2018-murten/ /Volumes/Data/Pictures/Fotos\ 2018/Murten/Album/ 2018-murten

rsync --progress --recursive -e "ssh -p 882" /Volumes/Data/Pictures/Fotos\ 2018/2018-murten alexschroeder.ch:alexschroeder.ch/gallery/

– Alex 2018-06-28 11:45 UTC

Add Comment

2018-06-28 Linux to Libratone Loop Speaker

A long time ago I bought two nice, round Loop speakers by Libratone. I don’t htink they make them any more. Too bad! These speakers offer Audio In, AirPlay, Bluetooth, and DLNA access. So how do I get them to work?

  1. in a terminal window, run pulseaudio-dlna
  2. open the PulseAudio Volume Control application
  3. in the Playback tab, pick your network speaker
  4. play sound

I don’t know how to avoid running pulseaudio-dlna in a terminal. It seems busy as crazy so I’m not sure I’d want to run it always, in the background.

Image 1 for 2018-06-28 Linux to Libratone Loop Speaker


Add Comment

2018-06-28 Hamburg

We went to Hamburg for a four day trip and I finally got around to picking a few pictures.


Add Comment

2018-06-26 A New Web

I was talking to a friend who was thinking about the internet we want to have, decentralized, less silos, a bit like the nineties where it was possible to have static pages, host email, write your own CGI scripts, and it was all step by step easy and possible if that was what you wanted. And we got talking about the kind of things we need to today to get this back. Do you have reading suggestions? Blogs to read? Projects? People to follow?

I think targeting the in-serious developer is key. Kids and adults that want to tinker must see small achievable steps forward. A bit like Emacs, Smalltalk, or fiddling with autoexec.bat or whatever we did as kids.

@ajroach42 and @freakazoid seem to be talking about this, too!

Teenagers these days grow up with a phone instead of MSDOS or a C64 and how will they ever learn to tinker? How can we transition from play to programming, allowing people to create their own games, like in the old days you could play on a MUD or MUSH (I liked MUSHes better!) and from text adventure to community to programming it had everything. And I want the same thing for the web and messaging. People writing bots. People writing CGI scripts or whatever. I want it all! I want it now!

@eleanor recommended two blog posts to read:

Against Facebook has a misleading title. 0xADADA writes: «The platform takes our real authentic friendships and first commodifies them, reifies them, and then sells them back to us as an “image of friendship”, but one that is bankrupt of any genuine social value.» Capitalism at work extracting value in novel ways!

Encouraging individual sovereignty and a healthy commons was a reaction to the “Facebook Manifesto” by Mark Zuckerberg. @aral writes: “That is the world that I wake up every day to work towards. Not because it is charitable. Not because I’m a philanthropist. In fact, for no reason at all other than because that is the world that I want to live in.”

Hell Yeah!

A few replied with the suggestion that Minecraft might be the answer I was looking for and I think they are right. Specially when combined with a Raspberry Pi and the special edition of Minecraft for it which can be extended using Python (but I don’t exactly know how this works). And the barrier for a Raspberry Pi is higher than having a C64 in your bedroom, for sure.


Comments on 2018-06-26 A New Web

I think your premise is wrong. The old web wasn’t easy and simple to understand and everybody could participate. This is only true for nerds like you and me. Facebook and Co “won” by actually making good on the promise of participation for all. You want the good old times back where the net was for nerds. That’s fine and I wouldn’t mind to be part of it. But thinking it to be the “solution” (to whatever you think the problem is) is rather elitist thinking.

Also don’t worry about tinkerers, geeks like us always exist. They may hack their minecraft or create apps for their phones or do whatever. They will never be the mainstream though. We never were.

Andreas Gohr 2018-06-27 15:19 UTC

I don’t disagree with what you’re saying. I think one of the points I wanted make is that the current Internet is hard, even for us. Setting up a secure mail server is hard. Setting up a content management system and keeping it up to date is hard. Perhaps it isn’t in fact hard but we’re old and tired and unwilling to put in the hours, I don’t know. But yes, I agree with the basic statement: it wasn’t easy back then and it isn’t easy now.

And I agree that going back to the old web isn’t the answer. We have learned so many things. My friend and I kept talking about email (even though I argued that Email is the New Snail Mail) and we joked about the configuration of sendmail and procmail and writing sieve filters and setting up dovecot. None of that is something we want! But we also don’t want to replace all of the Internet with Facebook. We want to have the kind of Internet where tinkerers and kids can get interested in the infrastructure through play and use and develop the necessary skills to build and make. It’s a bit like Word and Facebook and phones in general making some things very easy and at the same time making it impossible to develop from there. I don’t mind things being easy for people. I mind the impossibility of the things we use to grow with us.

Or, as @dredmorbius writes on Reddit in The Tyranny of the Minimum Viable User: we must take care such that designing for normal people doesn’t drag down the experience for others, in particular expert or experienced users.

Then again, perhaps this guy on Gopher is right: Why we don't need to rebuild the internet. The old web is still there, for those of us who want it. I’d argue that my first point still stands: once you’re outside the big silos, setting things up is still harder than necessary.


  • no way “up” once you’re proficient with your phone
  • no way “up” once you’re proficient with Facebook
  • if you do switch to self-hosting, everything is harder than it ought to be

At the same time:

  • the old web was hard to use
  • server space was hard to get
  • setup was hard back then, too

– Alex Schroeder 2018-06-28 07:59 UTC

Also an interesting perspective:

I find the discussions about technical matters to be liberating and self-empowering, and I identify as “non-technical”. To be sincere, it was in the slow accumulation of technical knowledge and skills that I became excited about the future again. […] This feels antithetical to how people approach the internet today, but I don’t think that’s the case for the future. The present moment is one where companies are obscuring the depth of their technical processes to quietly profit off surveillance, oppression, and depression. The future is one where technology is reclaimed by everyone; it is open and welcoming and asking to be built by hand. I want us to grow towards that future with everything we share.

The Future will be Technical

I don’t want to be techno gullible, but I like the approach with a focus on understanding and empowerment.

– Alex 2018-06-28 12:12 UTC

And yet another perspective: How to Build a Low-tech Internet (2015) talks about long range WiFi and extending the sneaker net using buses, and more. A great summary of our options.

– Alex Schroeder 2018-07-14 07:18 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.