Diary

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-10-21 Cro as a Service?

I ran Oddmuse 6 for a while now from a little shell script. It set up the environment variables, it checked whether the process was already running, it used nohup to run perl6 service.p6, it saved the PID in a file, and so on. But it didn’t use cro run. And I still don’t know how to do it.

I would like to use cro run because I feel that’s what I need to do in the future when I run multiple sites in parallel. So let’s try this:

#!/bin/bash
export ODDMUSE_MENU="Home, Changes, About"
export ODDMUSE_QUESTION="Name a colour of the rainbow."
export ODDMUSE_ANSWER="red, orange, yellow, green, blue, indigo, violet"
export ODDMUSE_SECRET="rainbow-unicorn"
export ODDMUSE_HOST="next.oddmuse.org"
export ODDMUSE_PORT=20000

cd $HOME/oddmuse6
cro run

This script doesn’t work. All I see is this:

▶ Starting oddmuse6 (oddmuse6)
🔌 Endpoint HTTP will be at http://localhost:20000/
♻ Restarting oddmuse6 (oddmuse6)
♻ Restarting oddmuse6 (oddmuse6)
♻ Restarting oddmuse6 (oddmuse6)
♻ Restarting oddmuse6 (oddmuse6)
♻ Restarting oddmuse6 (oddmuse6)

If I replace cro run with perl6 service.p6, it works.

So now I’m back to this:

#!/bin/bash
export ODDMUSE_MENU="Home, Changes, About"
export ODDMUSE_QUESTION="Name a colour of the rainbow."
export ODDMUSE_ANSWER="red, orange, yellow, green, blue, indigo, violet"
export ODDMUSE_SECRET="rainbow-unicorn"
export ODDMUSE_HOST="next.oddmuse.org"
export ODDMUSE_PORT=20000

cd $HOME/oddmuse6
test -f pid && kill $(cat pid)
perl6 service.p6 &
echo $! > pid

Any ideas?

The service.p6 file is simple:

use Cro::HTTP::Log::File;
use Cro::HTTP::Server;
use Oddmuse::Routes;

my $logs   = open 'access.log'.IO, :w;
my $errors = open 'error.log'.IO,  :w;

my Cro::Service $http = Cro::HTTP::Server.new(
    http => <1.1>,
    host => %*ENV<ODDMUSE_HOST> ||
        die("Missing ODDMUSE_HOST in environment"),
    port => %*ENV<ODDMUSE_PORT> ||
        die("Missing ODDMUSE_PORT in environment"),
    application => routes(),
    after => [Cro::HTTP::Log::File.new(logs => $logs, errors => $errors)]
);
$http.start;
$logs.say: "Listening at http://%*ENV<ODDMUSE_HOST>:%*ENV<ODDMUSE_PORT>";
react {
    whenever signal(SIGINT) {
        $logs.say: "Shutting down...";
        $http.stop;
        done;
    }
    whenever signal(SIGHUP) {
        $logs.say: "Ignoring SIGHUP...";
    }
}

Oddmuse::Routes is available from the Oddmuse 6 repo.

Hm, what could be the problem? Let’s look at the files:

  total 80
  drwxr-xr-x  6 alex alex 4096 Oct 21 11:40 .
  drwxr-xr-x 57 alex alex 4096 Oct 21 11:57 ..
  -rw-r--r--  1 alex alex  205 Oct  7 18:42 .cro.yml~
  -rw-r--r--  1 alex alex  479 Oct  7 19:23 .cro.yml
  -rw-r--r--  1 alex alex   10 Oct  7 18:42 .dockerignore
  -rw-r--r--  1 alex alex   52 Oct  7 18:42 .gitignore
  -rw-r--r--  1 alex alex  221 Oct  7 18:42 Dockerfile
  -rw-r--r--  1 alex alex  471 Oct  7 18:42 META6.json
  -rw-r--r--  1 alex alex  473 Oct  7 18:42 README.md
  -rw-r--r--  1 alex alex   43 Oct 21 11:49 access.log
  drwxr-xr-x  2 alex alex 4096 Oct 17 10:59 css
  -rw-r--r--  1 alex alex    0 Oct 21 11:49 error.log
  drwxr-xr-x  3 alex alex 4096 Oct  7 19:24 lib
  -rw-------  1 alex alex  445 Oct 21 11:46 nohup.out
  -rw-r--r--  1 alex alex    6 Oct 21 11:49 pid
  -rwxr-xr-x  1 alex alex  149 Oct 15 10:43 run.sh~
  -rwxr-xr-x  1 alex alex  318 Oct 15 10:46 run.sh
  -rw-r--r--  1 alex alex  683 Oct 21 11:19 service.p6~
  -rw-r--r--  1 alex alex  779 Oct 21 11:49 service.p6
  drwxr-xr-x  2 alex alex 4096 Oct 10 20:40 templates
  drwxr-xr-x  4 alex alex 4096 Oct 11 08:32 wiki

error.log and access.log are the obvious culprits! Changes in the log file will case cro to restart. So what I’m going to do is move the log files intoa logs subdirectory and add that to the ignore section in .cro.yml.

OK, so that works. I still feel strange using nohup, though.

Shell script:

#!/bin/bash
export ODDMUSE_MENU="Home, Changes, About"
export ODDMUSE_QUESTION="Name a colour of the rainbow."
export ODDMUSE_ANSWER="red, orange, yellow, green, blue, indigo, violet"
export ODDMUSE_SECRET="rainbow-unicorn"
export ODDMUSE_HOST="next.oddmuse.org"
export ODDMUSE_PORT=20000

cd $HOME/oddmuse6

# test -f pid && kill $(cat pid)
# perl6 service.p6 &
# echo $! > pid

nohup cro run &

Service:

use Cro::HTTP::Log::File;
use Cro::HTTP::Server;
use Oddmuse::Routes;

my $logs   = open 'logs/access.log'.IO, :w;
my $errors = open 'logs/error.log'.IO,  :w;

my Cro::Service $http = Cro::HTTP::Server.new(
    http => <1.1>,
    host => %*ENV<ODDMUSE_HOST> ||
        die("Missing ODDMUSE_HOST in environment"),
    port => %*ENV<ODDMUSE_PORT> ||
        die("Missing ODDMUSE_PORT in environment"),
    application => routes(),
    after => [Cro::HTTP::Log::File.new(logs => $logs, errors => $errors)]
);
$http.start;
$logs.say: "Listening at http://%*ENV<ODDMUSE_HOST>:%*ENV<ODDMUSE_PORT>";
react {
    whenever signal(SIGINT) {
        $logs.say: "Shutting down...";
        $http.stop;
        done;
    }
    whenever signal(SIGHUP) {
        $logs.say: "Ignoring SIGHUP...";
    }
}

Me ignoring SIGHUP in the service now has no effect because cro doesn’t ignore SIGHUP which is why the nohup wrapper is needed.

OK, so now my shell script starts nohup cro run & because cro doesn’t daemonize itself. I guess I still find that surprising. And I wonder about the trade-offs. So the benefit is automatic restarts? I also see now that using cro run gives me two moar processes (one runs cro, the other runs my process, moar being the virtual machine this Perl 6 runs on).

If there’s nothing else that I’m missing, perhaps running the service using perl6 directly instead of via cro isn’t such a bad idea after all. I think I’ll do that.

Tags:

Add Comment

2018-10-19 Permission Culture

I was looking at some old blog posts of mine regarding the Old School RPG Planet and found the following in a comment of mine. It’s still as relevant as ever:

I think that asking for permission just doesn’t scale. It’s OK to ask one person, but asking a hundred people is not how I want to spend my time. The long answer is in the pages of the Free Culture book. Just search for the word “permission” and learn about the differences of permission culture and free culture. Here’s a paragraph from page 192f:

The building of a permission culture, rather than a free culture, is the first important way in which the changes I have described will burden innovation. A permission culture means a lawyer’s culture—a culture in which the ability to create requires a call to your lawyer. Again, I am not antilawyer, at least when they’re kept in their proper place. I am certainly not antilaw. But our profession has lost the sense of its limits. And leaders in our profession have lost an appreciation of the high costs that our profession imposes upon others. The inefficiency of the law is an embarrassment to our tradition. And while I believe our profession should therefore do everything it can to make the law more efficient, it should at least do everything it can to limit the reach of the law where the law is not doing any good. The transaction costs buried within a permission culture are enough to bury a wide range of creativity. Someone needs to do a lot of justifying to justify that result.

I recommend the book. It’s a long read, but I liked it. It also made me unwilling to spend time asking people for permission to do anything. I’d rather spend my time elsewhere.

Tags:

Add Comment

2018-10-19 Multiverse Problems

I liked reading @Halfjack’s blog post on how to publish for a crazy multiverse/intergalactic game. What he said about Soft Horizon resonated with my Planescape experience in a previous campaign. The idea is great. The background fantastic. But the execution needs details, and art, and inspiration. I like his idea of writing follow-up stand-alone thematically linked games.

I think I could get into the idea for my map and description generator. I’m thinking of Skyrim. There, you walk the landscape and occasionally you find castles, towers, dungeons, camps with giants, mountain peaks with dragons, troll lairs, and when I go there, I always feel as if there is an actual story there to be found, if only I’d take the time. The bandit boss has a name and goals; the elven sorcerer residing in their dungeon has a plan, and you can involve them in your quest against the giants of this or that mountain pass.

So, I think I’d like to expand on the fractal nature of adventure. Zak said something like that when I got started on Hex Describe. I understood it as him wanting a generator that would generate details at every level from the wilderness down to the dungeon, from then political parties down to the individual hermits.

I believe there is a way to translate a vision of these adventures into building blocks which can them be codified. Yes, at first the output of these generators is formulaic and boring. But it doesn’t have to be. It doesn’t come for free, that’s for sure. But a generator implemented in software, or better yet, implemented in random tables like Hex Describe, could be used by others and could survive the software using those very tables.

Tags:

Add Comment

2018-10-18 Print on Demand

I’ve added my blog to both The Old School RPG Planet and The Indie RPG Planet, and if I think a blog post ought to be on both planets, I need to add all the tags. Not sure if that makes sense, though. Perhaps this blog post should have none of the tags?

Anyway, what I wanted to note is that Brad wrote a nice blog post about the benefits of Print on Demand (PoD) and the drawbacks of running a Kickstarter campaign in order to print a “nice” book: who’s stealing my eyes?

The conclusion?

You will probably sell more books with Kickstarter. You might make more money. There is space for the books to be much prettier.
With POD you’ll just remain free.

Well said!

Tags:

Add Comment

2018-10-17 Trunk Quality Program

I fear that a lot of the people that volunteered for Trunk have either fallen silent (a common problem), or they don’t actually toot a lot on the topics they signed up for. Perhaps they’re interested in following more people tooting about the topic and were confused about the purpose of the lists, or they do write about the topics but they also write about a gazillion other things, drowning out the signal people might be looking for, or it turns out that they mostly boost other people instead of writing their own toots (in which case we might be interested in adding the people they’re boosting to our lists instead).

It’s difficult! I’m considering going through all the lists (ugh!) and clicking on all the linked people. Removing people from Trunk feels like acting as the content police. It’s awful. I need to get into the mindset of “curating.” Perhaps I wouldn’t feel so bad if I were a curator at a gallery, picking and choosing the people that get exposure. But who am I kidding. I’d still feel bad.

But I want better quality for Trunk! So I need to get into the groove. I need to repeat this, like a mantra:

  • If people are no longer active, I’m going to remove them.
  • If people are mostly boosting others, I’m going to remove them.
  • If people are mostly writing about other stuff, I’m going to remove them.

Should I notify them? I wonder. Are they going to change? I hope not! But perhaps it would still be fair to tell them. Hm. 🤔

Like this, perhaps:

Hi! I’m slowly going through the lists on Trunk to see whether people actually write about the topics they volunteered for. I followed a link to your profile and didn’t see a lot of posts on the topics you were listed under so I’m going to remove you from the lists. I hope you understand. 🙇 If you’re simply interested in reading about a topic, you don’t need to be on the list, you can simply follow people on the list. 🐘

Tags:

Comments on 2018-10-17 Trunk Quality Program

Yeah, I think that the slight reminder makes a lot of sense. I don’t remember what I supposed to do after joining some lists to be honest.

Jacky 2018-10-17 07:15 UTC


“The road to hell is paved with good intentions.”

People probably intend to post on their chosen topics, but never get around to it. I’m sure people will accept that failing, if it is pointed out to them. It probably doesn’t require individual communication, blanket statement somewhere would be fine.

Fitheach 2018-10-17 08:34 UTC


I liked the comment by @ckeen: “Trunk’s biggest plus is somewhat showing the broadness of possible stuff people talk about. With the usual introductions you will find yourself sitting in a very small bubble. […] So I think trunk is useful as such, I am wondering how much active curating is necessary to achieve good connections.”

Indeed. How much active curating is necessary? I’ll have to think about this some more.

– Alex Schroeder 2018-10-18 20:09 UTC

Add Comment

2018-10-17 Culture War, or Taking Offence

I recently got linked to the article Two concepts of offence where the author examines what duelling can teach us about being offended. Mark basically has three models:

  1. offence-as-hurt
  2. offence-as-harm
  3. offence-as-insult

He posits that offence-as-insult would help us better understand what this is all about. It’s independent of whether the victim feels hurt, or suffered harm. It’s a question of honour and respect.

Offence-as-insult also makes more sense of our approach to apologies. No early modern gentleman ever avoided a duel by saying: ‘I’m sorry you feel that way.’ Nor is that a sufficient apology in most contemporary cases of offence. As in honour cultures, offence today demands an affirmation of respect for the offended person’s equal status, or evidence that the offending speech did not carry an insulting meaning.

It also means that people don’t have to grow a thicker skin, because a thicker skin is required between people of unequal honour. Having a thin skin is a sign of people demanding equal standing. It’s what we want.

Understanding why people are offended doesn’t solve the problem, of course. But it’s the first rebuttal when somebody claims the victims just need to grow a thicker skin. Not so!

Note that this explanation does not tell you whether offending speech should be banned or not. It just says that there being consequences should be expected. (We don’t need to duel, though.)

Tags:

Add Comment

2018-10-16 Uplinked Intelligence Wiki

@seanmccoy started the Uplinked Intelligence Wiki. It aims to be a repository of links to blog posts for running OSR style games in Sci-Fi systems: Stars Without Number, Mothership, Traveller, Rogue Trader, etc.

Tags:

Add Comment

2018-10-16 Tactical Transparency

I just read an excellent essay by Zak on what the OSR is all about. The term he uses is “tactical transparency” and it makes a lot of sense to me:

Tactical transparency is the degree to which a common-sense idea that would be effective in the “real” situation that the game-fiction mimics would also be effective in the game. – Drunk, Prone & On Fire (Tactical Transparency)

The rest of the blog post explains what is meant and I enjoyed it very much.

Tags:

Add Comment

2018-10-16 Old School RPG Planet coming back

I’m resurrecting the Old School RPG Planet. I have a little page for you if you want to learn more.

If you want your Old School Renaissance (OSR) blog to be listed, apply by sending me mail, or leaving a comment, either here, on Google+, or send me some mail. See my contact information.

Tags:

Comments on 2018-10-16 Old School RPG Planet coming back

You've likely heard Google+ is shutting down – impacts and activities by @dredmorbius talks about Google+ going down and what it might mean for other systems, and how blogs are pretty good.

– Alex Schroeder 2018-10-17 16:09 UTC

Add Comment

2018-10-16 Diaspora

I recreated a Diaspora account, just in case Diaspora takes off instead of Old School RPG blogging. All I know is I’m not following the gamers from one proprietary silo (Google+) to another proprietary silo (MeWe).

“Can Diaspora be G+ 2.0? It seems way less shady than MeWe. Aspects look to be exactly the same as circles. You can post publicly, like this, or privately to one of your aspects. Posts support all of Markdown, so you they can be much richer than what you can share on Google+ currently. You can’t edit your posts, though. (Like Twitter, I guess.) Still, everything about this seems better than MeWe.” – Ramanan, on Diaspora

Tags:

Comments on 2018-10-16 Diaspora

Hah, @dredmorbius is also on Diaspora. A long post: Community or Features. I recommend reading it. Related to 2018-08-30 Dogpiling Wil.

– Alex Schroeder 2018-10-18 19:58 UTC

Add Comment

More...

Comments


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 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: Diary Diary Ynas Midgard's RPG Blog Asshat Paladins Gothridge Manor Alex Schroeder 🐝 (@kensanata@octodon.social) - Octodon Dreams of Mythic Fantasy THOUGHT EATER ZENOPUS ARCHIVES