Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Log in
Seblog.nl

English posts

Week 7

After reading the first chapter of The Organized Mind last week, I felt like I was working on reducing chaos in my life. This week turned out to be much more chaotic. Imagining a week doesn’t make it necessarily so.

Happened

  • Tuesday I brought my car to the planned service, finally, as it got moved because of my broken foot. It was a “groot onderhoud”, so I was expecting a big bill, but I was really shocked by the price of the new tires. With €1022 this is the biggest car bill I ever paid, apart from the purchase. My Volkswagen Up is one of the cheaper options, but it still made me rethink the whole concept of car ownership. Might blog about this.
  • Improv got cancelled this week, so I went to Prik for Boardgayming for a full night of games. It was a lot of fun, see the list below.
  • As the car got service in Amsterdam West, due to scheduling, I arranged an ebike as alternative transport. I have mixed feelings about driving an ebike in Amsterdam, which I should probably explain in a separate blogpost, but my biggest problem: the rental company had screwed in the board computer, so I couldn’t remove it, but someone on the streets of Amsterdam just pulled until it got loose, leaving me with a heavy bike without any e- anymore.
  • Thursday evening there were even more boardgames. The Boardgayming event is not as big on Thursday as it is on Tuesday, but I still have hopes that it will improve a bit now that the summer is over and the Prik edition is sold out in no time every week.
  • Friday I tried to find a forest to walk a bit with my new barefoot shoes on. It was really nice, you really feel the forest ground through the shoes and feel really connected to the soil. I did two walks of 1 kilometer ... anything more than that felt unsafe, as I am still recovering and you never know if you spot a wolf.
  • The weekend had parties, which went well, considering my feet. Needed to sit a few times, had to be careful about other people not stepping on my foot, and only did some rudimentary dancing, but still, it was nice to be out again.
  • Visited dad both Tuesday and Sunday. Tuesday ended a bit stressful, but by Sunday he seemed better again.

    Played

  • Soggy Biscuits (prototype of the new game by Adrian Collier)
  • Ca$h 'n Guns: Second Edition (cool bluffing game with actual foam guns)
  • Taco Cat Goat Cheese Pizza (gorilla!)
  • Cheese Thief (super fast social deduction, modern classic)
  • Mountain Goats (interesting, but I suck at it because I can't do math that fast)
  • Curios (easy and quick game, nice starter)
  • Feed The Kraken (similar to Secret Hitler, but with an interesting two-way policy selectore)

    Listened

  • “Cars are (REALLY) expensive!” episode of The Urbanist Agenda podcast

    Watched

  • The Godfather (1972)
  • Nausicaä of the Valley of the Wind (1984)

Week 6

It was a strange week with ups and downs, both in life and in my recovery.

Happened

  • Monday was a confusing day at work. Let's leave it at that.
  • Since I heard about it on Tuesday, I shared the new “NOS Journaal in makkelijke taal” with multiple people who I know are trying to learn Dutch. I have always liked the Japanese NHK News Easy and I am so glad we now also have this resource.
  • On Wednesday I took an afternoon off to visit my dad. He’s doing fine again for now, but I want to prioritize seeing him while he is still with us.
  • I’ve been slowly trying to mobilize my left foot again. I am already walking on it, but so far that has been a bit of limping. My goal for this week is to actually put some minor load on it, for example by doing some calf raises while I am sitting. It’s crazy how little power there is, but it’s also nice to see that by Wednesday, the situation had already improved so much. I even once managed to stand single legged on the left side for about 20 seconds.
  • My enthusiasm on Wednesday also made me discover some exercises by following pain and discomfort, moving my feet in ways that was uncomfortable but not too painful. The videos I found online afterwards confirmed my findings: they recommended most of those movements. All the discomfort and immobility was back on Thursday, and for the sake of not rushing things I did not repeat them too much, but it feels good to be in control of the progress.
  • By Friday I felt like there was no progress at all in my walking. It's a bit demoralizing, having pain and knowing that it's probably something I should "go through", but also not being completely certain if this is the correct kind of pain to be seeking out. Am I reducing the soreness, or am I actually hurting my bone?
  • Saturday I went to the Boardgayming XL event, where I played Delta Green again with Y. as DM. We played from 14:00 to 21:00, so practically the whole event. Afterwards, I found A. who did not survive in his game of Nemesis (which was still going on with the other players), so we played a few times with my new game Sky Team, which is a two-player cooperative game in which you are trying to land a plane silently assigning dice rolls to all kinds of buttons and levers you need to balance. It's a really fun game, would recommend.
  • On Sunday, my dad was home again, as usual I went to Leiden to visit him. My stepmom said she saw real progress in the way I walked, compared to last week and compared to Wednesday. I was glad to hear this, did some more balancing on one leg and felt indeed that it improved. I even dared to walk a bit on forefoot, and it went really well and painless. Being my own physiotherapist, looking for natural motions, guided by pain and soreness seems to pay off after all.

    Read

  • The Organized Mind by Daniel Levitin, introduction and chapter 1

    Played

  • Sky Team, successfully landed on Montréal-Trudeau (green), Haneda (green) and Kuala Lumpur (yellow).

    Listened

  • En niemand bleef onaangeraakt (podcast about the HIV pandemic), episode 1

    Watched

  • Fight Club (1999)
  • The Boyfriend (the Japanese gay dating show on Netflix), episode 1-4

Week 5

Another week, and more recovery. I feel like I am almost back to normal now, but I am very aware that I shouldn't think that too fast.

Happened

  • On Monday I went to the doctor again for my foot. We did not do any x-rays, it was mostly just a talk about how it went. She told me I can take off the weird sandal and use normal shoes, that if I have pain I should go back to the weird one, and that I don’t have to come back anymore, as I can probably heal myself on my own. In my head I heard all my international friends scream how Dutch this is, but hey, I am Dutch and I actually prefer this approach.
  • Tuesday I had my first improvisation class. I notice that I blank a lot when playing D&D and I would like to be able to silence my inner critic a bit more and just go with whatever is happening at the table (or in other life situations). The first session was mostly about learning names, but it had some really interesting simple but very hard games.
  • After improv I went to Prik for boardgames, which was the first time I’ve been there since my foot broke. I just stopped by for a tosti and didn’t actually play anything, but it was nice to be able to do so again.
  • Wednesday I felt I practiced enough with normal shoes in and around the house, so took them to the office. Also swapped the electric car I’ve borrowed (no clutch) for my Volkswagen Up again. It’s disturbing how much a fuel car shakes and I feel even more guilty now that I drive it (short distances) again.
  • Friday evening was D&D again, this time with me as DM. I intended to run a homebrew heist, but because there was so much going on this week (I don’t share everything here), I just took a published adventure which turned into less of a heist than I hoped, but was still fun.
  • Saturday I went shopping and to the park, then to the birthday of M., which was a nice social activity with plenty of sofa’s. The shopping was mostly by bike, but I did use normal shoes throughout the day and that all goed every well, considering this is week 5, but I should still be careful.
  • I actually notice that I have more pain in the normal sturdy shoes than I have on bare foot in my house. Granted: in neither case I walk naturally yet, but it made me want to explore something I wanted to try out for a long time, so I bought “barefoot” shoes. They fit well and walking on them is strange but not painful. Will experiment with them carefully.
  • (I didn’t dare to buy the individually toed shoes – search for “Vibram fivefingers” – but I did fit them and they feel amazing and I am going to try to dare to do that.)
  • Sunday I visited my dad again. It's nice that I can move myself enough so that I can actually reach Leiden on my own, and it's also nice that I am recovered enough that I can push his wheelchair through the weekly puzzle that is our hallway. Yet, although I am recovering, from wheelchair to crutches to walking barefoot, he is not and never will. But I am glad we do the things we still have.

    Read

  • The Name of the Wind by Patrick Rothfuss (chapters 23-26)

    Watched

  • Ocean’s Eleven (2001)

Week 4

At the beginning of this week, all hope for a speedy recovery seemed far away, but a week worth of healing is still a lot.

Happened

  • As I wrote previously, Tuesday and Wednesday I started and finished composing a shared document about Hadini's Hotel, the imaginary infinite hotel that we use within the Boardgayming community to hold our Dungeons and Dragons sessions together.
  • On Wednesday, I was in a lot of pain again. I always imagined having a broken bone as a piercing pain, but so far it has been more of a bludgeoned pain. (Using D&D terms here, in Dutch I would express this as "stekende pijn" vs "beurse pijn".) On Wednesday there was piercing pain all of the sudden. I think it's because – even though I have been very religious about wearing the weird shoe while walking – I've been taking it off while sitting down. And sometimes I like to sit down in weird poses, pushing my foot against the chair. From then on, I always wore the weird shoe even more.
  • On Thursday, I saw a man who clearly recently lost his left foot. I am very grateful I have mine still, and that it heals so well so far, even though it seems to go slow at times.
  • My seemingly weekly D&D session was on Friday this week, and it was the second part of A.'s first try at DM'ing. The first part was in week 2 and I used the wheelchair a lot back then, but now I actually cycled to J.'s house and walked the short distances to the elevator and such without crutches. It seemed like I was the least tired person at the table, so many people having been on holidays and festivals, but it was still nice to finish the session.
  • I've been wanting to go to Subcultures again for weeks and Saturday I finally thought it wouldn't be too unreasonable to take the train to Utrecht with my broken foot. I took my Cabin Zero backpack and attached both crutches via the straps on the sides of it. I walked without them to Bijlmer Arena (which is 400 meters) and then in Utrecht I used them both all the way to Subcultures. I don't know why this boardgame store attracts me so much, but I love being there and browsing their (Indie) RPG section. I bought Kids on Bikes: 2nd edition and also visited some other stores in Utrecht before going back early again.
  • Today on Sunday I went to Sassenheim and Leiden again to visit my dad. There are some concerning things, but he seemed doing better today and it was a relaxing afternoon. Today included a combined 3km of walking, and I don't have pain now, so my foot is really healing. I am curious what the doctors will say tomorrow.
  • One good thing that came from the broken foot is that my arms are starting to gain muscle, thanks to the crutches. In the first week, I could not support myself with my arms for very long, but walking through Utrecht this week I noticed that has changed. Let's see if I can keep this promise to myself, but I want to keep training my arms. Thanks to running I could easily support my full body weight on one leg, and the goal is to be able to do the same with my combined arms.

    Read

  • The Name of the Wind by Patrick Rothfuss (chapters 16-23)

Distributed Campaigns: The Hadiniverse

A month ago I wrote that I was now a "Game Master", as I finished the book and ran some sessions. I'm still going strong with that, although I have had the pleasure to be a player to some new GMs as well in the past few weeks.

My shared universe

Most of the sessions I run, I run within a spin-off of the Boardgayming Amsterdam community. At the moment of writing this is a Whatsapp-group with around 50 people, where the habit is to just post a poll, proposing a time, with the options "Player", "Host", "DM" and sometimes "Yes but not this date". People can then vote for the role they want to take in the session and create a new group with only those interested to actually plan the thing. The sessions are always in-person and mostly at someone's house.

The group started playing at first level because D. joined a "normal" Boardgayming event and proposed to DM some D&D games. I missed those first sessions, but later on when J. took over the role of "most active DM of the group" I joined a few sessions. And well, as I was interested and found the book, this was the easiest way for me to just try to DM myself, and that happened.

As a structure, D. invented a central hub to our adventures, which is the magical Hadini's Hotel, an infinite hotel created by a wizard, which has entrance doors in many many cities. When it was first described to me by J., what I saw was an endless tavern (in my minds eye one infinite room with tavern furniture, but with a ceiling), and Hadini was wearing a top hat. This turned out to be a bit like the whisper game: D. later described Hadini's Hotel as a hotel in art deco style ("like The Movies in Amsterdam") and Hadini as wearing a fez. The structure still worked though.

Formalizing Hadini

Thursday I read this post by P. from the RPG Night in Utrecht, a third one in his series on distributed campaigns. In his series, he talks about a few prerequisites: have a number of truths about the world, divide the campaign world into regions and give each GM complete authority over their region, and finally create some non-trivial but traversable boundary between those regions. Read the series for more.

Quite coincidentally, or maybe influenced by the earlier posts, I actually did some work to get this working for Hadini's Hotel this week. I had the idea for a while, but since we're kind of moving out of the summer break, I proposed to the other DMs to call this a new season and to create some structure. To be fair: the main problem I was trying to solve was character progression, as the whole group had been level 4 since March, as non of the active DMs (me included) felt like they had the authority to level up the PCs.

In coming up with some form of structure for leveling up, I also created a page that contained some truths about Hadini's Hotel. This was the moment I found out about the fez. The whole document can since Wednesday be found on the on-purpose old-fashionedly styled page over at Hadini.nl.

But is it really decentralized now?

The main purpose of Hadini's Hotel is to have a shared narrative starting point. Since the Hotel has doors in infinite other places and realms, we can use it to plug in any adventure to PCs who already know each other, or have never met at all. This is also it's biggest downfall though: getting the party outside of the Hotel can be a bit of an exercise.

Several players have reported their character to be "trapped" in the Hotel. Which makes no sense: they leave it for an adventure and two weeks later "oh no", we're in the Hotel again. Comparing this to P.'s notes, where he uses regions: PCs only move to another region if the player is switching to another GM. This means the player has a reason to give the character a reason to change to the other region. This also means that characters are never magically transported back to start (and thus also never against their own will).

The other thing is that there are very little shared truths. Only this week I've canonized a few important (or minor?) details about the Hotel and it's staff, keeping stuff intentionally vague in order to give new DMs stuff to play with, while still giving them some frame of reference to play off of. But the details that are agreed on now seldom influence the actual adventure.

So no, I don't think we're a decentralized campaign now. We're still a series of one-shots with returning characters.

Does it have to be?

Hadini's Hotel doesn't have to be anything, of course. But I notice I am longing for a bit of consistency between sessions, both as a DM and as a player. Running completely unrelated one-shots every time is just a lot of work, as very little work you do for that one session can be carried over to the next one. And players get the feeling they are stuck within the Hotel, especially if they keep being the same level for months.

With the level issue solved, I think Hadini's Hotel can be enough of a structure for me. I am thinking of creating a world on my own, and just use the Hotel as a bridge, but still keeping the principles of the distributed campaign in mind. This will give me some factions and world events to build on in between sessions, and it could be a starting point if someone else also wants to DM in the same world.

New players could also just create a character in this new world and never be at the Hotel. I'll just inform them that it's an option to also be native to some other world if they want to be, as the Hotel can take them here, and they would still have access to the one-shots provided by other DMs using the old structure. If I do accept PCs native to my world, it does mean I would not always start the adventure in the Hotel itself, but just resort to some hand-wavy "you have been hired" kind of thing.

The last thing I want to start playing with is the idea that at the end of the session, the goal for the next session is determined. This is an idea from P.'s post about his open table for Mausritter, and I think it could work for me too. I have ran a "proactive" one-shot that is turning into a two-shot for another group of friends, and I really like the preparation style of just updating the state of the world based on what happened at the table, and keeping track of actual character goals and coming up with twists and backstory for them. I want that in Hadiniverse too.

The first session of this new "season" is next Friday, and I guess I will keep you posted.

Week 3

Recovery goes remarkably fast, yet so slow.

Happened

  • Walking goes better every day. I will stick to the the weird shoe that prevents my foot from bending, but I needed the one crutch less and less, so much that I ditched it at the office since Wednesday.
  • On Thursday I cycled my first long bike route again to a boardgame evening. Unfortunately Amsterdam is a big city, so it was 10 km and 10 km back. I was okay, but back home my foot was a bit more swollen and painful than before. Healing takes a lot of patience. I worked from home on Friday to recover.
  • On Friday I DM’ed a D&D oneshot for friends at home. Well actually, it turned into at least a two-shot, but it was a lot of fun. I tried to apply the principles of the Proactive Roleplaying book I’ve been reading in previous weeks and I think some of that will already pay off in the second session, but I might need a separate blogpost to explain.
  • Today on Sunday I went to see my parents in Leiden and I walked the full kilometer from the trainstation, but with two crutches. My brother was doing some work on the house, so I assisted with holding some ladders. Walking goes better and better, but as I am writing this in the train back there is some pain again. It’s a thin balance.

Read

  • The Name of the Wind by Patrick Rothfuss (chapters 10-15)

Watched

  • Dimension 20’s Escape from the Bloodkeep, episodes 3 and 4

Played

  • Gay Sauna: The Board Game
  • Curios

Week 2

There we are again. I noticed I already dislike the format, but let’s try to stick with it, at least until my foot is healed.

Happened

  • On Monday I got out of my casts! I now have a weird looking sandal that I should wear whenever I want to stand or walk. My foot is still broken, so standing was painful at first, but this gradually improved over the week, although I still need to be careful not to overdo it.
  • Wednesday I went to the office again thanks to a coworker picking me up. This turned the rest of the week in a more normal rhythm, with normal days on Thursday and Friday as well.
  • Thursday evening I had a D&D session at my house with some friends from Boardgayming. It was actually A.'s first time DM'ing, which was very interesting to be a part of, partially because I recognized a few of the feelings and revelations he had behind the screen, but also because I was a player again, which puts the game in a different perspective for me too, now that I have been on the other side of the screen.
  • Saturday I went to Boardgayming XL, thanks to a lift in the car by D. and N., for which I am very grateful. I had ambitious plans for the metro or even cycling, but this was a much safer option to get some boardgames in.
  • Headline of the evening was playing Alice is missing, an RPG guided by cards that takes place in total silence while everybody is texting each other on the phone. A recommendation.
  • Sunday I went to visit my dad, as he seemed to be doing worse over the past fews days, but luckily he was much better today. I might blog about his condition later but not now.

Read

  • A Game Master's Guide to Proactive Roleplaying by Jonah and Tristan Fishel (continued, finished)
  • The Name of the Wind by Patrick Rothfuss (chapter 8-10)

Watched

  • Dimension 20's Fantasy High, season 1, episodes 15 to 16b
  • Dimension 20’s Escape from the Bloodkeep, episodes 1 to 2

Played

  • Dungeon Kart
  • Coup
  • Decrypto
  • Alice is Missing

Week 1

Let's start some week-notes, because my life had a bit of an all-changing this week and I wanted to capture and share some of it in a structured way. Also, I've been wanting to track what I read and write for a while, but individual posts feel too much of a hassle. Let's see if this sticks – I wrote it in a draft file during the week, which worked well, and I even managed to remember to post it!

Happened

  • I broke a bone in my left foot last Saturday on my way to a final Pride party. Of course I was only able to see a doctor on Monday, because "if you walked home, it is not broken". How else was I supposed to get home? My own pain tolerance also fooled me into thinking it was probably not that serious.
  • For the first week, my leg is in a temporary cast, and only tomorrow a doctor is going to predict how long this is going to take. I therefore cancelled a lot of plans for this week, but I still have my hopes up for the coming week. I did however change my ticket for a 14km trail run in the end of September to 7km. I have no idea if that is doable at all, but at least this way I increase my chances. I really hope I can participate (no matter the time) in the 7heuvelenloop in November.
  • While I was able to get crutches at the hospital, I also ordered a wheelchair and a special chair for showering. I got quite handy with those tools very fast, but I also cannot think how I would arrange daily life on my own without it.
  • I went to Leiden for a night and a day, which was nice, but also challenging, because normal things ('sure I can get up the stairs sitting backwards') quickly became very complicated ('okay but how do I get off the ground now that I am on the second floor?'). Luckily my stepmom provided me with a few tools and groceries and drove me back to my own single-floor apartment, and it was just a lovely break of the week.
  • By Thursday I had modified all kinds of things about the wheelchair: I added a shopper in the back, a small pouch to the side, removed the leg stand on the right side, and even attached a spare Philips Hue light switch with some tie-wraps. Sure, the situation sucks, but let’s make it as cool as possible.
  • Saturday I played Delta Green with some friends who were so kind to move the session to my place. It's a roleplaying game in which you are part of a secret organisation that investigates occult things, and our (first time) DM Yicun chose Amsterdam as our setting, with the 3rd of August 2024 as the date. This meant that during the sesson, somewhere on Dam Square a Sebastiaan Andeweg was breaking his foot. I wanted my character Stefan Lennips to be there with a sniper or something, but unfortunately, he was caught up in an investigation of an apartment somewhere in West. Very strange things were happening there indeed.
  • Today I discovered that there was a third point on the paper they gave me at the hospital: not only should I keep my leg high and keep the cast dry from any water; I should also do some exercises with my toes, every hour. This was a total surprise to me: I have been holding my leg as still as possible for the whole week, hoping that would speed up recovery. Tomorrow I'll hear how much this mistake will hurt me in the long run, but I am not too happy about it.

Read

  • A Game Master's Guide to Proactive Roleplaying by Jonah and Tristan Fishel (parts, not finished)

Watched

  • Dimension 20's Fantasy High, season 1, episodes 3 to 14

So now I am a Game Master

I just finished So You Want To Be a Game Master by Justin Alexander, and I guess I am now a Game Master. Well, practically speaking, I already was, because 18 May I ran my first session (with a dungeon from the book) and that was the first of the seven sessions I ran since then. Most of the sessions were in the ever so popular Dungeons & Dragons, but one of them was Pirate Borg.

And I love it. Long time followers of this blog know that 12 years ago, I was deeply into creative writing. Since then, it kind of waned, as I found the game of Go and other hobbies, as well as a job that made me write code all day. More recently, through a Go summer camp, I discovered other boardgames, the Boardgayming Amsterdam community and through that I got into D&D again.[^1]

What I love about it, is that it brings together the storytelling of creative writing, with the mathematics and execution paths of coding, but also just the general social experience of an evening with friends. I even picked up my drawing a bit, albeit mostly for maps.

I still like boardgames, but diving into the RPG-space taught me also a bit more about what I like about those: the story that you tell at the table. Sure, I like to win,[^2] but I am really only able to withstand six hours of Risk because of the epic story that unfolds on the battlefield. Or in my more recently played games: I like to be a member of a house in Night of the Ninja, to be a circus owner in SCOUT, or a radio officer in Captain Sonar.

My next goal is to actually start a campaign, as my seven one-shots are not really sustainable in the long run (so much preparation proportional to the game time). And the general goal is to just get better at improvising at the table, to just go with the flow of where-ever the players want to go. And maybe a subgoal is to write about my progress from time to time here.

It's great to be back in language.

[^1]: Again, because pre-covid I actually played in a campaign as a player, thanks to Mike, Luuk and the others.
[^2]: I wrote about wanting to win in another blogpost.

A more inclusive workspace

The only reason I dare to write any of this is because Henrique wrote about the positives and negatives of his new workplace.

I have a relatively new job too, since March, and one of the things I struggle most with is that my coworkers are much less "my kind of people" than I used to have around me in the previous company, which unfortunately went bankrupt. They are still nice people and most of them mean well, but I don't feel at home.

Last Friday, during lunch time, I found myself suddenly in a homophobic conversation among the three other coworkers at the table. It was the kind of conversation where straight males find an anecdote from their past where they were confronted with homosexuality, and then distance themselves from it by telling how they rejected it in the moment. The group will then encourage this by confirming they wouldn't have that either, and then someone else can take the turn to tell such an anecdote.

Being in the conversation felt like being in a slow train wreck. I looked up from my phone, wondered what was happening here, but then it not only continued, it worsened, with the anecdotes just piling up. It is very hard for any person to break such a chain, even for allies willing to change the subject, and I as an open gay person (to them too!) just did not how to handle this. When the conversation ended I walked away, did a solitary walk around the block and packed my stuff to work from home the rest of the day.

The reaction of my teamlead was good: we scheduled a meeting with someone from HR. After the meeting, I talked it over with two of the coworkers that same Monday, and with the last coworker yesterday, as he wasn't present anymore on Monday. With this, everything should be fine.

But I notice I still feel bad. To be fair, I felt much better on Monday. The reactions of the first two coworkers were really good and I noticed how completely at ease I worked on Monday afternoon. I knew I belonged, that I could sit there behind that desk, that it was my place and that I was valued. That is a very important feeling.

The third coworker was back on Tuesday, and this is the coworker I have caught with homophobic and racist comments before, so I felt a bit more nervous going into this conversation.

He didn't notice there was something wrong with the topic, and he said he did not have the intention of hurting me. I said I could try to help him by being more clear about when a topic wasn't suitable. He agreed. I said that I am actively withholding parts of myself and my opinions from lunch conversations, because I know he has different political views. He said that yes, he is that way, he likes to ventilate. At the end of the conversation the teamlead asked if I wanted to add anything. I said that for that moment, I did not.

I was already dissatisfied when we walked out of the room. I gave my coworker space to be himself (as I always try to) and hoped he would return the favor. He took the space, but offered none. In a way, I now made it my problem to wait for the next homophobic moment. I now have to be watchful again, because it might happen again – dare I say, will happen again. The first time it will be mild, but if I let it slip, it will come back bigger, until we are at full homophobia and full racism again.

I mean this last part is obviously speculation. But it reflects how I envision the situation to go, and how I lost that feeling of being able to just be, to just focus on my work without having to worry about what conversations are happening around me. Inclusivity is an effort, and it should not be on the shoulders of those who are in some minority.

In the conversation with HR, they said they were alarmed because I said "I have as much right to this job as them". Conversations like the one at lunch are a way to subvert that right for minorities, because it makes them be on guard when the straight white cis males can work with all their focus. Help, I even think I played this down a bit for HR, just because I didn't want them to feel so uncomfortable with the thought of homophobia in their company. It wasn't aimed at me right? Maybe they didn't mean it like that? But no: it was very toxic and it should not have happened. And: it is not my job to educate my coworkers.

I don't exactly know what note I want to end on. I guess I want to just thank you for reading. Trying to understand each other and to see life from their perspective is the best thing we can do in these matters.

Chasing the casing in Vim

A lot of programming is really just taking data in one form and turning it into another. Imports and exports. Within different contexts, different conventions apply. Within Laravel, database columns are usually snake_case, yet within PHP most variables are camelCased. Within HTML and CSS, things are usually kebab-cased, until you find a React component, which are usually PascalCased.

Every once in a while I end up copying names from one source and having to turn them into another case. With the Vim language of editing, turning a_cased_string into aCasedString usually involves me typing f_ to jump my cursor to the next underscore, and then x~ to delete that underscore and turn the next character into it's uppercase variant. I then have to do that for however many times there are underscores in my target string. (Subsequent jumps to underscores can be made with ; though.)

The conversion back from aCasedString to a_cased_string is always a bit more bothersome, because you need to insert a lot of underscores. I usually do it with a second pass: use fC to jump to the first insert point, then use i_ and escape to insert the underscore, then jump with fS, and use the . to repeat my last insert. Then when I am done with the string, I use guiw to change the case of the 'inner word' to lowercase (gu).

The nice thing about that approach is that it feels efficient: I am using all kinds of obscure Vim keystrokes to get my work done and I feel like a wizard. I never touch my mouse! The bad thing about the approach is that it is still a lot of work, especially in longer strings or with many occurrences. Today I thought: there must be a better way for this. Maybe there is even a plugin?

And yes there is, and of course it's by Tim Pope. It's called Abolish and it's main purpose seems to be auto-replacement (which I don't want to use) but it also adds a very handy :Subvert command, and precisely the mappings I wanted to have.

If I now every have to change any token to camelCase, I can just jump my cursor to it and type crc. Do I need snake_case? Just crs and that's it, no matter how long it is. And of course it works with the . command as well. Why have I allowed myself to do all the nonsense I just described above? Just install the tpope-plugin and you're done.

Last year I shared a Vim keybinding that I use quite frequently: I mapped gy to "+y, meaning that with the gy I yank text into the system clipboard (without the awkwardness of typing double quote and plus).

I recently added another mapping to it: if I do gY, it will actually yank the full content of the open file into my system clipboard. This saves me the awkwardness of typing gggyG. See my mapping below though: by using the command style yank, I actually don't let the cursor jump, which is much nicer.

nmap gy "+y
vmap gy "+y
nmap gY :%y+<cr>

Mindful boardgaming

So, two weeks ago I wrote about being competitive in boardgames. As I discussed there: I viewed myself as "not competitive", which to me meant that I did not mind losing, and that I would allow others to win if it clearly meant more to them than to me.

This meant that when I was ahead in the game, I would hold back and make smaller moves, just to even the playing field again. I would do this both consciously as well as unconsciously. And seriously: I would say sorry to the other players when I did end up winning. I was a bad winner.

The discussion of two weeks ago changed my mind about this: it is unfair to other players to not give it your all. It is also related to self love (a topic I have been exploring a lot in the past two months): trying to win means you can lose, and you should know that you are still an okay person when you do. Also it's okay to take up the space in a group when you are the winner: you won, you may be seen.

So in the past two weeks I've been trying harder to win, and it changed my experience in boardgames for the better. I didn't necessarily won more, but I am prouder of the wins I did get, and I didn't talk myself down afterwards ("sorry" or "it was just luck"). The wins felt like validation: I am good at games.

At the same time, the loses are indeed hurting a bit more. But I don't see that as a bad thing. I played Unfathomable and lost. But I also identified a few big mistakes in my way of playing the game. Because I was so invested in winning, the mistakes actually hurt, so I will for sure remember not to take on those strategies if I ever play it again. Actually trying to win the game makes you better at games.

That said, I just finished my first in-person Dungeons & Dragons session since 2020, and I really enjoyed it. This is a game that is not about winning at all: it can be endless and it's really just a form of collaborative story telling.

But here also, I made some "mistakes". I felt like I could've tried harder to come up with nice twists for the story (there was a lot of "sure I'll follow" and shooting arrows from a distance). Even though this game is not about winning, there is still a skill and a commitment to bring your best to it. It feels similar to what I call "being competitive".

Two weeks ago I chose the words "therapeutic boardgaming", but I really want to go for "mindful boardgaming" now. Enjoy the moment and give it your best, in that way, you get the best experience.

It's all fun and games

Today, a discussion spawned in a queer boardgaming Whatsapp group I am a member of, about the boundaries of cheating, the value of rules and about competitiveness and fun.

In general, I like to think of myself as 'not competitive'. To me this means I don't try to win in games, but to just enjoy the experience. In the discussion I shared that I sometimes make smaller moves when I have a big lead, to even the game a bit. Not everyone in the discussion liked this.

To give a bit more context: I play the game of Go and I am around 7 kyu. This means that if I go to a tournament, I have no chance of winning a top-3 position, but against someone who knows all the rules but hasn't played before, I have a chance of winning that nears 100%. That's not my style of winning.

To me, the experience of the game is just much more important than winning.

Until someone is holding back

Someone in the discussion said they found it unfair to let someone play with a handicap without them knowing it. I have never thought of my 'holding back' in this way, but I think they have a point. Players are doing their best and they expect me to play to my full ability as well. Holding back undermines the base of the game.

A story related to that: I was playing Ticket to Ride a lot with housemates and they were really fanatic about it. I could just never win: they always completed all their routes, they always went for the longer connections (those get more points) and in general they played efficient.

Then later I joined another friend group, who were already playing Ticket to Ride a lot. I joined their game and won by a huge margin, not just once but several weeks in a row. That is the kind of experience where I feel bad about winning.

But on the other hand: I only learned how to play well because the housemates did not hold back. And my friends also got better because I did not hold back in those first games. Not holding back makes everybody improve their understanding of the game.

The weight of winning

There is another part of not being competitive, which might have to do with the way I look at myself and others. In the past month, I have done a lot of reflecting on self-acceptance and feelings in general. I notice that not wanting to win also has a component of not wanting the attention that comes with it.

And it's not really attention I dislike, because I have it even more in a group I know very well and with people I value a lot. I think this is because the nature of being the 'winner' kind of places you above the rest of the group. It is this aspect I dislike.

But then again: if you agree to play a game, you agree that there will be a winner (depending on which game you pick, of course, but most games work this way). Someone has to fill that role at the end of it. For me personally, I think it would be good to explore my competitiveness a bit more, seeing what happens if I actually try to win.

Trying to win is a bit scary too, because if I actually try, there is still the chance that I loose. It is about valuing myself enough to say "yes I won, I am the best this time", as well as forgiving myself enough to say "I tried and lost, and I am still okay". Therapeutic boardgaming, I guess.

The obligatory post-FOSDEM post

This weekend I went to FOSDEM, an open source conference in Brussels, with Henrique and I thought I ought to blog about it. Let me prefix this with explaining that it was my first time, which meant I did not really know what to expect.

We quickly learned that attending a room wasn't as simple as just going there. There was an interesting talk announced for the Networking room, and after getting a coffee we went there to be just in time, only to find a giant queue of people in front of a door that said the room was full. This pattern repeated itself throughout the weekend.

As Henrique is a train nerd (yes) we got ourselves into the 'Railways and Open Transport' room, for talks about how to count passengers using open source software. It's great how this conference can provide such niche talks and get so many people interested in them. It was not easy to get into the Transport room.

I must admit that the niche also made me feel lost a few times. Everything is so zoomed in, it makes it hard to pick a place to attend, especially since getting into a room is always an investment. The trick is then to just pick a room that sounds interesting and just stay there, let the serendipity hit you.

Since nobody bought a ticket to the event, nor even did have to register, it is quite impossible to know the exact capacity of the event. It was really crowded, but that was mainly a good thing.

A few personal highlights:

  • a thing about state machines in the Erlang/Elixir room (which was next to Transport, so H. stayed there)
  • all the examples of how Liquid prompt provides a better thought-out presentation of information in the terminal
  • the idea that we should design our security features for a person who just had a baby and has a cat who pukes in the corner – we aren't paying perfect attention all the time
  • drinks in Delirium, but also the other nice foods, meeting nice people
  • the motivational talk by the guy who maintains curl, that piece of software that is in almost everything, including most apps, your car and on Mars
  • all the git commands I did or (mostly) did not know about
  • the various tweaks in my dotfiles or other workflows just because someone mentioned something
  • the weird LED-screen badge that everybody had and we finally bought too

It was also really nice to talk almost exclusively in Dutch with Henrique all weekend. It's really amazing how far he has come with learning the language and I am glad I could help him in his efforts by providing casual conversations with an occasional gentle correction.

So all in all, yes, this was a very good weekend and I would go again.

Toggling Github Copilot in Vim with unimpaired

I was trying to remove the Github Copilot configuration from my Vim setup, but then I noticed it was not there at all. I have been neglecting to commit changes to my dotfiles from my MacBook, as I did not have the courage to share stuff I was just trying out. On my new Linux-based Thinkpad I do in fact commit everything, as running open source stuff makes me want to work in public more too.

But since this config was only in the copy of my dotfiles that now lives on ~/dotfiles-mac, it will get lost now that I don't copy it. A good reason to blog about it.

First: unimpaired is a Vim plugin by tpope, and it is one that should just be part of Vim itself. It adds all kinds of mappings with the [ and ] brackets, and many of them I use daily (most notably [q, [e and [space). The o variant of this will change options, with the special yo binding to toggle the option. I use yoh all the time (toggles search highlighting) and also yol is very useful (shows invisible characters).

I wanted to be able to toggle Github Copilot for the current buffer in this same style. Luckily, the g was still available, and luckily, unimpaired provides an easy way to add new mappings. Unlucky as we are, copilot does not actually provide a toggle, but with Ctrl+R and = in insert mode, we can evaluate some internal options and print a string based on that. See the full command below.

" Going with that flow
Plug 'github/copilot.vim'

" Toggle github copilot
nmap <script> <Plug>(unimpaired-enable)g  :Copilot enable<CR>
nmap <script> <Plug>(unimpaired-disable)g :Copilot disable<CR>
nmap <script> <Plug>(unimpaired-toggle)g  :Copilot <C-R>=copilot#Enabled() ? "disable" : "enable"<CR><CR>

As for why I stop with Copilot? It was very useful in my time at Sneaker District, as I was the only developer working on the project and I wanted to be faster than I was on my own. Having a junior developer in my editor was a nice thing to have: it provided me with good suggestions that I usually had to edit a bit.

But I also noticed it slowed me down at times: I got into the habit of stopping to type to see what it would suggest. And sometimes I just stopped to think, and then it would give me suggestions for directions I did not want to go in. For now, I want to experience less distractions, and get into the habit of typing and thinking for myself again.

(There is also some money involved, and the question whether or not you want to send your code to Github for this purpose. It is nice to have those concerns gone, but it wasn't my primary one.)

Floppies

It just hit me. I learned how to code via an article in a Dutch school magazine (Taptoe), which explained how to create a website on a floppy disk. They were already old, but at least our computers had the drives still. The article just explained how to write flat HTML, but it was enough to spark this fascination that ended up being my job.

What hit me is that actually most websites these days won't actually fit on a 1,44 MB floppy anymore. (The content on this site already is more than 1 GB.) It would be a nice challenge again, to make a website fit 1,44 MB.

Related to this is the 10 KB Club, who try to keep their homepage under 10 KB. My site fails that test too, but at least the homepage fits a floppy.

Expanding the search in Vim

I just discovered a new Vim trick I think I am going to use quite often, so I am sharing it here to look it up when I forget.

As you may know, you can issue the / command in Vim to start a search. Every character you type will be in the search, until you hit enter, which will jump you to the first occurance of your searched text.

Another thing you may know, is that you can use this search-motion as a motion to other commands as well. When you do v/here, you will visually select everything between the current cursor position and the first occurance of 'here' in the buffer. I use this to delete stuff that I can't target using the f and t motions.

Then there is the thing I once found out, but never could remember: once you press /, you are in a little submode I can find the name for. In this mode, you can use Ctrl+L and Ctrl+H to increase or decrease your search string by the characters of the first match. You can also use Ctrl+G to move that virtual cursor to the next match, or Ctrl+T to get to the previous. Once you hit enter you are on that last position, removing the need to do n.

But here it comes: when you are deleting with d/, you can also use Ctrl+G to get to that next match. If you searched for a small snippet that accidentally occurs before the place you wanted to go, you can press Gtrl+G to jump over it, and pressing enter will delete the full distance.

Using PHPStan to fill Vim's Quickfix list

I am using PHPStan and the ALE plugin to add some error checking to my Vim. It gives red arrows on lines that contain errors in my currently opened files. But sometimes, in a big refactor, I want to know all errors in my project.

Vim has a build-in feature for this: the quickfix list. It is designed to take the error output of a compiler and lets you jump to all those locations with the :cnext and :cprev commands. I personally use the essential Unimpaired plugin by the one and only tpope, which maps these to ]q and [q.

I use these a lot: the :grep command fills the quickfix list with all the occurrences of your search, like normal grep but with pagination (or, if you set your grepprg to something faster: like ripgrep with pagination).

To get PHPStan to fill this quickfix list, I looked for plugins, but they all seemed hairy. I was convinced this should be simple, and it was. The following leader mapping seems to just work:

nmap <leader>pa :cexpr system('vendor/bin/phpstan analyse --no-progress --error-format=raw')<cr>

Customising Git: some things I did

One thing that always puzzled me a bit about my own workflow, is that almost all of it is based in the terminal (I use Vim and Tmux), except for Git: where most people seem to use the Git CLI commands, I use a graphical program (Fork, which is quite good).

Another thing then: I never used Github professionally, apart from the time I was a self employed web developer, but back then I was the only developer on my projects. All my previous jobs had a self-hosted Gitlab running somewhere.

Long story short: I am trying to get better at Git in the terminal and using Github. And 'better at Git' to me both means 'being able to confidently rebase' as well as 'customise my workflow'.

Aliases in the Gitconfig file

Customising Git means setting configuration in the ~/.gitconfig file. This file contains settings for Git, like your name and email, but can also be used to add aliases. To create the first alias you can run git config --global alias.co checkout. After this, you can use git co as git checkout, which is shorter to type and yes I use this often now.

Another alias I have is this one:

publish = !git push --set-upstream origin $(git symbolic-ref --short HEAD)

If you try to push a branch that has no linked branch on Github (the upstream), Git will complain about it. It will be nice to you and state the command you should have ran, but I got tired of having to copy and paste that new command.

fatal: The current branch feature/new-shoes has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin feature/new-shoes

In Fork, this was just a checkbox away. With my new git publish command I get the convenience again: it will push the branch and set the upstream with the same name as I have locally, exactly as Git suggested I should have done, but in less typing.

Links to Github

So far we have seen two kinds of aliases: one that just aliases a simple Git command (b = branch) and one that actually ran a shell command, because we started it with a ! (note that you will have to start with ! git there). But there is another way: having a command that starts with git- in your path.

I have the following file as ~/bin/git-github, marked as executable (chmod +x ~/bin/git-github) and in my path (export PATH="$HOME/bin:$PATH" in my ~/.zshrc file):

#!/bin/zsh

local url
url=$(git remote get-url $(git remote))
url=$(echo $url | sed 's/.*github\.com[:\/]\(.*\).git$/https:\/\/github.com\/\1/')

if [ -n "$1" ]; then
  append="/$1/$(git symbolic-ref --short HEAD)"
fi

open -u "$url$append"

Yes, my ZSH is crude. Yes, I can better share this in Bash. Yes, it could've probably been on one line and be included as an alias in my Gitconfig. But it works for me.

The command figures out the Github URL of the project, based on the URL of the remote (it assumes you have only one). It then opens that URL with the macOS open command. If an argument is given, it appends that to the URL, with the name of the branch too.

In my Gitconfig I have two aliases that use this command:

pr = github pull/new
compare = github compare

With git github, my default browser will open a tab with the 'homepage' of the repository. With git compare, it will open a tab that contains a diff of the current branch and the default branch on Github (the remote versions of those). With git pr, the browser will open the correct page to open a for the current branch.

And you mentioned Vim and Tmux?

Yes, I actually use the obligatory Tim Pope plugin Fugitive. This means I can do a lot of things which you can also read about in the help file. (Which I read a lot these days.)

But this allows me to stage and commit and rebase and reword all my changes in Vim, and then when I am ready, run :G publish and :G pr and make a PR for it on Github. These two commands alone make me feel so much more productive: no longer do I have to search for another program to compose commits and then search for the browser to handle the cooperative side of it... I just handle everything in my editor.

For Tmux I have another nice addition: in my ~/.tmux.conf I have the following command:

bind-key y display-popup -E -h "90%" "git log --oneline --decorate --graph --all"

This will – when I press <prefix> + y – open a popup window, which closes when the command exits and has a certain height. It will show me an ASCII-art style graph of all the commits – one of the features I missed from Fork – as an overlay over my editor, a small keystroke away.

With this configuration – and a lot of reading the Fugitive help file – I feel much more at home with Git in the terminal.

I also watched this fantastic series on mastering Git and these unfortunately dated but still useful screencasts on Fugitive.

Meer laden