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.

2017-11-20 Twenty and One Questions

Back in 2014, I answered Jeff Rients’ 20 questions. (I had forgotten that I had already answered them in 2012.) Here are my answers to Jez Gordon’s 21 questions.

Why were settlements founded here? Along the river systems, connecting some rich region in the west with some other region in the north.

What are the local funeral customs? People are buried except for elves. Elves are burned because a special elf fungus will grow out of their dead corpses, giving off a strange light, make otherworldly music when the moon shines, possess animals and drive people mad. Unburied dead will usually give rise to ghosts who try to possess or curse people nearby. At first, they’ll try to get a decent burial. Later, however, they’ll try to actively hurt and kill.

How do neighbouring settlements communicate with one another? There is trade along the river and on roads financed by player characters.

How dramatically does your campaign location change from season to season? Not at all. I have trouble remembering snow in winter.

What are the three biggest local celebrations each year? Haven’t thought about it.

Where is the safest place for someone to stash a considerable sum of coins and treasure? Generally speaking, in town is “safe”.

What is the local standard of medical technology in replacing missing bits and body pieces? The streets are full of victims of the Death & Dismemberment table. People have lost countless arms and legs to the dungeons. If you lost a leg, you can have a wooden peg and suffer no other penalty but the inability to run and to move silently. If you lost an arm, you can have a hook and suffer no other penalty but the inability to wield a shield. Captain Hook is my role model.

What are some local superstitions? No idea.

What is the scariest local myth? No idea.

Who collects tribute and taxes for the powers that be? No idea. Taxes are not important in my game.

What are the best places to get a drink round here? No idea. A handful of establishments are mentioned on the campaign wiki page for the local settlement but drinking and carousing is not important in my game.

Where can you buy animals round here? The humans sell war dogs for 25gp. The dwarves train bears to be war bears. The bears they get from a druid who stopped delivering them. We haven’t investigated. The bears used to cost 500gp. The lizard men used to train war raptors. We got some as a gift and they’re still breeding. They are no longer available because we killed all the lizard men when their relations with the dwarves took a dive.

What is the local settlement missing? No idea.

What is the local mascot of the town or region? No idea.

Where’s the best place to pick up a few hired hands? The town provides an endless supply of surplus kids, desperate to make some money. Also, amateur spies are available for 200gp per job.

What’s the local take on the end of the world? No idea.

Is there a local hedge wizard, witch, or shaman of no great power but one who cares for the locals and helps deal with their tribulations? No. Sascha is the local big priest, a former player character. The temple of the local elementalist schools is perhaps the most useless with magic-users around level two and three.

What games do the locals like to play? No idea.

What crimes are punishable by death? Bandits are hanged by the Lady Kyle, the local noble woman. Recently the players saw that a bunch of dwarves was able to buy their freedom even though all the human bandits would hang. Food for thought.

Have any great disasters destroyed local settlements? Laketown was destroyed by froglings in recent years. The survivors fled, or were captured by the froglines to serve them in their swamp temple. As no other settlement was built near the swamp or lake, nobody else fears them.

Where can you find maps of the region? The campaign wiki has the in-game knowledge of the area. I keep adding to the map as the players explore.

That’s a lot of “no idea”... Tags:

Add Comment

2017-11-18 Mastodon Backup

OK, it seems that Weapon vs. AC is going to close down and that Dice Camp is the “new” RPG instance. I wanted a backup of all my toots. Mark Damon Hughes has written Mastotool which does that using screen scraping. MastoUserScrape by BobC does the same thing but doesn’t download all your media.

One thing to note, though, is that scraping your user page (https://octodon.social/@kensanata and the like) means that you’re not seeing any replies!

I wanted to export all my toots, including replies, but based on the Atom feed. I got pretty far, I think, but I noticed that the chain of atom pages simply ends after a while:

~/src/mastotool $ ./Mastotool.py --backup https://octodon.social/@kensanata --save kensanata@octodonsocial.atom
Downloading https://octodon.social/@kensanata...
Downloading https://octodon.social/users/kensanata.atom...
Downloading https://octodon.social/users/kensanata.atom?max_id=242067...
Downloading https://octodon.social/users/kensanata.atom?max_id=238093...
Downloading https://octodon.social/users/kensanata.atom?max_id=235430...
Downloading https://octodon.social/users/kensanata.atom?max_id=230812...
Downloading https://octodon.social/users/kensanata.atom?max_id=228327...
Done

Why doesn’t the last one have a next link? I raised an issue on GitHub and apparently that’s a bug.

I wrote a new tool, mastodon-backup:

$ ./mastodon-backup.py kensanata@octodon.social
Get user info
Get statuses
We have 1276 statuses

This was the correct number of statuses a few minutes ago! As always, OAuth took a few extra cycles to get right, but I think the Mastodon.py library does everything I need.

Current state of mastodon-backup: it will log in and download all your statuses into a JSON file. Documentation of the format: see Toot dicts in the docs for Mastodon.py. The documentation says:

Unless otherwise specified, all data is returned as python dictionaries, matching the JSON format used by the API. Dates returned by the API are in ISO 8601 format and are parsed into python datetime objects. [1]

This is great. Documentation of the JSON format used by the API is available from the Mastodon documentation.

My goal is to write a transformer that will just turn the JSON file into a HTML file. Alternatively, if you already have such a tool, please contribute? :)

Some time later: OK, got text and HTML export. Mission accomplished!

Some time later: OK, got media backup, but only for the toots I authored myself, not for boosts, and some issues with the progress bar, and I want the HTML export to use images from the media backup instead of hitting the instance with hundreds of image source links.

Tags:

Comments on 2017-11-18 Mastodon Backup

On Windows, I used Cygwin to install python3 and python3-pip to get started but I get and error:

...
ModuleNotFoundError: No module named 'pip._vendor.requests'

So I switched and used easy_install.

easy_install-3.6 Mastodon.py
easy_install-3.6 html2text

– Alex 2017-11-20 10:29 UTC

Add Comment

2017-11-16 How to Mastodon

Here’s what you do:

Pick an instance. An instance is your server. If you use Twitter, Facebook or Google+, everybody is on the same instance and thus the same rules apply to everybody. Mastodon instances are like the other websites, everybody has their own site and makes their own rules. Thus, you want to pick an instance where the admins share your opinions on free speech and its limits. The Instance Directory has a wizard that helps you choose.

Every instance has a local timeline. If you visit an instance without having an account, you’ll see a preview of their local timeline (”A look inside...”). It’s a good idea to pick an instance with a topic that you are also interested in. Tabletop games, science fiction, cyberpunk, cooperatives, heavy metal, programming, art—perhaps there is an instance for you. There, you’ll quickly find like minded people to follow.

Then again, once you have a bunch of people to follow, the local timeline decreases in importance. Still, it’s nice to have an account on an instance that matches your interests.

How do you know what an instance is about? You can skip the instance directory wizard and check out the list of instances directly. Each instance has a little blurb that might help you choose.

The advanced list has more information about status, uptime, version installed, and so on, and that might give you an idea of how conscientious the admins are.

Create an account. This is easy: email address, password, confirmation email, perhaps install an app for your phone and all that. You know how this works.

Edit your profile.

  1. Pick a display name.
  2. Write a short bio using hashtags.
  3. Upload a profile picture (”Avatar”).

Hashtags are important so that similar minded people can find each other. Mastodon only supports searching for usernames and hashtags!

Write an introduction. Write a post (a “toot”) and use the hashtag #introduction. Say who you are and what you’re interested in, and use more hashtags. Here’s my introduction for the dice.camp instance, for example:

#introduction I run #osr games using my own hose rule document but it all started with Labyrinth Lord which I knew long before I knew B/X. Sadly, my Indie Game Night is no longer a thing but I still love Lady Blackbird, all the #pbta hacks on my drive, and so much more. But in the three campaigns I run, it’s all OSR right now.

Post this introduction, then use the dot menu (⋯) to “Pin to profile”. Your introduction will now be the first thing people see when they visit your profile. Here’s my profile. After a while you are of course free to pin a different post to your profile. I recommend you start with your introduction, however.

Start interacting. Click on the icon with the little group of people on it and start reading the local timeline. If you like something, make it a favorite by clicking on the star (☆). If you have something to say, reply by clicking on the arrow (↰). If you want spread something, boost it by clicking the two arrows (🗘).

Follow people. Click on the profile pictures of the people you might want to follow and check whether you like what have recently written. If you do, follow them by clicking on the person plus (👤➕). If you changed your mind, click on the person cancellation (👤🗙).

If you followed a person and the icon turned into an hourglass (⌛) this means that they protected their account and have to authorize you. Be patient.

How do you find more interesting people to follow? Look to see who your favorite folks are following. You can find them via the profiles of the people you are following.

If you are confused by toots, remember that clicking on one gives you all the ancestors (the chain of replies from the original posting to the toot your looking at) and all the descendants (all the replies to the toot you are looking at). Note that if you want to see all the replies to the original toot, you now have to scroll all the way to the top and click on the first toot.

Multiple accounts, do you need this? Some people have multiple accounts. I do. I like to keep my gaming separate from everything else. There’s one account for gaming and history, and there’s another account for programming, politics, environmentalism, social media, photography, and everything else. That’s because I think that the overlap between these two big subject areas is small. Mastodon has no way of sorting your followers into groups, no way of sending a messages to a certain group, no way of reading messages from a certain group. The solution is to create a separate account for each subject area.

Many people think this is unnecessary and they are interested in the whole picture of people they are following. :)

More links:

Tags:

Add Comment

2017-11-14 Firefox 57

New browser today!

For the office, I needed to import our own root certificate in Tools → Options → Privacy & Security → View Certificates → Import... and then in about:config I needed to set these:

network.automatic-ntlm-auth.trusted-uris = ...
network.negotiate-auth.trusted-uris = ...
network.auth.private-browsing-sso = true  

The extensions I have installed:

  • Decentraleyes
  • Form History Control (II) – used to have Lazarus, but oh well
  • HTTPS Everywhere
  • Privacy Badger
  • RandomUA
  • uBlock Origin

Anything else I need?

Well, actually I’m still using Firefox 56. Why is it launch day and I’m not getting it? In what timezone is Firefox being released? 😿

Apparently, 15:00 local time.

Tags:

Comments on 2017-11-14 Firefox 57

Reading Locking Down Firefox. I like the Random User Agent extension provided. Enabling privacy.firstparty.isolate prevented me from editing a page on this wiki, sadly.

Decentraleyes looks cool. “Protects you against tracking through “free”, centralized, content delivery. It prevents a lot of requests from reaching networks like Google Hosted Libraries, and serves local files to keep sites from breaking. Complements regular content blockers.”

– Alex 2017-11-14 11:12 UTC


One thing I am noticing is that my Mastodon experience is very nice and my Google+ experience is deteriorating: scrolling to the bottom just now didn’t load more messages, profile pictures of commentators aren’t loading. I guess my setup is too locked down?

– Alex 2017-11-16 10:34 UTC

Add Comment

2017-11-14 CSS Naked Day

I should write an Oddmuse module for CSS Naked Day (April 9).

Try this site without CSS!

Get dressed again...

I wrote about this back in 2007 and never thought of it again. If I had a module, I’d get reminded of it, every April.

Today I was reminded of it because my browser at the office has 11 tabs with Wikipedia pages. I plugged in the laptop after yesterday’s meeting elsewhere, opened the browser, and the 11 tabs came back—but without styling! I had forgotten to plug in the networking cable and apparently Chrome caches the Wikipedia HTML but not the Wikipedia CSS.

Anyway, the code would be something like this:

$ModulesDescription .= '<p><a href="https://alexschroeder.ch/wiki/2017-11-14_CSS_Naked_Day">No CSS Day</a></p>';
*NoCssOldGetCss = \&GetCss;
*GetCss = \&NoCssNewGetCss;
sub NoCssNewGetCss {
  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime($Now);
  # $mon: April is 3
  if ($mday == 9 and $mon == 3) {
    return '';
  } else {
    return NoCssOldGetCss(@_);
  }
}

Untested!

Also, I had never heard of the term “international day” before. The code on the CSS Naked day website has a funkier test than mine above and here’s why:

CSS Naked Day lasts for one international day. Technically speaking, it will be “April 9th” somewhere in the world for 48 hours. This is to ensure that everyone’s website will be publicly nude for the entire world to see at any given time during April 9. [1]

Tags:

Add Comment

2017-11-09 Collaborating without Google

+Robert Freeman-Day recently wrote, slightly edited:

I have posted a couple times about #keybase in the Utopia Social Network community as well as the OSR community on G+. We have seen many posts about the pending death of G+ and some of us have been exploring alternatives.

Keybase is social encryption and identity for (mostly) normal people. It is in beta, but very functional. It has a growing list of existing social networks (Twitter, Facebook, Reddit, etc.) to claim as verified identities. It is a way to digitally state: “yeah, this account is really me and everything I post will come from me”.

Today, I call for adventurous individuals to come play around with Keybase Teams! Let’s see what this can do for discussion and project development amongst the #RPG and #OSR communities!!

Our very own +Alex Schroeder and I have an open team (like slack/hangouts) called osr_community that we would love to see you all at to play. We can create sub-teams within it for whatever your game of choice is, etc. You can talk rules, publishing tips, gather for a project, whatever! They also have a general rpg team that is also open.

They also have end to end encrypted chat, teams, file systems and git repos!

Feel free to message me here in this thread, or direct message if you want help. I can also invite you and this kinda walks you through setup (definitely PM me if you want info on that). Share this with other people interested in the #OSR and #RPG in general.

Finally, if you want to hear a little talk about it you can listen to one of the main programmers talk about it. It is pretty understandable.

Thanks and hope we find and see something interesting!

The thing I find most interesting is the ability to collaborate securely (hopefully!) and outside of Google Docs and Dropbox. Whether Keybase is truly secure I don’t know—unless we’re going to audit the source code we’ll always have to trust someone—but I know that Google and Dropbox aren’t encrypting their data at rest.

Oh well. I don’t think collaborating in role-playing games needs that level of protection, but I think it’s worth getting into the habit of doing as much as possible using encryption.

Tags:

Add Comment

2017-11-06 One Ring

Image 1

In the Black Speech:

Ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul.

Or:

One Ring to rule them all, One Ring to find them,
One Ring to bring them all and in the darkness bind them.

Our wedding ring:

Image 2

Just sayin’.

We’re surely neither the first nor the last couple to do it, but I still like it. We got married nearly ten years ago, on November 24, 207.

Tags:

Add Comment

2017-11-03 libxml2 and Homebrew and Perl

I installed a new Perl and needed to install XML::LibXML.

cpanm XML::LibXML

But that didn’t work. I got an error and in the log file it would say:

running xml2-config...The installed version of libxml2 VERSION 2.9.4
 is not compatible with XML::LibXML (and probably buggy)!

At first I thought it was Homebrew.

brew upgrade libxml2

But the error remained. The key is to temporarily change the PATH:

export PATH="/usr/local/opt/libxml2/bin:$PATH"
cpanm XML::LibXML

This makes sure the correct version of xml2-config gets called.

Tags:

Add Comment

2017-11-03 Perlbrew

I wanted a new Perl!

perlbrew install stable

This turned out to be 5.26.1. I also want all the modules:

perlbrew list-modules | perlbrew exec --with perl-5.26.1 cpanm

But that doesn’t work:

ListUtil.c: loadable library and perl binaries are mismatched (got handshake key 0xd600000, needed 0xd880000)

Apparently, something with my PERL5LIB is wrong:

alex@sibirocobombus:~$ perl -E 'say for @INC'
/home/alex/perl5/lib/perl5/x86_64-linux
/home/alex/perl5/lib/perl5
/home/alex/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1/x86_64-linux
/home/alex/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1
/home/alex/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/x86_64-linux
/home/alex/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1

I checked my .bashrc and found this:

# Setup local::lib
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"

Well, that looks suspicious. I commented this line, logged out, logged in again, and:

alex@sibirocobombus:~$ perl -E 'say for @INC'
/home/alex/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5.24.0/x86_64-linux
/home/alex/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5.24.0
/home/alex/perl5/perlbrew/perls/perl-5.24.0/lib/5.24.0/x86_64-linux
/home/alex/perl5/perlbrew/perls/perl-5.24.0/lib/5.24.0
.
alex@sibirocobombus:~$ perlbrew use perl-5.26.1
alex@sibirocobombus:~$ perl -E 'say for @INC'
/home/alex/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1/x86_64-linux
/home/alex/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1
/home/alex/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/x86_64-linux
/home/alex/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1

This looks good. I’ll have to remember that the current directory is no longer in @INC by default.

Oh, and since we’re already here: what is the list of modules?

Algorithm::Diff
Alien::Base
Alien::Hunspell
Alien::patch
App::cpanminus
Archive::Extract
Authen::SASL
B::Hooks::EndOfScope
CGI
CPAN::DistnameInfo
CPAN::Meta::Check
CPAN::SQLite
Captcha::reCAPTCHA
Capture::Tiny
Class::Accessor
Class::Data::Inheritable
Class::Inspector
Class::Load
Class::Load::XS
Class::Singleton
Cpanel::JSON::XS
Crypt::OpenSSL::RSA
Crypt::OpenSSL::Random
Crypt::Random::Seed
Crypt::Random::TESHA2
Crypt::Rijndael
DBD::SQLite
DBI
DB_File
Data::OptList
Date::Parse
Date::Time
DateTime
DateTime::Format::Mail
DateTime::Format::W3CDTF
DateTime::Locale
DateTime::TimeZone
Devel::GlobalDestruction
Devel::OverloadInfo
Devel::StackTrace
Digest::HMAC
Digest::SHA1
Dist::CheckConflicts
Encode::Locale
Eval::Closure
Exception::Class
Exporter::Tiny
ExtUtils::CChecker
ExtUtils::Config
ExtUtils::Helpers
ExtUtils::InstallPaths
FFI::CheckLib
File::HomeDir
File::Listing
File::ShareDir
File::ShareDir::Install
File::Tempdir
File::Which
File::chdir
File::pushd
GD
Geo::IP
HTML::Parser
HTML::Tagset
HTML::Template
HTML::Tiny
HTML::Tree
HTTP::AcceptLanguage
HTTP::BrowserDetect
HTTP::Cookies
HTTP::Daemon
HTTP::Date
HTTP::Message
HTTP::Negotiate
HTTP::Server::Simple
I18N::AcceptLanguage
IO::HTML
IO::Pipely
IO::Socket::SSL
Image::ExifTool
Imager
Import::Into
JSON
LWP
LWP::MediaTypes
LWP::Protocol::https
List::MoreUtils
List::Util
MIME::Tools
MLDBM
MRO::Compat
Mail
Math::Fractal::Noisemaker
Math::Geometry::Voronoi
Modern::Perl
Module::Build
Module::Build::Tiny
Module::Implementation
Module::Load::Conditional
Module::Runtime
Module::Runtime::Conflicts
Mojolicious
Mojolicious::Plugin::AccessLog
Mojolicious::Plugin::Authentication
Mojolicious::Plugin::CGI
Mojolicious::Plugin::RenderFile
Moose
Mozilla::CA
Net::CIDR::Lite
Net::DNS
Net::HTTP
Net::IDN::Encode
Net::Patricia
Net::SMTP::SSL
Net::SMTP::TLS
Net::SSLeay
Net::Whois::IP
Net::Whois::Parser
Net::Whois::Raw
Package::DeprecationManager
Package::Stash
Package::Stash::XS
Params::Util
Params::Validate
Path::Tiny
Perl
PerlIO::utf8_strict
Pod::Strip
Proc::ProcessTable
RPC::XML
Razor2::Client::Agent
Regexp::IPv6
SVG
Shell::Config::Generate
Shell::Guess
Socket6
Sort::Versions
Sub::Exporter
Sub::Exporter::Progressive
Sub::Identify
Sub::Install
Sub::Name
Sub::Uplevel
Test::CChecker
Test::CleanNamespaces
Test::Deep
Test::Differences
Test::Exception
Test::FailWarnings
Test::Fatal
Test::Manifest
Test::Most
Test::Needs
Test::NoWarnings
Test::Requires
Test::RequiresInternet
Test::Simple
Test::Warn
Test::Warnings
Text::Diff
Text::Hunspell
Tie::CArray
Time::ParseDate
Toadfarm
Try::Tiny
URI
Variable::Magic
WWW::RobotRules
XML::Atom
XML::LibXML
XML::NamespaceSupport
XML::Parser
XML::RSS
XML::SAX
XML::SAX::Base
XML::XPath
XSLoader
local::lib
namespace::autoclean
namespace::clean
utf8::all

I wonder which of these I actually need. How will I ever prune this list? I’ll have to find and run all the Perl applications I have on this system.

Tags:

Add Comment

2017-10-30 Minecraft

DM Peter introduced me to Minecraft (Java Edition) and invited me into his Minecraft Realm. I think this is how I might end up enjoying this game after all.

Tags:

Comments on 2017-10-30 Minecraft

I built a home of wood and glass, an enclosure for chickens and fed them some grain so they multiplied, built roads to connect my home with the homes of other players in this realm, explored a cave, and now just spent nearly two hours building a large tower at the coast while chatting via Skype with Peter as we built the first three floors. It was fun in an unexpected way. No fighting necessary. Just building stuff, exploring the land, looking for resources—the right rocks, the right wood, and so on, returning to our beds as soon as the sun sets.

– Alex 2017-11-11 22:08 UTC


Seen on Google+:

“But.. but.. descending into the unknown dark, with only your sword, wits and torches... Seeing the distant glow of subterranean lava falls, hearing the ominous click and rattle of approaching skeletons. Edging your way along a tiny ledge with only a drop into fathomless darkness below... The sudden gleam of spider eyes in the darkness, the groan of an onrushing zombie hoard, frantic flight through torch-lit darkness. The ominous allure of an unexplored tunnel mouth. The relief of returning to a supply station...” – Jeremy Murphy

“The advance of civilization into the Darkness Underneath, constructing chokepoints and battlements from the cobblestone you mined not moments ago, lighting all of it with torches from coal you just picked up to combat the rising of evil. Descending into the depths and pushing back the wildness with force of your ability to build things.” – Joshua Blackletter

Add Comment

More...

Comments


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 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: Random Face Dreams of Mythic Fantasy ZENOPUS ARCHIVES Random Face Diary Strange Magic: Yeah! A New OSR Logo Troll and Flame Gothridge Manor Planet Emacsen mastodon.weaponvsac.space/@kensanata