<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Juha-Matti Santala - Community Builder. Dreamer. Adventurer.</title>
  <subtitle></subtitle>
  <link href="" rel="self" />
  <link href="https://hamatti.org" />
  <updated>2026-04-15T00:00:00Z</updated>
  <id></id>
  <author>
    <name>Juha-Matti Santala</name>
    <email>juhamattisantala@gmail.com</email>
  </author> 
  
  <entry>
    <title>Thumbs up for a good adventure</title>
    <link href="https://hamatti.org/posts/thumbs-up-for-a-good-adventure/" />
    <updated>2026-04-15T00:00:00Z</updated>
    <id>https://hamatti.org/posts/thumbs-up-for-a-good-adventure/</id>
    <content type="html">
      &lt;p&gt;
  Pablo Morales is hosting this month’s
  &lt;a href=&quot;https://indieweb.org/IndieWeb_Carnival&quot; class=&quot;notion-text-href&quot;&gt;IndieWeb Carnival&lt;/a&gt;
  and he has invited us to write about
  &lt;a href=&quot;https://lifeofpablo.com/blog/indieweb-carnival-2026-adventure&quot; class=&quot;notion-text-href&quot;&gt;adventures&lt;/a&gt;:
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  Close your eyes for a second. What comes to mind when you think of the word,
  adventure? Do you think of thrill? Do you take a risk?
&lt;/blockquote&gt;

&lt;p&gt;
  I love a good adventure. I love to travel because of the unknown factor. You
  never know what’ll happen, what kind of exciting things you encounter and what
  kind of wonderful people you meet.
&lt;/p&gt;

&lt;p&gt;
  Back in the day when I was around 18-20 years old, I went on to three
  different adventures on consecutive summers, hitchhiking around the country to
  hang out with friends who lived across the nation, seeing parts of the country
  I had never seen traveling by train and meeting incredible, kind people who
  offered me rides.
&lt;/p&gt;

&lt;p&gt;
  What I cherish even more is that it was before the smartphone era. I didn’t
  have full access to everything at every given time. I did have a mobile
  internet dongle for my mini laptop to help me out in a pinch but otherwise I
  was out there, most of the time in the middle of nowhere with nothing but a
  pocket camera, beautiful summer and the kindness of strangers.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/thumbs-up-for-a-good-adventure/1.png.webp&quot; alt=&quot;Finnish countryside on a beautiful summer day. The focus is on a road going towards the horizon in the middle, leaning downwards as it goes. On both sides of the street, there’s lush green forestry and in the sky a few white clouds float on a blue summer sky. &quot; /&gt;
&lt;p&gt;
  One day, I was picked up in the Eastern part of the country by a couple of
  guys who had just had their last day at work and were heading to celebrate
  that. They picked me up, I joined them to the bar, they invited me to watch
  Penguins - Red Wings Stanley Cup finals at their place, let me crash for the
  night and even took me to my next destination the following morning as one of
  them had a meeting there.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/thumbs-up-for-a-good-adventure/2.png.webp&quot; alt=&quot;A sunset, a large pond and a small beach. The pond is surrounded by trees on the opposite side and there’s a couple of buildings peeking from behind the trees. &quot; /&gt;
&lt;p&gt;
  Another day I ended up joining a Finnish baseball (&lt;a href=&quot;https://en.wikipedia.org/wiki/Pes%C3%A4pallo&quot; class=&quot;notion-text-href&quot;&gt;pesäpallo&lt;/a&gt;, significantly different from the American baseball as a sport) game because
  that’s where my ride was going. I was really happy about that because watching
  the sport has always been a delight to me and during these trips I always
  aimed to find a way to see games in towns I’d otherwise never go to.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/thumbs-up-for-a-good-adventure/3.png.webp&quot; alt=&quot;An ocean with a tree covered island on a beautiful sunny summer day. The island has a white church and lots of trees partially covering it from the view. The ocean is deep blue. &quot; /&gt;
&lt;p&gt;
  A different day I ended up working for an evening selling tickets to a student
  event that my friends were organising at a bar because I had no other plans
  and wanted to help out friends. We ended up having such fun discussions during
  the quiet times and I met so many people I would not have otherwise met.
&lt;/p&gt;

&lt;p&gt;
  Unknown adventures are always exciting. One of the best parts of hitchhiking
  is that you cannot have any plans. It’s so liberating. You start your day by
  finding a nice spot leading towards a big road or highway to the direction you
  want to go, lift your thumb and sign (I used to write my destination to a
  cardboard sign to help people make decisions) up and see where the day will
  lead you.
&lt;/p&gt;

&lt;p&gt;
  Sometimes it took 10 hours to get to somewhere 3 hours away. But every single
  day I got somewhere and managed to find a place to sleep — either with friends
  if I reached my goal destination or with strangers if I didn’t.
&lt;/p&gt;

&lt;p&gt;
  Finland is incredibly beautiful, especially during the summer. I’m normally
  quite socially reserved and introverted but when I pick up my backpack and
  head on to adventures, I become surprisingly social, make small talk with
  strangers and look forward to meeting new people.
&lt;/p&gt;

&lt;p&gt;Thanks Pablo for hosting this month’s festival!&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>Small bit of functional graphic design I like</title>
    <link href="https://hamatti.org/posts/small-bit-of-functional-graphic-design-i-like/" />
    <updated>2026-04-08T00:00:00Z</updated>
    <id>https://hamatti.org/posts/small-bit-of-functional-graphic-design-i-like/</id>
    <content type="html">
      
&lt;p&gt;
  I watch a lot of sports. Hundreds of hours every year. All major competitions
  that are broadcast here and some that require finding international sources.
&lt;/p&gt;

&lt;p&gt;
  Last night, I watched another round of UEFA Champions League and every
  broadcast I’ve enjoyed this tiny element in the clock &amp; score graphic in the
  top corner:
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/small-bit-of-functional-graphic-design-i-like/1.png.webp&quot; alt=&quot;A score graphic showing UEFA Champions League logo, game clock at 10:14 and 0-0 score between RMA and BAY. Next to RMA, the outer border is thick white while the same at BAY side is red. &quot; /&gt;
&lt;p&gt;
  The white and red stripes next to the team abbreviations tell you what the
  colours of their kits are. Real Madrid is playing in white while Bayern
  München is playing in red.
&lt;/p&gt;

&lt;p&gt;
  It blends in so well, takes no attention to itself and if you don’t watch a
  lot of games, you might not even realise that’s what the colours stand for.
  That’s what makes it so genius. While it’s almost unnoticeable, it provides
  such a crucial bit of information, especially if the teams generally share a
  colour (which these teams don’t).
&lt;/p&gt;

&lt;p&gt;
  If you join a match mid-game, you don’t have to try to figure out which team
  is which. A quick glance at the top corner to see what the score is and how
  much has been played and you immediately know who is who.
&lt;/p&gt;

&lt;p&gt;
  I often feel that in sports, there’s a lot of assumptions of what the viewer
  should already know. Recognising the kits is one of those things.
&lt;/p&gt;

&lt;p&gt;I love how this design reduces that burden from the viewer.&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>Dungeons &amp; Degenerate Gamblers is the Betamax of casino roguelikes</title>
    <link href="https://hamatti.org/posts/dungeons-and-degenerate-gamblers-is-the-betamax-of-casino-roguelikes/" />
    <updated>2026-04-01T00:00:00Z</updated>
    <id>https://hamatti.org/posts/dungeons-and-degenerate-gamblers-is-the-betamax-of-casino-roguelikes/</id>
    <content type="html">
      &lt;p&gt;
  As 2024 rolled in, we were expecting two exciting games in the casino
  roguelike genre to be published:
  &lt;a href=&quot;https://store.steampowered.com/app/2379780/Balatro/&quot; class=&quot;notion-text-href&quot;&gt;Balatro&lt;/a&gt;
  and
  &lt;a href=&quot;https://store.steampowered.com/app/2400510/Dungeons__Degenerate_Gamblers/&quot; class=&quot;notion-text-href&quot;&gt;Dungeons and Degenerate Gamblers&lt;/a&gt;. It was a great year to be a gamer.
&lt;/p&gt;

&lt;p&gt;
  First came out Balatro in February and as they say, rest is history. It took
  the world by storm and was beloved by everyone and their dog. Six months
  later, Dungeons and Degenerate Gamblers came out but didn’t quite reach the
  hype that Balatro did. I think that’s a shame.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/dungeons-and-degenerate-gamblers-is-the-betamax-of-casino-roguelikes/1.png.webp&quot; alt=&quot;Screenshot of a hand in Balatro scoring over 7 million points &quot; /&gt;
&lt;p&gt;
  Balatro is roguelike deckbuilder that’s loosely based on poker but not really.
  You start the game with a regular 52 card French suit deck and need to play
  poker hands to gain points to beat the level before you run out of hands to
  play.
&lt;/p&gt;

&lt;p&gt;
  Between rounds, you can buy cards to improve your deck: you can add seals and
  enhancements to your cards to get more points or coins from them; you can buy
  Joker cards that add extra effects; you can buy tarot cards that give one off
  abilities; you can buy planet cards to improve your base points for different
  poker hands.
&lt;/p&gt;

&lt;p&gt;
  The goal is to build an engine that increases your points on an exponential
  scale to beat the ever-growing requirements.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/dungeons-and-degenerate-gamblers-is-the-betamax-of-casino-roguelikes/2.png.webp&quot; alt=&quot;Screenshot of Dungeons &amp; Degenerate Gamblers with the player at 18 and the opponent, a psychologist, standing at 20. &quot; /&gt;
&lt;p&gt;
  DDG is a roguelike deckbuilder that’s loosely based on blackjack but not
  really. It’s a game where you fight an opponent by dealing damage to them
  based on your blackjack hands. Regular rules of blackjack apply: you play one
  card at a time to your side of the table and if you go over 21, you go bust.
  If you stand before or at 21, your score and your opponent’s score are
  subtracted from each other and the extra goes through as damage. If you get
  exactly 21, you gain extra bonuses like heal, shields and so on based on which
  suits you played.
&lt;/p&gt;

&lt;p&gt;
  After fights, you can add new cards to your deck to build combos, deal more
  damage, put up shields and more.
&lt;/p&gt;

&lt;p&gt;
  They have so many commonalities: they both start from a casino card game, adds
  wonky cards with nerdy pop culture references that don’t quite fit into a
  poker or blackjack deck and eventually make the game about something very
  different.
&lt;/p&gt;

&lt;p&gt;
  I think DDG is the better game. The cards you get to add to your deck are more
  creative. You can add old baseball cards, Yugioh cards, Pokemon cards, Magic
  the Gathering cards, Slay the Spire cards, birthday cards, credit cards,
  Playstation memory cards, scratch cards and much much more into your deck.
  That’s what really charmed me when I first learned about the game.
&lt;/p&gt;

&lt;p&gt;
  It takes the concept of “card” and jams in every imaginable card from outside
  the world of regular playing cards in a really fun way. There’s even Jimbo
  from Balatro in it. The most ambitious anime crossover of 2024?
&lt;/p&gt;

&lt;p&gt;
  One thing Balatro does better and why I believe it succeeded better is
  &lt;a href=&quot;https://www.youtube.com/watch?v=216_5nu4aVQ&quot; class=&quot;notion-text-href&quot;&gt;the juice&lt;/a&gt;. It’s in the category of addictive “number goes up” games and the developer
  did a wonderful job making that dopamine hit feel good.
&lt;/p&gt;

&lt;p&gt;
  Don’t get me wrong, I do like Balatro. I’ve played almost 100 hours of it and
  have to ratio my gaming sessions to only long weekends and holidays because
  it’s that addictive. But I like DDG more and before either game came out, I
  really hoped it would have been the “winner” of the two.
&lt;/p&gt;

&lt;p&gt;
  Just like VHS beat Betamax in
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Videotape_format_war&quot; class=&quot;notion-text-href&quot;&gt;the videotape wars&lt;/a&gt;, Balatro became the more popular game despite in my opinion not being the
  better game. The good thing is that unlike with the videotape wars, the losing
  side doesn’t disappear so we get to play both of these great games for years
  to come.
&lt;/p&gt;

&lt;p&gt;
  If you have played neither, I can highly recommend both. If you’ve only played
  one, go check the other one out as well.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>From Juhis with Love #013 - Sun is back</title>
    <link href="https://hamatti.org/posts/external-from-juhis-with-love-013-sun-is-back/" />
    <updated>2026-03-31T00:00:00Z</updated>
    <id>https://hamatti.org/posts/external-from-juhis-with-love-013-sun-is-back/</id>
    <content type="html">
      
&lt;p&gt;
  In March issue of &lt;strong&gt;From Juhis with Love&lt;/strong&gt;, I share updates of my
  projects and lovely bits from the internet.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://buttondown.com/juhis/archive/013-sun-is-back/&quot;&gt;Read #013 - Sun is back&lt;/a&gt;.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>I’m building a Python script to create form filling bookmarklets</title>
    <link href="https://hamatti.org/posts/im-building-a-python-script-to-create-form-filling-bookmarklets/" />
    <updated>2026-03-28T00:00:00Z</updated>
    <id>https://hamatti.org/posts/im-building-a-python-script-to-create-form-filling-bookmarklets/</id>
    <content type="html">
      
&lt;p&gt;
  In 2024 I wrote about
  &lt;a href=&quot;https://hamatti.org/posts/automate-filling-form-with-bookmarklet/&quot; class=&quot;notion-text-href&quot;&gt;how I like to create bookmarklets to help me fill in forms&lt;/a&gt;
  on apps and sites I develop. It’s not uncommon to have a dozen or even two
  fields in a form and filling them up over and over again by hand while
  developing gets boring real fast.
&lt;/p&gt;

&lt;p&gt;In that 2024 blog post, I mention&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  Not only is it boring but that boredom can lead to us entering silly or funny
  entries that can sometimes accidentally leak during demos or screenshots or
  database dumps and lead to negative outcomes.
&lt;/blockquote&gt;

&lt;p&gt;
  Until now, I’ve been doing them by hand but this week I wanted to explore this
  problem space a bit more. I figured a nicer interface would be to have a spec
  file (in my case, written in YAML) where I could define all my fields and
  values and then run a script to generate the bookmarklet.
&lt;/p&gt;

&lt;p&gt;
  I wrote the first version of
  &lt;a href=&quot;https://github.com/Hamatti/form-filler&quot; class=&quot;notion-text-href&quot;&gt;form-filler&lt;/a&gt;
  to satisfy my own needs. It’s an open source Python script and if you’re
  interested in simplifying a rather boring aspect of your web dev work, check
  it out.
&lt;/p&gt;

&lt;p&gt;
  Each bookmarklet represents a single use case and is defined in a YAML
  specification file as the example:
&lt;/p&gt;

&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;inputs:
  name:
    type: text
    value: &quot;Jane Doe&quot;
    selector: &quot;#name&quot;
  age:
    type: text
    value: 23
    selector: &quot;#age&quot;
  confirmation:
    type: checkbox
    value: false
    selector: &quot;#confirmation&quot;
  date:
    type: date
    value: &quot;2026-05-25&quot;
    selector: &quot;#date&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Running the script with this example specification will generate a bookmarklet
  that when run, will fill in the given form with the values provided.
&lt;/p&gt;

&lt;p&gt;
  I tend to create a bookmark folder per form and create a bunch of bookmarklets
  to test different scenarios.
&lt;/p&gt;


    </content>
  </entry>
   
  
  <entry>
    <title>How much change is the right amount of change?</title>
    <link href="https://hamatti.org/posts/how-much-change-is-the-right-amount-of-change/" />
    <updated>2026-03-21T00:00:00Z</updated>
    <id>https://hamatti.org/posts/how-much-change-is-the-right-amount-of-change/</id>
    <content type="html">
      &lt;p&gt;
  A fellow Blaugustan Steve from Frostilyte Writes published
  &lt;a href=&quot;https://frostilyte.ca/2026/03/17/i-wish-slay-the-spire-2-had-borrowed-more-from-other-games/&quot; class=&quot;notion-text-href&quot;&gt;a great piece about Slay the Spire 2 this week&lt;/a&gt;. In it, he wished that the developers would have made more changes and
  especially points out how dull and repetitive the early game — especially Act
  1 — can get in a game where you always start with the same deck of cards
  before you get to build your own build.
&lt;/p&gt;

&lt;p&gt;Overall, his criticism of the sequel is very good.&lt;/p&gt;

&lt;p&gt;What stood out for me was this quote:&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  As you might’ve surmised, I’m fairly lukewarm overall on the sequel. A big
  part of that stems from how Slay the Spire 2 doesn’t do much to actually move
  the needle forward. The new artwork is nice, as is the rebalancing of a subset
  of cards from the first game. However, it’s hard to shake the feeling that
  I’ve already played this game before given how much it has in common with its
  predecessor.
&lt;/blockquote&gt;

&lt;p&gt;
  We had a bit of a back and forth discussion about it because for me, that was
  the best part of Slay the Spire 2. I opened the discussion in our Discord chat
  with:
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  For me, that was the biggest relieve when I bought the game. I was worried
  they&#39;d change the game I really enjoyed too much for the sake of changing
  things and so far I&#39;ve been really happy with the new stuff that breath new
  life into the well proven basic gameplay loop.
&lt;/blockquote&gt;

&lt;p&gt;
  This lead to a great discussion about different expectations for sequels and
  what makes a sequel worthy of full price game rather than updates or DLC to
  the original.
&lt;/p&gt;

&lt;hr class=&quot;notion-divider&quot; /&gt;

&lt;p&gt;
  After our discussion, the thought stayed with me and simmered in my mind for a
  few days.
&lt;/p&gt;

&lt;p&gt;
  For a while now, I’ve been planning to write about the difficulty of sequels
  or 2nd seasons for movies and TV shows. There are two shows that have recently
  pushed me towards disappointment with their strong first season and meh second
  season: first one is
  &lt;a href=&quot;https://www.imdb.com/title/tt6794990&quot; class=&quot;notion-text-href&quot;&gt;Absentia&lt;/a&gt;
  and second one is
  &lt;a href=&quot;https://www.imdb.com/title/tt13918776/&quot; class=&quot;notion-text-href&quot;&gt;The Night Agent&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  Both of them had strong opening seasons. They had a good gimmick that
  separated them from other run-of-the-mill agent/alphabet agency stories and
  that kept me immersed to the stories. Their appeal was in the strong storyline
  and less so about specifically interesting characters or world building. So
  when the second seasons rolled out, they lost their charm. They became regular
  stories that unfortunately didn’t carry it for me to enjoy.
&lt;/p&gt;

&lt;p&gt;
  It happens way too often: someone writes a great story, it gets popular and
  then someone decides they need to make a continuation. Not for the purposes of
  telling more great stories but to make money on something popular.
&lt;/p&gt;

&lt;hr class=&quot;notion-divider&quot; /&gt;

&lt;p&gt;
  When it comes to video games, I think there is a fine line between a cheap
  cash grab and not breaking a working, proven model. And it’s very subjective
  too. I can’t always tell why I like minimal changes for one game but am
  disappointed by it for another one.
&lt;/p&gt;

&lt;p&gt;
  With Slay the Spire 2 (by the way, I have written
  &lt;a href=&quot;https://notes.hamatti.org/gaming/video-games/reviews/slay-the-spire-2&quot; class=&quot;notion-text-href&quot;&gt;about it more in my digital garden&lt;/a&gt;, spoiler alert), I was worried the game would change too much. I really
  really liked the first one and was genuinely hesitant to buy the sequel when
  it hit Early Access because I worried they’d change things I loved about it.
  (Spoilers: they didn’t).
&lt;/p&gt;

&lt;p&gt;
  So far, after ~20 hours of play time under my belt, I’m really satisfied with
  the balance of good old stuff and new fresh additions and tweaks. Could the
  new stuff have been a DLC instead of a full game? Probably. Especially the
  parts that I care about. But I’m still happy to pay full price and don’t feel
  like I’ve been duped.
&lt;/p&gt;

&lt;p&gt;
  A related point is controller schemes in games. So much of video gaming for me
  is muscle memory — especially when playing with a controller — that when games
  change how controls work, it irritates me so much. I recently replayed
  &lt;a href=&quot;https://notes.hamatti.org/gaming/video-games/reviews/the-last-of-us&quot; class=&quot;notion-text-href&quot;&gt;The Last of Us&lt;/a&gt;
  and
  &lt;a href=&quot;https://notes.hamatti.org/gaming/video-games/reviews/the-last-of-us-part-ii&quot; class=&quot;notion-text-href&quot;&gt;The Last of Us Part 2&lt;/a&gt;
  and even really small changes to controls took me roughly 80% of the game to
  adjust to and I died a bunch of times because in a heated moment where quick
  reactions needed to happen, I pressed the wrong button.
&lt;/p&gt;

&lt;p&gt;
  Even if the new way of controlling is objectively better and fixes some issues
  with the old one, I would rather have the memorised old system than having to
  learn a new one because that stuff is hard.
&lt;/p&gt;

&lt;p&gt;
  Otherwise Last of Us Part 2 is a brilliant example of a good balance between
  new things while sticking to a good working base. The gameplay is very
  familiar to anyone who has played the first one and most elements are there
  as-is from the original. Yet, through masterful storytelling, the game feels
  like a completely different experience.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>New protocol proposal for indie web: human.json</title>
    <link href="https://hamatti.org/posts/new-protocol-proposal-for-indie-web-human-json/" />
    <updated>2026-03-18T00:00:00Z</updated>
    <id>https://hamatti.org/posts/new-protocol-proposal-for-indie-web-human-json/</id>
    <content type="html">
      
&lt;p&gt;
  The past week or so, the indie web circles have been talking about this
  &lt;a href=&quot;https://codeberg.org/robida/human.json&quot; class=&quot;notion-text-href&quot;&gt;new protocol proposal for a human.json file by Beto Dealmeida&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;Beto describes the background as:&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  One of the problems with the internet today is that a lot of the content is AI
  generated. There&#39;s no way to know for sure if a site is maintained by a real
  human or if it&#39;s just slop. The only way to know for sure is by getting to
  know the authors, which usually takes time and requires developing a
  relationship with them through other channels, like email or social media. But
  what if we could expand that trust by building a web of vouches between sites?
&lt;/blockquote&gt;

&lt;p&gt;
  I really like these kinds of ways of
  &lt;a href=&quot;https://hamatti.org/posts/verifying-identity-online/&quot; class=&quot;notion-text-href&quot;&gt;verifying identity&lt;/a&gt;
  or building trust between people. Not through
  &lt;a href=&quot;https://thelocalstack.eu/posts/linkedin-identity-verification-privacy/&quot; class=&quot;notion-text-href&quot;&gt;corporations destroying our privacy&lt;/a&gt;
  or through governmental proof of identity which can have its own problems.
&lt;/p&gt;

&lt;p&gt;
  For me, it’s not crucial that someone is who they claim in some absolute
  sense. Rather — for example in the case of Mastodon verification — if I know
  you through your website, it’s enough of verification for me to know that the
  person who runs that website is the same person who runs the Fediverse
  account.
&lt;/p&gt;

&lt;p&gt;
  Same kind of thinking applies with the human.json idea. The way it works is
  that you can put a file to your website and then add a
&lt;/p&gt;

&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#60;link rel=&quot;human-json&quot; href=&quot;/human.json&quot; /&amp;#62; &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Inside that file, you state which version of the protocol it’s written for and
  what domain/subdomain/subpath it covers, like
  &lt;a href=&quot;https://hamatti.org/human.json&quot; class=&quot;notion-text-href&quot;&gt;mine&lt;/a&gt;.
&lt;/p&gt;

&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;version&quot;: &quot;0.1.1&quot;,
  &quot;url&quot;: &quot;https://hamatti.org&quot;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Additionally, you can &lt;b class=&quot;notion-text-bold&quot;&gt;vouch&lt;/b&gt; for other
  websites. For example, if you have a file in your site and you want to vouch
  for me, you can add:
&lt;/p&gt;

&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;vouches&quot;: [
    {
      &quot;url&quot;: &quot;https://hamatti.org&quot;,
      &quot;vouched_at&quot;: &quot;2026-03-18&quot;
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;to your human.json.&lt;/p&gt;

&lt;p&gt;
  I started by adding the base version and I’ll be working over the vouches as I
  go forward.
&lt;/p&gt;

&lt;p&gt;
  Other people have been writing about this too.
  &lt;a href=&quot;https://evanhahn.com/human-dot-json/&quot; class=&quot;notion-text-href&quot;&gt;Evan Hahn shared it&lt;/a&gt;
  on Saturday,
  &lt;a href=&quot;https://sethmlarson.dev/ive-added-human-dot-json-to-my-website&quot; class=&quot;notion-text-href&quot;&gt;followed by Seth Larsen&lt;/a&gt;
  the same day who also wrote a Python script that checks who in his RSS feeds
  has added it to their site.
  &lt;a href=&quot;https://foosel.net/til/humanjson/&quot; class=&quot;notion-text-href&quot;&gt;Gina Häußge wrote about it too&lt;/a&gt;.
  &lt;a href=&quot;https://evilgeniuschronicles.org/posts/2026/03/16/human-json/&quot; class=&quot;notion-text-href&quot;&gt;As did Dave Slusher&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  Beto Dealmeida has also written
  &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/human-json-verifier/&quot; class=&quot;notion-text-href&quot;&gt;a Firefox extension&lt;/a&gt;
  that helps you see if sites you visit are within a trust network of people you
  trust.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;What about humans.txt?&lt;/h2&gt;

&lt;p&gt;
  A similar but slightly different approach is
  &lt;a href=&quot;https://humanstxt.org/&quot; class=&quot;notion-text-href&quot;&gt;humans.txt&lt;/a&gt;
  that’s been around for quite a while and is a human counterpart for
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Robots.txt&quot; class=&quot;notion-text-href&quot;&gt;robots.txt&lt;/a&gt;. It’s described as:
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  It&#39;s an initiative for knowing the people behind a website. It&#39;s a TXT file
  that contains information about the different people who have contributed to
  building the website.
&lt;/blockquote&gt;

&lt;p&gt;
  Ned Batchelder explored this idea further in his blog post
  &lt;a href=&quot;https://nedbatchelder.com/blog/202603/humanjson&quot;&gt;Human.json&lt;/a&gt;,
  taking a look at its benefits and pitfalls as well as previous attempts at
  similar things.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>Markdown content split to sections in Eleventy and Nunjucks</title>
    <link href="https://hamatti.org/posts/markdown-content-split-to-sections-in-eleventy-and-nunjucks/" />
    <updated>2026-03-13T00:00:00Z</updated>
    <id>https://hamatti.org/posts/markdown-content-split-to-sections-in-eleventy-and-nunjucks/</id>
    <content type="html">
      
&lt;p&gt;
  Last night, while sitting in the train on my way home, I got
  &lt;b class=&quot;notion-text-bold&quot;&gt;&lt;a href=&quot;https://fediscience.org/@tlohde/116217614055899048&quot; class=&quot;notion-text-href&quot;&gt;nerdsniped&lt;/a&gt;&lt;/b&gt;&lt;a href=&quot;https://fediscience.org/@tlohde/116217614055899048&quot; class=&quot;notion-text-href&quot;&gt;
    into writing another Eleventy post by tlohde&lt;/a&gt;
  who asked if there was a way to separate content from a Markdown post so it
  could be used in multiple parts in the layout. You can read the full question
  in the toot linked earlier.
&lt;/p&gt;
&lt;p&gt;
  I couldn’t resist figuring the puzzle out. Before I had my solution tested,
  &lt;a href=&quot;https://markllobrera.com/posts/eleventy-video-loop-shortcode/&quot; class=&quot;notion-text-href&quot;&gt;Mark Llobrera shared his approach with shortcodes&lt;/a&gt;
  but I wanted to offer an alternative with Filters.
&lt;/p&gt;

&lt;p&gt;Let’s start with the filter. In your Eleventy config, add:&lt;/p&gt;

&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;eleventyConfig.addNunjucksFilter(&quot;split_by_keyword&quot;, (body, index) =&amp;#62; {
  return body.split(&quot;=~=~=~=&quot;)[index];
});&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Here, I decided to use &lt;code class=&quot;notion-text-code&quot;&gt;=~=~=~=&lt;/code&gt; as the
  splitting keyword as that is a beautiful section marker in Markdown but you
  can use whatever you like.
&lt;/p&gt;

&lt;p&gt;
  In your layout (let’s call it
  &lt;code class=&quot;notion-text-code&quot;&gt;layouts/two-parter.njk&lt;/code&gt;), you can then
  do:
&lt;/p&gt;

&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#60;body&amp;#62;
  {{ content | split_by_keyword(0) | safe }}
  &amp;#60;h2&amp;#62;Second part&amp;#60;/h2&amp;#62;
  {{ content | split_by_keyword(1) | safe }}
&amp;#60;/body&amp;#62;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Here, I’m splitting into two. If you sometimes have a need for a three-section
  layout, create a new layout and add another call to content with the filter.
  The same filter works with as many sections as you like but the amount of
  section splits in the layout needs to match the amount of splitting keywords
  in your content or otherwise some parts will be left out.
&lt;/p&gt;

&lt;p&gt;Finally, to use this layout with your Markdown file, you can do&lt;/p&gt;
&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;---
layout: layouts/two-parter.njk
---


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus et
ultricies diam. Vivamus sodales felis sed neque pellentesque, ut
elementum orci laoreet. Quisque lorem est, tempor in lectus sodales,
bibendum faucibus elit.

=~=~=~=

Sed iaculis ligula in volutpat feugiat. Nam eu lacus rhoncus, gravida
eros eget, aliquet mauris. Fusce sit amet convallis purus. Nam sagittis
sit amet ex id sagittis. Nullam mattis urna ut dapibus aliquam. In
imperdiet vitae elit vitae faucibus.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
  and it will render with the first paragraph, then a h2 from the layout and
  then the second paragraph.
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;Update:&lt;/strong&gt; anydigital shared
  &lt;a href=&quot;https://github.com/anydigital/eleventy-blades/blob/main/src/filters/section.js&quot;&gt;this section filter solution&lt;/a&gt;
  in Mastodon that is basically the same idea but with bit more robust code than
  my quick prototype.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>I completed Stardew Valley’s shipping collection — in reverse</title>
    <link href="https://hamatti.org/posts/i-completed-stardew-valleys-shipping-collection-in-reverse/" />
    <updated>2026-03-11T00:00:00Z</updated>
    <id>https://hamatti.org/posts/i-completed-stardew-valleys-shipping-collection-in-reverse/</id>
    <content type="html">
      
&lt;p&gt;
  Gvendolynn’s video
  &lt;a href=&quot;https://www.youtube.com/watch?v=lz37CHoBlTg&quot; class=&quot;notion-text-href&quot;&gt;Completing the Entire Stardew Valley Shipping List in Reverse Order&lt;/a&gt;
  inspired me to give the challenge a go and experience the game in a new way.
  It was more fun than I expected.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  The rules and goals of this challenge
&lt;/h2&gt;

&lt;p&gt;
  &lt;a href=&quot;https://www.stardewvalley.net/&quot; class=&quot;notion-text-href&quot;&gt;Stardew Valley&lt;/a&gt;
  is a RPG style farming game that was published 10 years ago where the player
  engages in variety of activities like farming, combat, fishing, mining,
  foraging and relationships. There are multiple things the game tracks for what
  it calls Perfection, an achievement of doing mostly everything in the game.
&lt;/p&gt;

&lt;p&gt;
  One of these things is
  &lt;a href=&quot;https://stardewvalleywiki.com/Collections#Items_Shipped&quot; class=&quot;notion-text-href&quot;&gt;a shipping list&lt;/a&gt;. There are — at the time of this challenge — 154 unique items in this list.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-completed-stardew-valleys-shipping-collection-in-reverse/1.png.webp&quot; alt=&quot;154 items of Stardew Valley shipping collection, split to three individual screens. A full list of these items can be found in the wiki linked above. &quot; /&gt;
&lt;p&gt;
  The goal of this challenge is to ship
  &lt;b class=&quot;notion-text-bold&quot;&gt;at least one of each item, &lt;/b&gt;filling the
  collection tab.
&lt;/p&gt;

&lt;p&gt;
  &lt;b class=&quot;notion-text-bold&quot;&gt;Rule #1: &lt;/b&gt;On any given day, you can only ship
  items that have already been shipped on previous days or is the last item on
  the list that has not yet been shipped. So the first item you can ship is a
  Powdermelon, then the following day you can ship Broccoli, then Summer Squash
  and so on.
&lt;/p&gt;

&lt;p&gt;
  &lt;b class=&quot;notion-text-bold&quot;&gt;Rule #2: &lt;/b&gt;You are not allowed to sell anything
  outside this list or through any other means. This means you can’t sell
  regular fish, artifacts, gems and so on.
&lt;/p&gt;

&lt;p&gt;&lt;b class=&quot;notion-text-bold&quot;&gt;Rule #3: &lt;/b&gt;No mods.&lt;/p&gt;

&lt;p&gt;
  These three are my rules and if you want to complete the challenge with
  different rules or don’t agree with mine, you’re welcome to do it however you
  want.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Preparing and planning&lt;/h2&gt;

&lt;p&gt;
  I started preparing for this challenge by copying the list of items in reverse
  order and making notes about how I figure this would go.
&lt;/p&gt;

&lt;p&gt;
  I identified a couple of items I considered “chokepoints”. Items that I cannot
  just decide to buy and grow and ship.
&lt;/p&gt;

&lt;p&gt;These are:&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted_list&quot;&gt;
  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://stardewvalleywiki.com/Mystic_Syrup&quot; class=&quot;notion-text-href&quot;&gt;#8 Mystic Syrup&lt;/a&gt;
    that requires reaching Foraging
    &lt;a href=&quot;https://stardewvalleywiki.com/Mastery_Cave&quot; class=&quot;notion-text-href&quot;&gt;Mastery&lt;/a&gt;
    which means you need to first reach level 10 on each of the five skills
    (Farming, Foraging, Mining, Fishing and Combat) and then gain another 10 000
    experience points to reach first level of Mastery and using that to unlock
    Foraging Mastery.
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://stardewvalleywiki.com/Radioactive_Bar&quot; class=&quot;notion-text-href&quot;&gt;#11 Radioactive Bar&lt;/a&gt;
    and
    &lt;a href=&quot;https://stardewvalleywiki.com/Radioactive_Ore&quot; class=&quot;notion-text-href&quot;&gt;#12 Radioactive Ore&lt;/a&gt;
    that require either
    &lt;a href=&quot;https://stardewvalleywiki.com/Quests#Danger_In_The_Deep&quot; class=&quot;notion-text-href&quot;&gt;Danger in the Deep&lt;/a&gt;
    or
    &lt;a href=&quot;https://stardewvalleywiki.com/Quests#Skull_Cavern_Invasion&quot; class=&quot;notion-text-href&quot;&gt;Skull Cavern Invasion&lt;/a&gt;
    Mr. Qi’s Special Order to be active. For that to be active, you need to 1)
    complete either the Community Center or JojaMart Community Development
    Projects to unlock Ginger Island and 2) gather 100 golden walnuts to unlock
    Mr Qi’s room.
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://stardewvalleywiki.com/Ostrich_Egg&quot; class=&quot;notion-text-href&quot;&gt;Ostrich Egg&lt;/a&gt;
    which is quite an elusive item that requires Ginger Island access and either
    finding
    &lt;a href=&quot;https://stardewvalleywiki.com/Journal_Scraps&quot; class=&quot;notion-text-href&quot;&gt;10 Journal Scraps&lt;/a&gt;
    or a tiny probability of finding one in a rare chest in the Volcano. This
    has usually been one of the last things I get in a regular full Perfection
    run.
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://stardewvalleywiki.com/Void_Egg&quot; class=&quot;notion-text-href&quot;&gt;Void Egg&lt;/a&gt;
    and
    &lt;a href=&quot;https://stardewvalleywiki.com/Void_Mayonnaise&quot; class=&quot;notion-text-href&quot;&gt;Void Mayonnaise&lt;/a&gt;
    require either an upgraded Coop and a low-probability Witch event or
    donating 60 items to the Museum and gaining access to Krobus.
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    Not quite a chokepoint because it’s easy to achieve but needs to be taken
    into account: to gain access to
    &lt;a href=&quot;https://stardewvalleywiki.com/Tea_Leaves&quot; class=&quot;notion-text-href&quot;&gt;Tea Leaves&lt;/a&gt;
    (and then Green Tea), you need 2 hearts friendship with
    &lt;a href=&quot;https://stardewvalleywiki.com/Caroline&quot; class=&quot;notion-text-href&quot;&gt;Caroline&lt;/a&gt;. It’s not hard but it takes a bit of time so if you want to guarantee you
    don’t get a gap between days, you should do it early.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  On my early notes before starting, I considered
  &lt;a href=&quot;https://stardewvalleywiki.com/Smoked_Fish&quot; class=&quot;notion-text-href&quot;&gt;#10 Smoked Fish&lt;/a&gt;
  to be the main money maker in this run and I did focus quite a lot on it
  during the run. We’ll learn later I was wrong.
&lt;/p&gt;
&lt;h3&gt;My planned approach&lt;/h3&gt;
&lt;p&gt;
  Since
  &lt;a href=&quot;https://stardewvalleywiki.com/Dried_Fruit&quot; class=&quot;notion-text-href&quot;&gt;Dried Fruits&lt;/a&gt;
  and Smoked Fish are very early on the list, I made a decision to start on a
  &lt;a href=&quot;https://stardewvalleywiki.com/Farm_Maps#Map_Types&quot; class=&quot;notion-text-href&quot;&gt;Riverlands Farm&lt;/a&gt;
  because that comes with a free
  &lt;a href=&quot;https://stardewvalleywiki.com/Fish_Smoker&quot; class=&quot;notion-text-href&quot;&gt;Fish Smoker&lt;/a&gt;
  and that I would choose the Bat Cave when presented with that because it comes
  with a free
  &lt;a href=&quot;https://stardewvalleywiki.com/Dehydrator&quot; class=&quot;notion-text-href&quot;&gt;Dehydrator&lt;/a&gt;. What I didn’t think at this point was that you unlock the cave once you’ve
  earned 25 000 money so that didn’t come into play at all because that was very
  late.
&lt;/p&gt;

&lt;p&gt;
  While you cannot sell anything, you can gain income through
  &lt;a href=&quot;https://stardewvalleywiki.com/Quests#Help_Wanted_Quests&quot; class=&quot;notion-text-href&quot;&gt;Help Wanted quests&lt;/a&gt;
  and
  &lt;a href=&quot;https://stardewvalleywiki.com/Quests#List_of_Special_Orders&quot; class=&quot;notion-text-href&quot;&gt;Special Orders&lt;/a&gt;
  but until you can sell your first crops in the winter of year 1, you’ll be
  very limited with your money.
&lt;/p&gt;

&lt;p&gt;
  Since money is tight and we still need a ton of farming experience to reach
  Mastery, I focused on crops that regrow: strawberries in Spring, blueberries
  in Summer and cranberries in Fall. This way, I could maximize the amount of
  experience points I gain per money spent and all of these are fruit so I can
  sell them relatively early as Dried Fruit once I reach that point.
&lt;/p&gt;

&lt;p&gt;
  Another early money maker is
  &lt;a href=&quot;https://stardewvalleywiki.com/Dried_Mushrooms&quot; class=&quot;notion-text-href&quot;&gt;Dried Mushrooms&lt;/a&gt;
  so as soon as I was able to, I crafted a dozen
  &lt;a href=&quot;https://stardewvalleywiki.com/Mushroom_Log&quot; class=&quot;notion-text-href&quot;&gt;Mushroom Logs&lt;/a&gt;
  to gain consistent supply of mushrooms to dry and sell.
&lt;/p&gt;

&lt;p&gt;
  Lastly, I decided for the first time in my life to go with the Joja route. I
  have owned this game for over 9 years and have played for way over 1000 hours
  but I have never bought a Joja membership before. This time I did because I
  figured I need to get to Ginger Island early and getting all the specific
  items for the Community Center would be very difficult given I had almost no
  money to spend.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;The actual gameplay&lt;/h2&gt;

&lt;p&gt;
  I mostly followed my plan, realizing way too late that smoking fish didn’t
  matter at all.
&lt;/p&gt;

&lt;p&gt;
  I can’t remember when was the last time I played this game without mods. It
  was kinda painful. Not having access to quality of life improvements like the
  information UI Info Suite 2 displays makes planning way harder when you can’t
  know what crops are growing, when they’ll be ready or where you are in your
  skill progression.
&lt;/p&gt;

&lt;p&gt;
  One of the first realizations was that reaching Fishing level 10 with just the
  Bamboo Rod is so much harder and time consuming compared to buying a better
  rod and using bait like I usually do. Spending money on the fishing rods
  wasn’t a smart thing since you can’t get money back from fishing until year 2
  or so. I got to level 10 fishing around mid-summer, year 1.
&lt;/p&gt;

&lt;p&gt;
  As is usual, Foraging was the hardest skill to complete. I crafted
  &lt;a href=&quot;https://stardewvalleywiki.com/Crafting#Seeds&quot; class=&quot;notion-text-href&quot;&gt;Wild Seeds&lt;/a&gt;
  and prioritized getting to Steel Axe to access Secret Woods to get hardwood
  and experience.
&lt;/p&gt;

&lt;p&gt;
  I completed Joja Community Development Projects in Winter 20th, Year 1 and
  after fixing the boat, I gained access to Ginger Island Winter 22nd, Year 1
  which was way faster than I expected. The Special Orders that open in the
  beginning of Fall net you a ton of money that I wasn’t expecting to be that
  big.
&lt;/p&gt;

&lt;p&gt;
  I eventually gained Mastery on Spring 8, Year 2 and reached the first level of
  Mastery on the 18th. I gained access to Mr. Qi’s room on Spring 22, Year 2.
&lt;/p&gt;

&lt;p&gt;
  I got super duper lucky that my first Qi’s task was the Skull Cavern Invasion
  that I needed. That was a lucky strike as I that could have been weeks, even
  months before it showed up. I kept spamming the first floor of Skull Cavern
  over and over again until I was able to get 6 Radioactive Ore and got even
  luckier that I got a Rabbit’s foot on the first trip to the Skull Cavern.
&lt;/p&gt;

&lt;p&gt;
  I managed to get a
  &lt;a href=&quot;https://stardewvalleywiki.com/Banana_Sapling&quot; class=&quot;notion-text-href&quot;&gt;Banana Sapling&lt;/a&gt;
  by trading 5 Dragon Tooth to Island Trader on Spring 26, Year 2 and the Rusty
  Key by donating 60 items to the Museum on Summer 3, Year 2.
&lt;/p&gt;

&lt;p&gt;
  Finally, Summer 14th Year 2 I collected my first Mystic Syrup and then kept
  shipping items one by one until the end of the challenge. At the time I got
  the Mystic Syrup, I had everything else ready as I spent the time waiting for
  that tree to grow and the syrup to happen building the required animal
  buildings. Basically after that day, I slept, shipped the new allowed item and
  slept some more.
&lt;/p&gt;

&lt;p&gt;
  I made 90% of my money from selling Dried Strawberries. As soon as I got the
  Greenhouse unlocked, I filled it with strawberries and did the same in Ginger
  Island. When I shipped my first Smoked Fish, I already had all the money I
  needed to complete the challenge.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Challenge retrospective&lt;/h2&gt;

&lt;p&gt;
  I had a lot of fun with this challenge, even though some aspects like reaching
  Mastery without upgrading other tools than my axe was kinda painful and
  annoying. But it forced me to play in a very different way than I usually do:
  I couldn’t go my regular route of buying ~500 blueberry seeds on Summer 1 to
  finance everything. I think I had money to buy like 20 of them instead and
  couldn’t even sell them.
&lt;/p&gt;

&lt;p&gt;
  I finished the run in 35 hours. I may have done nothing else all weekend and
  I’m not sure if it was worth it but I had a blast and had no other
  responsibilities so I’m kinda happy I did.
&lt;/p&gt;

&lt;p&gt;
  What surprised me, I only had one gap between shipping. That was the gap from
  Winter 14, Year 1 after I had shipped Raisins to Summer 14, Year 2 when I
  managed to ship a Mystic Syrup. Everything else was shipped the day after the
  previous. So there were only 56 days when I didn’t ship something.
&lt;/p&gt;

&lt;p&gt;
  I also expected to need Skull Cavern much more. I expected to need it to gain
  majority of my experience for mining and combat but I didn’t as the regular
  mines provided more than enough. I only did one run there.
&lt;/p&gt;


    </content>
  </entry>
   
  
  <entry>
    <title>Au revoir, Eleventy</title>
    <link href="https://hamatti.org/posts/au-revoir-eleventy/" />
    <updated>2026-03-04T00:00:00Z</updated>
    <id>https://hamatti.org/posts/au-revoir-eleventy/</id>
    <content type="html">
      &lt;p&gt;
  I learned about the
  &lt;a href=&quot;https://www.11ty.dev/&quot; class=&quot;notion-text-href&quot;&gt;static site generator Eleventy&lt;/a&gt;
  in the spring of 2018 from a colleague of mine. It had
  &lt;a href=&quot;https://www.11ty.dev/docs/versions/&quot; class=&quot;notion-text-href&quot;&gt;just released&lt;/a&gt;
  version 0.3.1 when I built the first Eleventy-based version of this website.
&lt;/p&gt;

&lt;p&gt;
  Ever since, it’s been my go-to tool for all my website needs. It would be an
  understatement to say I’ve enjoyed building sites with it. Its simplicity and
  the full control it provides have been unchallenged and I haven’t felt the
  need to even look elsewhere.
&lt;/p&gt;

&lt;p&gt;
  I’ve built dozens of websites with it in the past 6 years. I’ve
  &lt;a href=&quot;https://hamatti.org/blog/eleventy/&quot; class=&quot;notion-text-href&quot;&gt;written about it&lt;/a&gt;
  (according to 11ty Bundle’s listing, I’m a top 10 author which is kinda cool),
  taught others how to build sites with it and talked about it in various
  meetups.
&lt;/p&gt;

&lt;p&gt;
  Now, Eleventy is no more. Yesterday, it was rebranded as
  &lt;a href=&quot;https://www.kickstarter.com/projects/fontawesome/build-awesome&quot; class=&quot;notion-text-href&quot;&gt;Build Awesome&lt;/a&gt;
  with a start of a crowdfunding campaign by Font Awesome.
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  Eleventy becomes Build Awesome. The engine stays the same. The scope grows.
&lt;/blockquote&gt;

&lt;p&gt;
  It’s going to a direction I won’t follow. Almost everything in that campaign
  is making me feel that the direction is not towards something I care about.
  It’s corporate, it’s &lt;i class=&quot;notion-text-italic&quot;&gt;product &lt;/i&gt;and it’s about
  features I don’t care about. While I don’t believe big changes will come to
  the core static site generator, I’ve seen this kind of change enough times to
  know when it’s my time to part ways.
&lt;/p&gt;

&lt;p&gt;
  1.5 years ago I
  &lt;a href=&quot;https://hamatti.org/posts/website-self-sustenance-checkup/&quot; class=&quot;notion-text-href&quot;&gt;wrote about how it’s important for me that I have limited amount of
    external dependencies&lt;/a&gt;
  for building my website:
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  Eleventy itself is also a 3rd party dependency but since it’s a Javascript
  library that I download to my computers when I install it, it’s not gonna be
  able to “just disappear” like a SaaS service like Notion could.
&lt;/blockquote&gt;

&lt;p&gt;
  I’m really happy about that: I’ll pin my Eleventy to the current version and
  store a forever copy on my computer so I can keep using it in the future as
  well.
&lt;/p&gt;

&lt;p&gt;
  In a fast moving technology industry having been able to use the same tool for
  almost 6 years is amazing. Zach has been an excellent developer and driver for
  the project and the amazing community has been a key reason for me to get so
  excited about the tool itself. And in this economy, I can’t blame anyone for
  wanting to figure out a more sustainable way to finance their work.
&lt;/p&gt;

    </content>
  </entry>
   
   
  
  <entry>
    <title>Happy 10th birthday Stardew Valley</title>
    <link href="https://hamatti.org/posts/happy-10th-birthday-stardew-valley/" />
    <updated>2026-02-26T00:00:00Z</updated>
    <id>https://hamatti.org/posts/happy-10th-birthday-stardew-valley/</id>
    <content type="html">
      
&lt;img src=&quot;https://hamatti.org/assets/img/posts/happy-10th-birthday-stardew-valley/1.png.webp&quot; alt=&quot;Five pixel art pink cakes &quot; /&gt;
&lt;p&gt;
  A
  &lt;a href=&quot;https://stardewvalleywiki.com/Pink_Cake&quot; class=&quot;notion-text-href&quot;&gt;pink cake&lt;/a&gt;
  is in order for the celebrations!
&lt;/p&gt;

&lt;p&gt;
  Published in February 26th 2016, Stardew Valley has reached a very mature age
  of 10 years and it’s incredible how much excitement and enjoyment it still
  brings me. Not quite daily because I need to ratio how much I dare to play.
  The game is one of the “oops, it’s 4am” games so I mainly these days limit it
  to longer holidays.
&lt;/p&gt;

&lt;p&gt;
  With recorded 1,165.9 hours in Steam (excluding time playing when offline),
  it’s my most played non-sports, non-TCG video game. I bought the game for my
  29th birthday a year after its release.
&lt;/p&gt;

&lt;p&gt;
  Stardew Valley is in many sense a wonderful game. Developed by a single
  developer ConcernedApe, the game has received regular large updates and the
  7th update is coming some time in the future. Imagine buying a game for like 5
  euros and then receiving a decade worth of well crafted updates that keep
  improving the game — for free.
&lt;/p&gt;

&lt;p&gt;
  It’s not only the developer who keeps improving the game. There’s a very
  active modding community with
  &lt;a href=&quot;https://hamatti.org/posts/stardew-valley-mods-i-use/&quot; class=&quot;notion-text-href&quot;&gt;a ton of great mods&lt;/a&gt;
  of all sorts: quality of life improvements, visual changes, new characters and
  stories. Whenever I feel like I’m getting bored with the game, switching to a
  new story mod or getting an official update brings me back for dozens of
  hours. Over and over again.
&lt;/p&gt;

&lt;p&gt;
  As a teenager, I fell in love with
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Harvest_Moon_(video_game)&quot; class=&quot;notion-text-href&quot;&gt;Harvest Moon games&lt;/a&gt;. I loved the cozy vibes, farming and relationship building. Stardew Valley
  is what you could call &lt;i class=&quot;notion-text-italic&quot;&gt;heavily inspired&lt;/i&gt; by
  Harvest Moon games. It brought that experience to PCs and improved on a ton of
  different things and captured the hearts of millions of players around the
  globe.
&lt;/p&gt;

&lt;p&gt;
  If you haven’t played Stardew Valley yet, I highly recommend giving it a go.
  But maybe do it during a weekend — just in case.
&lt;/p&gt;

&lt;p&gt;Thanks Eric for this wonderful game!&lt;/p&gt;

&lt;p&gt;
  To celebrate the anniversary, Eric published
  &lt;a href=&quot;https://www.youtube.com/watch?v=geiTg6Z7w3A&quot; rel=&quot;nofollow noreferrer&quot;&gt;a video looking back at different old builds from game&#39;s history&lt;/a&gt;. He also revealed two new marriage candidates that he had promised for 1.7
  update.
&lt;/p&gt;


    </content>
  </entry>
   
  
  <entry>
    <title>Different notebook sizes for different ideas</title>
    <link href="https://hamatti.org/posts/different-notebook-sizes-for-different-ideas/" />
    <updated>2026-02-18T00:00:00Z</updated>
    <id>https://hamatti.org/posts/different-notebook-sizes-for-different-ideas/</id>
    <content type="html">
      &lt;p&gt;
  My workflow of taking notes, brainstorming, sketching, scribbling has settled
  to three different notebook/sketchbook sizes for different types of ideas.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  Pocket notebook for everyday pondering
&lt;/h2&gt;

&lt;p&gt;
  My main notebook is a Moleskine Classic Pocket. A couple of years ago
  &lt;a href=&quot;https://hamatti.org/posts/a-peek-into-my-pocket-notebook/&quot; class=&quot;notion-text-href&quot;&gt;I wrote about how I use it&lt;/a&gt;
  and that is still accurate. I always keep it with me either in my winter
  jacket’s pocket or in my backpack and whenever I sit down at a pub or a
  restaurant or just need a moment to clear my head, I pull it out and write.
&lt;/p&gt;

&lt;p&gt;
  It’s a great tool for flesh out blog post drafts, journal about major
  milestones in life or clear my head when things get rough. Its small size
  makes it easy to keep always with me but mainly works for purely text-based
  note taking due to its smaller size.
&lt;/p&gt;

&lt;p&gt;
  It has a pocket at the end which is lovely for keeping index cards for ad-hoc
  notes, business cards, stickers and other things that can come handy when on
  the road.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  A5 size notebook for ideation
&lt;/h2&gt;

&lt;p&gt;
  The second notebook I keep with me always is A5 sized notebook. I use it for
  more functional brainstorming and planning. I rarely write about my thoughts
  on these notebooks nowadays.
&lt;/p&gt;

&lt;p&gt;
  What I do write and draw are plans for events I organise, software I build,
  courses I plan and so on. A5 is a perfect size for that: it’s small enough to
  be practical to carry around and fit on a small coffee table but provides
  enough space to spread ideas around on different layouts and a full spread
  offers enough space usually to sketch one thing and keep it all on view at
  once.
&lt;/p&gt;

&lt;p&gt;
  Actually, I have multiple of these notebooks: one for personal notes and one
  for
  &lt;a href=&quot;https://hamatti.org/posts/as-a-developer-my-most-important-tools-are-a-pen-and-a-notebook/&quot; class=&quot;notion-text-href&quot;&gt;work notes&lt;/a&gt;. While working as a developer, I regularly spend a lot of time away from
  computer with my physical notes as I think through writing so I can figure out
  what code to write.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  A4 sketch book for big ideas
&lt;/h2&gt;

&lt;p&gt;
  Last fall, I received an A4 sized sketch book as a gift. Before that, I hadn’t
  really used notebooks of that size as I found them a bit inconvenient but as I
  appreciated the gift, I wanted to give it a go.
&lt;/p&gt;

&lt;p&gt;
  And I’ve been blown away by how increasing the canvas has given space for
  different types of sketching.
&lt;/p&gt;

&lt;p&gt;
  A4 works really well both in portrait and landscape depending on what I’m
  thinking through. For software stuff, I may draw landscape architecture
  drawings or design UIs but when I plan a workshop content and material, I turn
  the page to portrait orientation and have a lot of space to work through my
  thoughts and ideas.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  Relationship between paper and digital
&lt;/h2&gt;

&lt;p&gt;
  I treat my paper notebooks mostly as “fleeting ideas”. It’s a starting point
  rather than a long-term, searchable library. That’s what my digital notes —
  stored in Markdown files (rather than locked down in a 3rd party proprietary
  format) — are for. I don’t however transform everything from notebooks to
  digital.
&lt;/p&gt;

&lt;p&gt;
  I transfer, or rather &lt;i class=&quot;notion-text-italic&quot;&gt;transform, &lt;/i&gt;the most
  important ideas to the digital realm. I often then add a reference to where I
  originally wrote about it so I can find the initial thinking process if I want
  to understand where it came from. To be able to do that, I have a big box of
  previous notebooks.
&lt;/p&gt;

&lt;p&gt;
  When I finish a notebook, I create a digital note where I jot down the index
  of that particular notebook. Page numbers and page titles. Nothing else. That
  way, if I remember I’ve written about something in paper, I can search the
  index digitally and then go and find the right notebook.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>Them weird dreams</title>
    <link href="https://hamatti.org/posts/them-weird-dreams/" />
    <updated>2026-02-11T00:00:00Z</updated>
    <id>https://hamatti.org/posts/them-weird-dreams/</id>
    <content type="html">
      &lt;p&gt;
  I’ve never been excellent at waking up to alarm clock, especially early in the
  morning. I basically sleep through the alarms, turning them off without waking
  up — kinda like sleepwalking but more like sleep-turning-off-alarm-clocking.
  Weirdly, it’s considered as a personal character flaw even though nobody can
  control themselves while they are sleeping.
&lt;/p&gt;

&lt;p&gt;
  Anyway, I have this one really weird subcategory of dreams that happen
  occasionally when I really need to wake up early and sleeping in has
  consequences. I happened to have one of those this morning and still remember
  it so I wanted to share it.
&lt;/p&gt;

&lt;p&gt;
  My theory is that these dreams trigger after the first alarm. My brain knows
  something’s up but it sabotages its own opportunity for success.
&lt;/p&gt;

&lt;p&gt;
  This morning, I had a doctor’s visit at 8 so I wanted to wake up at 6. The
  last dream I remember from the night was that I had to complete 4 tasks (which
  were coded in a video game style guests) before I could wake up.
  &lt;i class=&quot;notion-text-italic&quot;&gt;Obviously&lt;/i&gt;, it wasn’t quite that
  straight-forward. Almost always, the trick is that either one of them is
  impossible within the dream’s fabricated reality to achieve or they keep
  switching around so that I’m always one short.
&lt;/p&gt;

&lt;p&gt;
  Somehow then, I get stuck in that loop for a long time — or sometimes what
  feels like a long time — before somehow resolving it. Unfortunately sometimes
  it means I wake up hours late because I spent so much time stuck in that loop.
  It’s kind of a groundhog day style dilemma but completely in a dream state so
  I have very little active agency to solve the problem.
&lt;/p&gt;

&lt;p&gt;Today, I luckily woke up early enough and made it to my appointment.&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>IndieWeb Carnival hosting Q&amp;A with Zachary Kai</title>
    <link href="https://hamatti.org/posts/indieweb-carnival-hosting-qa-with-zachary-kai/" />
    <updated>2026-02-04T00:00:00Z</updated>
    <id>https://hamatti.org/posts/indieweb-carnival-hosting-qa-with-zachary-kai/</id>
    <content type="html">
      &lt;p&gt;
  I hosted my first
  &lt;a href=&quot;https://indieweb.org/IndieWeb_Carnival&quot; class=&quot;notion-text-href&quot;&gt;IndieWeb Carnival&lt;/a&gt;
  in May 2024 on the topic of
  &lt;a href=&quot;https://hamatti.org/posts/indie-web-carnival-may-2024-creative-environments/&quot; class=&quot;notion-text-href&quot;&gt;creative environments&lt;/a&gt;
  and I’m hosting another one in May 2026 with a new topic.
&lt;/p&gt;

&lt;p&gt;
  While waiting for May,
  &lt;a href=&quot;https://zacharykai.net/&quot; class=&quot;notion-text-href&quot;&gt;a fellow carnivalist Zachary Kai&lt;/a&gt;
  (who is hosting this month’s carnival with the topic of &lt;a href=&quot;https://zacharykai.net/notes/icfeb26&quot;&gt;Intersecting
  Interests&lt;/a&gt;, you should participate!) reached out to do a bit of a Q&amp;A with me
  about hosting the carnival. In addition to me, he has also
  &lt;a href=&quot;https://roadlessread.com/lists/iwc#host-interviews&quot; class=&quot;notion-text-href&quot;&gt;asked a bunch of others&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  The original one was posted in
  &lt;a href=&quot;https://roadlessread.com/lists/iwc#host-interviews&quot; class=&quot;notion-text-href&quot;&gt;Zachary’s site&lt;/a&gt;
  but I wanted to share my answers in my blog as well.
&lt;/p&gt;
&lt;h3&gt;What drew you to this theme?&lt;/h3&gt;
&lt;p&gt;
  My theme was creative environments. At the time, I was unemployed and spent
  more time than usual following my creative ideas — mostly writing — and spent
  a lot of time doing that outside of my home: in the libraries, pubs, trains
  and so on.
&lt;/p&gt;

&lt;p&gt;
  To me, leaving home and going somewhere with vibrant life and buzz was a major
  influence in my own creativity. I was wondering how others experienced the
  effect of their environment to their creative process so I picked that theme.
&lt;/p&gt;

&lt;p&gt;
  Manu&#39;s
  &lt;a href=&quot;https://peopleandblogs.com/&quot; class=&quot;notion-text-href&quot;&gt;People and Blogs&lt;/a&gt;
  was an inspiration as well. Around the same time, I had read a bunch of
  stories from fellow bloggers on the topic through their interviews for that
  publication.
&lt;/p&gt;
&lt;h3&gt;Did you consider any other prompts before settling?&lt;/h3&gt;
&lt;p&gt;
  No. It was already something I had been thinking about and when I was
  encouraged to host one myself, I immediately knew where I wanted to go with
  it. I have been thinking about other prompts ever since though which led me to
  pick up another hosting spot for this following May where we&#39;ll explore love
  letters.
&lt;/p&gt;
&lt;h3&gt;How did you decide on your prompt&#39;s wording?&lt;/h3&gt;
&lt;p&gt;The main part of my prompt was:&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  What kind of environments you create in and what works for you or what you’d
  like to improve. Has things changed lately? If yes, was it intentional or
  forced and how has it affected your creative energy?
&lt;/blockquote&gt;

&lt;p&gt;
  I had an idea for what I wanted to ask: how different environments affect
  people&#39;s creativity and output (or does it even affect at all). I wanted to
  keep it bit vague and open however because there are so many different people
  participating in these carnivals and I wanted to give everyone an opportunity
  to explore it from their perspective.
&lt;/p&gt;

&lt;p&gt;I added a&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  Or you can interpret in a different way that I didn’t even consider when
  choosing the topic. World is your oyster.
&lt;/blockquote&gt;

&lt;p&gt;
  prompt to explicitly give people the permission to write about whatever they
  wanted — it is their blog after all! While I appreciate the narrowed focus
  these kinds of thing bring, I always enjoy open prompts that allow me to write
  about whatever fits my blog best so I tried to offer the same to people
  participating in my festival month.
&lt;/p&gt;
&lt;h3&gt;Did hosting change how you think about the theme?&lt;/h3&gt;
&lt;p&gt;
  Not really. I expected this to be a thing that affects people differently and
  the posts reflected that. Some people didn&#39;t see an effect at all and they
  wrote wherever they happened to be at, some were similar to me that they got
  their ideas flowing best when they were outside of home and others found their
  creativity best when in familiar environment at home.
&lt;/p&gt;
&lt;h3&gt;Did the submissions surprise you in any way?&lt;/h3&gt;
&lt;p&gt;
  I wouldn&#39;t say surprised by I was definitely delighted! I got 26 entries and
  many of them from blogs that I hadn&#39;t followed before. There was a lovely
  diversity of people doing different things, people from around the globe and a
  few that led to me staying in touch and continuing discussions about variety
  of topics in the year and half that followed.
&lt;/p&gt;

&lt;p&gt;
  Hosting a carnival is a wonderful opportunity to learn about new things, new
  perspectives and meet new people. I highly recommend it for everyone!
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>Taskmaster UK Series 7 is peak entertainment</title>
    <link href="https://hamatti.org/posts/taskmaster-uk-series-7-is-peak-entertainment/" />
    <updated>2026-01-28T00:00:00Z</updated>
    <id>https://hamatti.org/posts/taskmaster-uk-series-7-is-peak-entertainment/</id>
    <content type="html">
      &lt;p&gt;
  For years, I’ve been working on an ultimate
  &lt;a href=&quot;https://www.taskmaster.tv/&quot; class=&quot;notion-text-href&quot;&gt;Taskmaster&lt;/a&gt;
  Tier List. But they keep making more of them all around the world and I
  haven’t quite gotten to the finish line of writing about all of them yet. I
  think I’ve seen them all — not just the UK ones but all 13 different countries
  and a bunch of really well done fan editions as well. Hundreds of hours of
  peak fun.
&lt;/p&gt;

&lt;p&gt;
  If you’re not familiar with the show, Taskmaster is a masterpiece TV comedy
  game show that originated from the UK and has spread around the globe in
  various qualities. In the show, 5 comedians, actors or generally public
  figures complete tasks set to them by the Taskmaster and get judged by their
  performance.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  I shouldn’t find Taskmaster so fun
&lt;/h2&gt;

&lt;p&gt;
  Before I talk about why I love series 7 so freaking much, I need to talk about
  why I’m baffled by this format. On paper, it’s antithetical to what I find
  interesting. I’m a stickler to the rules and I hate any type of games or
  competitions that participants don’t take seriously or where the rules and
  scoring is not transparent and consistent.
&lt;/p&gt;

&lt;p&gt;
  Taskmaster is none of that. It’s completely arbitrary in scoring and pretty
  much every task has some kind of a carefully designed loophole solution and
  part of the fun of the show is trying to figure out how you would have
  completed them and seeing if any of the contestants find those loopholes.
&lt;/p&gt;

&lt;p&gt;
  Despite all of this being something I generally find uninteresting, this show
  has kept me audibly laughing for over a decade — even on multiple rewatches.
&lt;/p&gt;

&lt;p&gt;
  Alex Horne, the Taskmaster’s assistant and the mastermind behind the tasks for
  UK (and some other shows) is simply amazing. Greg Davies, the UK Taskmaster is
  so funny and has great chemistry with most of the guests throughout its
  already 20 seasons and many specials.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  Series 7 of the UK show is the best
&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/taskmaster-uk-series-7-is-peak-entertainment/1.png.webp&quot; alt=&quot; &quot; /&gt;
&lt;p&gt;
  While I’ve been rewatching different series and writing my tier list, I keep
  bouncing between a couple of different series to nominate the best. New
  Zealand has 6 stellar seasons and gun to my head, I’m not sure I can decide
  whether I enjoy their second season or UK’s 7th the most.
&lt;/p&gt;

&lt;p&gt;
  Today, I’m calling UK Series 7 the best because I just rewatched it for the
  umpteenth time and want to talk about it.
&lt;/p&gt;

&lt;p&gt;The cast of the 7th series is&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted_list&quot;&gt;
  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://www.jamesacaster.com/&quot; class=&quot;notion-text-href&quot;&gt;James Acaster&lt;/a&gt;
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://www.jessknappett.com/&quot; class=&quot;notion-text-href&quot;&gt;Jessica Knappett&lt;/a&gt;
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://kerrygodliman.com/&quot; class=&quot;notion-text-href&quot;&gt;Kerry Godliman&lt;/a&gt;
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://www.philwang.co.uk/&quot; class=&quot;notion-text-href&quot;&gt;Phil Wang&lt;/a&gt;
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://rhodgilbertcomedian.com/&quot; class=&quot;notion-text-href&quot;&gt;Rhod Gilbert&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  All five of them are funny as heck and as is so important in this show, their
  chemistry with each other is brilliant. It’s only rivaled by the wonderful
  five of the aforementioned NZ season 2’s cast.
&lt;/p&gt;

&lt;p&gt;
  James, Jessica, Kerry and Phil are the wild young kids and Rhod is the weird
  uncle and Greg is the disappointed dad. It’s even more funny because Rhod and
  Greg are real-life friends which comes up all the time as Rhod is sparing no
  shots as he heckles Greg throughout the series.
&lt;/p&gt;

&lt;p&gt;
  Each of the 10 episodes is pure fire. There are not a lot of comedy TV shows
  that I actually laugh at out loud when watching but with this series, I’m
  constantly laughing.
&lt;/p&gt;

&lt;p&gt;
  Episode 7 is also home to the best individual moment in all hundreds of
  episodes across all Taskmaster shows. It’s so monumental that the stage where
  final task of each episode takes place is called The Knappett these days and
  why I always come back to this series when I need a good feel moment. I won’t
  spoil it for you.
&lt;/p&gt;

&lt;p&gt;
  The outcome of a Taskmaster series is a result of multiple factors: the cast
  and their chemistry, the tasks, the team compositions (they have team tasks
  throughout the series and split teams to two and three people) and of course,
  how the contestants perform (+ the amazing editing that goes into the show).
  Sometimes even a strong group in paper can fall flat and sometimes another
  group surprises.
&lt;/p&gt;

&lt;p&gt;
  This one gets all of it so right. There’s a ton of interaction between the
  participants in the studio sections which really ties it together. You can see
  that they truly enjoyed being there together.
&lt;/p&gt;

&lt;p&gt;
  If you’re new to the show or haven’t seen the 7th yet, find it and take a
  look!
&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>I made a board game zine</title>
    <link href="https://hamatti.org/posts/i-made-a-board-game-zine/" />
    <updated>2026-01-21T00:00:00Z</updated>
    <id>https://hamatti.org/posts/i-made-a-board-game-zine/</id>
    <content type="html">
      &lt;p&gt;
  Say hello to
  &lt;a href=&quot;https://zine.hamatti.org/&quot; class=&quot;notion-text-href&quot;&gt;Roll the Zine&lt;/a&gt;, a board and card game focused 8-page zine.
&lt;/p&gt;

&lt;p&gt;
  I really like the idea of
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Zine&quot; class=&quot;notion-text-href&quot;&gt;zines&lt;/a&gt;
  and for a few years, I’ve been reading other people’s zines and spent time
  reading zine forums, dreaming of making one myself. I’ve always felt zines are
  beyond my skills as I can’t draw or illustrate or write poems or anything like
  that.
&lt;/p&gt;

&lt;p&gt;
  After a couple of sleepless nights sick in my bed to start off 2026, I decided
  it’s time to make one to get something going. I have some ideas for zines that
  have been living rent free in my head but decided to start practicing the art
  of making them with something with smaller stakes.
&lt;/p&gt;

&lt;p&gt;
  Hence, Roll the Zine. It’s an 8-page zine with words about games I enjoy. In
  the first issue, I wrote about Wingspan, Print and Play games, Dandân,
  Tinderblox and Hive. I wanted to challenge myself and my need to write
  comprehensive and structured things. Some of the text is slightly tilted,
  paragraphs don’t align perfectly and some pages have less text and bigger
  pictures. I was definitely way outside my comfort zone with some of the layout
  decisions.
&lt;/p&gt;

&lt;p&gt;
  I’m so used to publishing in the web (this blog and
  &lt;a href=&quot;https://notes.hamatti.org/&quot; class=&quot;notion-text-href&quot;&gt;my digital garden&lt;/a&gt;) where I can link to other things that I found it difficult to adjust to a
  print medium. I’m publishing the zine as a PDF as well but I wanted it to be
  first and foremost a printed paper zine and to operate within that constraint.
&lt;/p&gt;

&lt;p&gt;Here’s an example page about Wingspan:&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-made-a-board-game-zine/1.png.webp&quot; alt=&quot;Zine page about Wingspan board game with five paragraphs of text and a black-and-write illustration of a bird sitting on top of a post. &quot; /&gt;
&lt;p&gt;I’m quite happy about how it turned out.&lt;/p&gt;

&lt;p&gt;
  With this zine, the process was definitely the most important bit: I learned a
  lot about technical stuff (like how to lay out pages so they print correctly)
  and about the constraints of page space (as in the web there’s always a lot of
  space and ability to link to more stuff).
&lt;/p&gt;

&lt;p&gt;
  If you’re into board games or zines, give it a look! I’d love to hear your
  opinions about it.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>Gaming for busy people</title>
    <link href="https://hamatti.org/posts/gaming-for-busy-people/" />
    <updated>2026-01-14T00:00:00Z</updated>
    <id>https://hamatti.org/posts/gaming-for-busy-people/</id>
    <content type="html">
      &lt;p&gt;
  I enjoy playing games, both video games and board games a lot. One of my many
  joys in life is to spend an entire day either diving deep into a long story of
  a video game or get together with friends to move tokens around boards on a
  table while having a great time.
&lt;/p&gt;

&lt;p&gt;
  As an adult in modern life, these full gaming days are few and far between so
  my gaming has shifted a lot lately to play more games that can be enjoyed in
  shorter sessions while still enjoying them equal amounts.
&lt;/p&gt;

&lt;p&gt;
  A big shift for me started with
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Nintendo_Switch&quot; class=&quot;notion-text-href&quot;&gt;Nintendo Switch&lt;/a&gt;
  and later continued with
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Steam_Deck&quot; class=&quot;notion-text-href&quot;&gt;Steam Deck&lt;/a&gt;
  as both of them are mobile and crucially, they both provided a sleep mode
  where you could suspend the device mid-game without having to save and exit.
  That combination meant I can pick up a device, immediately jump into the game,
  play a 10 minute session during a break and then put it back to sleep and
  continue my day.
&lt;/p&gt;

&lt;p&gt;
  For both devices, I have a dock in my living room connected to my projector
  and full AV setup but I also have secondary docks at my desk connected to my
  display and in the case of Steam Deck, my keyboard and mouse.
&lt;/p&gt;

&lt;p&gt;
  Once I started getting into this mindset, I ended up buying and playing more
  games that didn&#39;t require me to remember where I was the last time I left off.
  Heavier story-based or base-building games also take a while to immerse myself
  into the world so they are not great for short sessions.
&lt;/p&gt;

&lt;p&gt;
  Natural genre for this kind of gaming is
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Roguelike&quot; class=&quot;notion-text-href&quot;&gt;roguelikes&lt;/a&gt;
  and
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Roguelike#Rogue-lites_and_procedural_death_labyrinths&quot; class=&quot;notion-text-href&quot;&gt;roguelites&lt;/a&gt;. You start each run from scratch and in many games the individual runs are
  short, anywhere from a few minutes to an hour. Other great genre that is
  perfect for short sessions is sports games where individual games usually last
  less than half an hour.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  Short-session game recommendations
&lt;/h2&gt;

&lt;p&gt;
  I recently returned to
  &lt;a href=&quot;https://notes.hamatti.org/gaming/video-games/reviews/lonely-mountains&quot; class=&quot;notion-text-href&quot;&gt;Lonely Mountains&lt;/a&gt;
  to do mountain biking and downhill skiing. Each run is only a couple of
  minutes long so it&#39;s really easy to adjust based on how much time you have to
  play. In Lonely Mountains: Downhill, you&#39;re descending mountain trails with
  your bike, finding new routes, enjoying nature and trying to beat your
  previous personal bests. In the sequel Lonely Mountains: Snow Riders you
  switch the bike to skiis and enjoy the snowy mountains.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Slay_the_Spire&quot; class=&quot;notion-text-href&quot;&gt;Slay the Spire&lt;/a&gt;
  is a deckbuilding roguelike where your goal is to use your cards to beat
  monsters in three, increasingly difficult act and gather new cards and relics
  to improve your deck. A single, completed run lasts around an hour but most of
  the runs don&#39;t finish successfully so in reality a single run is way less than
  that.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Into_the_Breach&quot; class=&quot;notion-text-href&quot;&gt;Into the Breach&lt;/a&gt;
  is a turn-based strategy game where you are controlling mechs in an 8 by 8
  grid, trying to defend the world from alien attacks. You control three to five
  war machines and alternate taking turns with the opponent. Each run has five
  different areas, each split to smaller sections for individual fights with
  individual goals. After each area, you get to improve your mechs based on how
  well you performed.
&lt;/p&gt;

&lt;p&gt;
  The 2025 hit game
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Blue_Prince&quot; class=&quot;notion-text-href&quot;&gt;Blue Prince&lt;/a&gt;
  operates on day cycle where the mansion resets each night. Every time you walk
  through an unopened door, you get to draft a new room from a small selection
  of randomly selected rooms and your goal is to figure out the mysteries the
  mansion hides.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://pokerogue.net/&quot; class=&quot;notion-text-href&quot;&gt;PokéRogue&lt;/a&gt; is a
  fan-game set in the Pokémon universe that focuses solely on battling. Each
  run, you select a starting party and go through a battle after battle against
  wild Pokémon and fellow trainers. You catch new Pokémon, level up and evolve
  your party members and purchase items from the shop to keep your party going.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Shogun_Showdown&quot; class=&quot;notion-text-href&quot;&gt;Shogun Showdown&lt;/a&gt;
  is a turn-based, puzzle-esque roguelike fighting game. You are a samurai
  equipped with a few starting weapons and you battle opponents in small, tight
  2D-space moving left and right and queueing attacks you unleash to your
  opponents. It&#39;s a really neat game: the mechanics are simple but have enough
  depth to be interesting. Compared to many other games on the list, there&#39;s
  less variation between individual runs, especially in the early sections but
  it&#39;s still a fun game that I haven&#39;t ran out of replay value yet.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>I added BookLore to my homelab</title>
    <link href="https://hamatti.org/posts/i-added-booklore-to-my-homelab/" />
    <updated>2026-01-07T00:00:00Z</updated>
    <id>https://hamatti.org/posts/i-added-booklore-to-my-homelab/</id>
    <content type="html">
      
&lt;p&gt;Happy 2026!&lt;/p&gt;

&lt;p style=&quot;
    background: var(--callout-background);
    color: var(--callout-color);
    padding: 1em;
    border-radius: 10px;
  &quot;&gt;
  &lt;strong&gt;Update:&lt;/strong&gt; In March 2026, there was drama around BookLore and
  eventually the developer either deleted or privated the repository and all
  accompanied materials. There&#39;s now a fork called
  &lt;a href=&quot;https://github.com/grimmory-tools/grimmory&quot; style=&quot;color: var(--callout-color)&quot;&gt;Grimmory&lt;/a&gt;
  that is aiming to continue on the footsteps. I haven&#39;t looked into it yet so
  can&#39;t vouch for it yet but if you wonder why the links below take you nowhere,
  check out Grimmory instead.
&lt;/p&gt;

&lt;p&gt;
  First of my holiday projects was to set up
  &lt;a href=&quot;https://github.com/booklore-app/booklore&quot; class=&quot;notion-text-href&quot;&gt;BookLore&lt;/a&gt;
  to my homelab to manage my e-books. It’s a pretty nice full system that allows
  you to manage your collection but also provides an interface to read the books
  and an OPDS server that can be used for example with KOReader to sync your
  reading progress across different systems.
&lt;/p&gt;

&lt;p&gt;
  I don’t yet use KOReader on any of my devices and I don’t intend to read my
  books in browser so at this point, it’s mainly to gather all my e-books from
  various sources like my NAS, iPad, Kindle and laptops to a single location.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-added-booklore-to-my-homelab/1.png.webp&quot; alt=&quot;Screenshot of Booklore web app with 12 Martha Wells’ books shown out of 113 books total in library. &quot; /&gt;
&lt;p&gt;
  For example, I recently purchased Martha Wells’ Murderbot series from Humble
  Bundle and I’m planning to read through them next year, maybe taking a head
  start already during the holidays. BookLore allows me to easily check what
  book’s coming next, keep track of my notes and reviews and so on, even if I
  still manually download the books to my devices for reading.
&lt;/p&gt;

&lt;p&gt;
  I’m willing to be that some time next year, having access to this system will
  motivate me to maybe get a Kobo reader to make it easier to read from my own
  collection.
&lt;/p&gt;

&lt;p&gt;
  The best part of BookLore is that it’s running in my bedroom so I own my data
  and it’s open source so I can add things to it if I find a need for something
  it doesn’t provide out of the box.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>Year in Review 2025</title>
    <link href="https://hamatti.org/posts/year-in-review-2025/" />
    <updated>2025-12-31T00:00:00Z</updated>
    <id>https://hamatti.org/posts/year-in-review-2025/</id>
    <content type="html">
      &lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;
  In
  &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Big_Fat_Quiz_of_the_Year&quot; class=&quot;notion-text-href&quot;&gt;Big Fat Quiz of The Year&lt;/a&gt;
  2016, Mel Giedroyc described her year as:
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  It was absolutely cracking. Marvellous. Every month rolled by better than the
  last. May, May was really good. May was a cracker. August, even better than
  May. September, it was so brilliant.
&lt;/blockquote&gt;

&lt;p&gt;I want to have even 10% of her positivity.&lt;/p&gt;

&lt;p&gt;
  It’s time for another end-of-year reflection post. I started writing these in
  &lt;a href=&quot;https://hamatti.org/posts/year-in-review-2016/&quot; class=&quot;notion-text-href&quot;&gt;2016&lt;/a&gt; after
  a friend of mine had started doing the same and they’ve become not only a nice
  habit to wrap up a year but also a nice time capsule for me. Years go by and
  over time they meld together and it’s hard to remember what life has brought
  to me.
&lt;/p&gt;

&lt;p&gt;
  So here’s my review of 2025, a year that finally brought some positive hope
  into life after a few ones I’d rather wish had gone differently.
&lt;/p&gt;

&lt;p&gt;
  Sprinkled in are some pictures from throughout the year from important
  moments.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/year-in-review-2025/1.png.webp&quot; alt=&quot;A rainbow coloured massive Slinky in the darkness of Finnish winter in January. &quot; /&gt;
&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  What I hoped for 2025 last year?
&lt;/h2&gt;

&lt;p&gt;
  Rather than set up new year’s resolutions, I like to set a few hopes or goals
  for the year — some of them I complete and others not so much.
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  &lt;b class=&quot;notion-text-bold&quot;&gt;I want to become a better writer.&lt;/b&gt; I haven’t
  quite figured out the metrics for that yet though. It’s hard to know if my
  output improves in quality. Over a lunch with a friend, we brainstormed this a
  bit and one outcome we came up with was to write more long-form stuff this
  year. Something akin to a book - but probably not an actual book.
&lt;/blockquote&gt;

&lt;p&gt;
  My writing goal for this year was not one to be easily measured. The previous
  year, I set my goal to publishing 100 posts and reached that but I didn’t feel
  it would be meaningful to raise it from there as that wouldn’t really benefit
  me.
&lt;/p&gt;

&lt;p&gt;Instead, I wanted to become better at writing, whatever that would mean.&lt;/p&gt;

&lt;p&gt;
  Recently, over the last couple of years, I’ve noticed more and more that I
  actual enjoy my own writing and feel proud of my pieces. And I don’t seem to
  be the only one.
&lt;/p&gt;

&lt;p&gt;
  I’ve gotten a lot of positive feedback on my writing too. During the year, my
  readership has more than doubled: the monthly views have gone from around 150k
  to 300k and visitors from roughly 20k to 45k per month. What I love more than
  those numbers going up is meeting people in events and even in the pub every
  now and then who come talk to me and telling me they enjoy my writing.
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  And sure,
  &lt;b class=&quot;notion-text-bold&quot;&gt;the main goal of 2025 is to find a job&lt;/b&gt;. But I
  hate setting up goals where the outcomes are not in my hands. I can do things
  to increase the odds but eventually, getting hired is in someone else’s hands
  and if those hands are not kind, I cannot reach the goal. I don’t have
  particularly high hopes about 2025 either since the market hasn’t shown much
  improvement towards the end of this year.
&lt;/blockquote&gt;

&lt;p&gt;
  I managed to find a job — or more accurately, a job found me — this year. I
  was reached out by a recruiter, we talked for a bit, I went through a couple
  of rounds of interviews and in the end of April, I joined
  &lt;a href=&quot;https://www.reaktor.com/en-fi&quot; class=&quot;notion-text-href&quot;&gt;Reaktor&lt;/a&gt;
  as a full-stack developer. I got to join an office with a lot of fantastic
  people that I knew from before and have been having a great time so far.
&lt;/p&gt;

&lt;p&gt;
  In a society where having a job is how people’s worth is measured, it sure is
  nice to have one.
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  If I think about the &lt;b class=&quot;notion-text-bold&quot;&gt;communities I run&lt;/b&gt;, they
  are pretty much in good shape and I’ll keep running them for years to come but
  they are also reaching the limits of what makes sense in terms of growth or
  doing more. They need to be at a capacity where they can be run whilst doing
  everything else in life so I can’t go overboard with them just because I now
  have more time. I also don’t want them to end up in a situation where nobody
  else would continue after me because the amount of free labour is too much.
&lt;/blockquote&gt;

&lt;p&gt;
  We had really a good year with both
  &lt;a href=&quot;https://turkufrontend.fi/&quot; class=&quot;notion-text-href&quot;&gt;Turku ❤️ Frontend&lt;/a&gt;
  (with which we celebrated
  &lt;a href=&quot;https://turkufrontend.fi/10-years&quot; class=&quot;notion-text-href&quot;&gt;10 year anniversary&lt;/a&gt;
  in December) and
  &lt;a href=&quot;https://archipylago.dev/&quot; class=&quot;notion-text-href&quot;&gt;archipylago&lt;/a&gt;.
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  I also want to have
  &lt;b class=&quot;notion-text-bold&quot;&gt;more good discussions with people&lt;/b&gt;. To
  experiment with that, I’ve crafted and designed a year-long project. I want to
  keep the details still secret but if I succeed in sticking to it, I’ll write
  about it in-depth towards the end of 2025.
&lt;/blockquote&gt;

&lt;p&gt;
  I started the year with a project I called “One email every day” where I
  wanted to start more discussions with wonderful people. I emailed replies to
  blog posts, said thanks to people who maintain movements, communities or
  software that I enjoy. Even though that project didn’t last very long, the
  spirit of it stayed with me the whole year. I started a ton of great
  discussions via blogs, emails, social media and in person and I’m so glad I
  did. I also added a box at the end of each blog posts that reads:
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  If something above resonated with you, let&#39;s start a discussion about it!
  Email me at juhamattisantala at gmail dot com and share your thoughts. In
  2025, I want to have more deeper discussions with people from around the world
  and I&#39;d love if you&#39;d be part of that.
&lt;/blockquote&gt;

&lt;p&gt;
  That got me quite a few good emails as well which started nice discussions.
&lt;/p&gt;

&lt;p&gt;All in all, I’m really glad with all the four goals for the year.&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;General thoughts of 2025&lt;/h2&gt;

&lt;p&gt;
  Looking back, 2025 was a better year than many of the few previous ones but
  still at the back of my head, I feel I’m nowhere near where I’d like to be in
  life. I feel like I’m still not in a driver’s seat of my own life but rather
  trying to hang on.
&lt;/p&gt;

&lt;p&gt;Doing this reflection exercise helps notice all the good stuff.&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Writing&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/year-in-review-2025/2.png.webp&quot; alt=&quot;A calendar chart showing every day of 2025 with colored dots here and there denoting a day when a blog post was published. Other than one Wednesday in early October, they are all filled with squares. Most of the other posts are published on Saturdays. In August, there’s a big blob of almost daily publishing. &quot; /&gt;
&lt;p&gt;
  I published something every week — a streak I’ve managed to keep going since
  July 2023. Like last year, all but one Wednesday got a blog post.
&lt;/p&gt;

&lt;p&gt;
  This year, I started two new main writing projects to accompany my blog:
  &lt;a href=&quot;https://buttondown.com/juhis/archive/&quot; class=&quot;notion-text-href&quot;&gt;From Juhis with Love&lt;/a&gt;
  newsletter that, once a month, gathers together what I’ve been up to and has
  links to wonderful, joyful things I’ve come across in the Internet that month
  and
  &lt;a href=&quot;https://notes.hamatti.org/&quot; class=&quot;notion-text-href&quot;&gt;Garden of Learning&lt;/a&gt;, my digital garden where I publish my notes.
&lt;/p&gt;

&lt;p&gt;
  In this blog, I published 107 blog posts. I wrote and published 12 newsletter
  issues and published one guest post. I published a bit over 350 notes in the
  digital garden, 12 of them being my
  &lt;a href=&quot;https://notes.hamatti.org/technology/advent-of-code/2025/advent-of-code-2025-landing-page&quot; class=&quot;notion-text-href&quot;&gt;Advent of Code solution explanations&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
  In August, I took part in
  &lt;a href=&quot;https://hamatti.org/blog/blaugust-2025&quot; class=&quot;notion-text-href&quot;&gt;Blaugust&lt;/a&gt; and
  despite not having a plan to write that much, ended up with 31 posts in 31
  days once again and had a blast. Made a bunch of new writing friends this year
  again.
&lt;/p&gt;

&lt;p&gt;Some of my favourite blog posts from the year:&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted_list&quot;&gt;
  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/human-curation-over-algorithmic-recommendations/&quot; class=&quot;notion-text-href&quot;&gt;Human curation over algorithmic recommendations&lt;/a&gt;
    (Jan 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/be-careful-with-introducing-ai-into-your-notes/&quot; class=&quot;notion-text-href&quot;&gt;Be careful with introducing AI into your notes&lt;/a&gt;
    (Jan 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/explaining-it-helps-you-learn-it/&quot; class=&quot;notion-text-href&quot;&gt;Explaining it helps you learn it&lt;/a&gt;
    (Feb 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/redesign-and-rewrite-of-playtest-printer/&quot; class=&quot;notion-text-href&quot;&gt;Redesign and rewrite of playtest printer&lt;/a&gt;
    (Mar 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/shrink-designing-board-games/&quot; class=&quot;notion-text-href&quot;&gt;“Shrink designing” board games&lt;/a&gt;
    (Mar 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/how-i-write-and-publish-blog-posts-in-april-2025/&quot; class=&quot;notion-text-href&quot;&gt;How I write and publish blog posts in April 2025 &lt;/a&gt;(Apr 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/notifications-about-almost-anything-with-ntfy-sh/&quot; class=&quot;notion-text-href&quot;&gt;Notifications about (almost) anything with ntfy.sh&lt;/a&gt;
    (May 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/as-a-developer-my-most-important-tools-are-a-pen-and-a-notebook/&quot; class=&quot;notion-text-href&quot;&gt;As a developer, my most important tools are a pen and a notebook&lt;/a&gt;
    (May 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/indieweb-principles-and-i/&quot; class=&quot;notion-text-href&quot;&gt;IndieWeb principles and I&lt;/a&gt;
    (Jul 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/build-the-forum-you-want-to-see-in-the-web/&quot; class=&quot;notion-text-href&quot;&gt;Build the forum you want to see in the web&lt;/a&gt;
    (Aug 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/static-sites-enable-a-good-time-travel-experience/&quot; class=&quot;notion-text-href&quot;&gt;Static sites enable a good time travel experience&lt;/a&gt;
    (Aug 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/my-favourite-bird-pokemon-tcg-card-arts/&quot; class=&quot;notion-text-href&quot;&gt;My favourite bird Pokémon TCG card arts&lt;/a&gt;
    (Sep 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/pycon-finland-2025-recap/&quot; class=&quot;notion-text-href&quot;&gt;PyCon Finland 2025 recap&lt;/a&gt;
    (Oct 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/improve-your-programming-skills-with-advent-of-code/&quot; class=&quot;notion-text-href&quot;&gt;Improve your programming skills with Advent of Code&lt;/a&gt;
    (Nov 2025)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamatti.org/posts/i-built-a-tiny-rss-generator-for-my-advent-of-code-solutions/&quot; class=&quot;notion-text-href&quot;&gt;I built a tiny RSS generator for my Advent of Code solutions&lt;/a&gt;
    (Dec 2025)
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  I also had writing projects that got scrapped or postponed: in the spring I
  had plans to write a small book but then I got a job and that got sidetracked.
  I started writing a technical guide that is still on my holiday backlog, maybe
  I’ll get to start the new year with it. About 50 blog post drafts didn’t see
  the light of day but they live in my notes and might resurface.
&lt;/p&gt;

&lt;p&gt;
  I’ve learned to let go of old projects that never became anything. I used to
  stress about them and see them as failures but now I’m just happy I have a lot
  of ideas and that the best ones come through and the rest can be let go.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  Communities, events and speaking
&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/year-in-review-2025/3.png.webp&quot; alt=&quot;Juhis is speaking in front of a small audience in an office space. &quot; /&gt;
&lt;p&gt;
  This year was a great one for communities I was involved with. With
  &lt;a href=&quot;https://turkufrontend.fi/&quot; class=&quot;notion-text-href&quot;&gt;Turku ❤️ Frontend&lt;/a&gt;
  we organised 8 meetups and one official afterwork and with
  &lt;a href=&quot;https://archipylago.dev/&quot; class=&quot;notion-text-href&quot;&gt;archipylago&lt;/a&gt; we
  ran 5 meetups and 3 sprints. I stepped down from admin position at
  &lt;a href=&quot;https://koodiklinikka.fi/&quot; class=&quot;notion-text-href&quot;&gt;Koodiklinikka&lt;/a&gt;
  but remained active and ran some community projects like our annual
  &lt;a href=&quot;https://kk-bracket.netlify.app/&quot; class=&quot;notion-text-href&quot;&gt;NHL Bracket Challenge&lt;/a&gt;
  where I finished 3rd. In May, we organised another
  &lt;a href=&quot;https://futurefrontend.com/2025/&quot; class=&quot;notion-text-href&quot;&gt;Future Frontend conference&lt;/a&gt;
  which was a blast.
&lt;/p&gt;

&lt;p&gt;
  I got on stage 18 times this year to talk about debugging, Django,
  documentation, blogging, prototyping, building developer portfolios and
  building communities. And I hosted a pub quiz in our company winter party
  which was fun.
&lt;/p&gt;

&lt;p&gt;
  Due to early year unemployment and then starting a new job, I didn’t have the
  opportunity to visit any conferences abroad but my highlight of the year was
  &lt;a href=&quot;https://hamatti.org/posts/pycon-finland-2025-recap/&quot; class=&quot;notion-text-href&quot;&gt;speaking in PyCon Finland in Jyväskylä&lt;/a&gt;.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/year-in-review-2025/4.png.webp&quot; alt=&quot;Juhis is speaking, waving his hands up in the air with a slide titled Rubber duck debugging on the screen. &quot; /&gt;
&lt;p&gt;
  Seth Larson launched
  &lt;a href=&quot;https://sethmlarson.dev/fedi-donut-friday&quot; class=&quot;notion-text-href&quot;&gt;Fedi Donut Friday&lt;/a&gt;
  initiative and I ate donuts and pastries every other Friday and invited others
  in Mastodon to join me to celebrate their weekly wins. I made a couple of new
  online friends through that.
&lt;/p&gt;

&lt;p&gt;
  I played more Pokémon TCG in person this year, participating in leagues and
  retro nights but also ran
  &lt;a href=&quot;https://notes.hamatti.org/gaming/board-games/pokemon/scarlet--and--violet-progression-series&quot; class=&quot;notion-text-href&quot;&gt;a Progression Series&lt;/a&gt;
  for our group playing through all sets of Scarlet &amp; Violet block. In 4.5
  months, we opened 16 sets, built 15 decks each and battled against each other
  after each set.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Projects&lt;/h2&gt;
&lt;h3&gt;Garden of Learning&lt;/h3&gt;
&lt;p&gt;
  As I mentioned in writing section, in January I started publishing my notes in
  &lt;a href=&quot;https://notes.hamatti.org/&quot; class=&quot;notion-text-href&quot;&gt;Garden of Learning&lt;/a&gt;, my digital garden. It took a bit of time to figure out some of the
  technical bits but I managed to end up with a flow that works really nice.
&lt;/p&gt;

&lt;p&gt;
  I’ve really enjoyed having a place for writing that is not quite blog-like.
  Notes like
  &lt;a href=&quot;https://notes.hamatti.org/sources/music/1001-albums-you-must-hear-before-you-die&quot; class=&quot;notion-text-href&quot;&gt;1001 Albums You Must Hear Before You Die&lt;/a&gt;,
  &lt;a href=&quot;https://notes.hamatti.org/gaming/board-games/pokemon/scarlet--and--violet-progression-series&quot; class=&quot;notion-text-href&quot;&gt;Scarlet &amp; Violet Progression Series&lt;/a&gt;
  and
  &lt;a href=&quot;https://notes.hamatti.org/sources/shows-and-movies/2025-christmas-movie-tracking&quot; class=&quot;notion-text-href&quot;&gt;2025 Christmas Movie tracking&lt;/a&gt;
  are good examples of notes that I’ve updated over time.
&lt;/p&gt;

&lt;p&gt;
  There has been a lot of moments when I’ve considered building my own tool for
  building websites from Obsidian. So far, I’ve managed to get by with
  &lt;a href=&quot;https://quartz.jzhao.xyz/&quot; class=&quot;notion-text-href&quot;&gt;Quartz&lt;/a&gt; but
  there are a few things I would wish to customise and maybe clean up some of
  the output code.
&lt;/p&gt;

&lt;p&gt;
  It’s one of those projects where it feels like a “quick weekend project” in my
  head but I’ve been around the neighbourhood enough to know that they never are
  such. Let’s file that into the “one day” part of the backlog.
&lt;/p&gt;
&lt;h3&gt;Progression Series website&lt;/h3&gt;
&lt;p&gt;
  In September, our local Pokémon TCG play group started
  &lt;a href=&quot;https://notes.hamatti.org/gaming/board-games/pokemon/scarlet--and--violet-progression-series&quot; class=&quot;notion-text-href&quot;&gt;a Progression Series&lt;/a&gt;
  and to keep track of matchups and scores, I built
  &lt;a href=&quot;https://progression-series.hamatti.org/&quot; class=&quot;notion-text-href&quot;&gt;a website for us&lt;/a&gt;.
  &lt;a href=&quot;https://hamatti.org/posts/leveraging-eleventys-custom-data-file-format-feature-for-simpler-game-scoring-format/&quot; class=&quot;notion-text-href&quot;&gt;Using Eleventy’s custom data file format&lt;/a&gt;, I managed to build a nice scores website that I was able to update directly
  via GitHub. Once people reported their match scores, I could open the
  repository on GitHub’s mobile app, add a line to the data file and the site
  would recalculate scores and update it.
&lt;/p&gt;

&lt;p&gt;
  At one point, I started adding deck images (for the future, I need to figure
  out a better way to provide them in accessible way by asking players to submit
  decklists and not just images) for each set.
&lt;/p&gt;
&lt;h3&gt;Advent of Code&lt;/h3&gt;
&lt;p&gt;
  My usual December joy is to solve
  &lt;a href=&quot;https://adventofcode.com/&quot; class=&quot;notion-text-href&quot;&gt;Advent of Code puzzles&lt;/a&gt;
  and
  &lt;a href=&quot;https://notes.hamatti.org/technology/advent-of-code/2025/advent-of-code-2025-landing-page&quot; class=&quot;notion-text-href&quot;&gt;write explanations of my Python solutions&lt;/a&gt;
  to help people learn programming. This year had 24 puzzles in 12 days and the
  new shorter calendar was a great thing. I was able to get all the stars for
  the first time and didn’t have to make difficult decisions about how to spend
  the few last days leading into Christmas.
&lt;/p&gt;

&lt;p&gt;
  I wrote
  &lt;a href=&quot;https://hamatti.org/posts/advent-of-code-2025-retrospective/&quot; class=&quot;notion-text-href&quot;&gt;a retrospective&lt;/a&gt;
  of the month and the wonderful new people who I discovered through their
  solutions.
&lt;/p&gt;
&lt;h3&gt;Playtest printer&lt;/h3&gt;
&lt;p&gt;
  One of my beloved hobbies is playing TCGs and prototyping board games and I
  &lt;a href=&quot;https://hamatti.org/posts/redesign-and-rewrite-of-playtest-printer/&quot; class=&quot;notion-text-href&quot;&gt;redesigned my playtest card printer&lt;/a&gt;
  to finally give it some polish and new features.
&lt;/p&gt;

&lt;p&gt;
  It’s one of those small apps I enjoy to use and occasionally work on. Over the
  years, I used it to also print a lot of card sized info cards. I printed a
  double-sided reminder card for chess board starting assembly and
  &lt;a href=&quot;https://www.chess.com/openings/The-Cow&quot; class=&quot;notion-text-href&quot;&gt;the Cow opening&lt;/a&gt;
  and a couple of rule-reminder / custom player aid cards for other games I own
  but don’t want to carry manuals with me.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/year-in-review-2025/5.png.webp&quot; alt=&quot;A chess board with pieces in their starting positions &quot; /&gt;
&lt;p&gt;
  I play chess rarely enough to remember whether A1 is black or white and in
  which order the Queen and King are placed at the start.
&lt;/p&gt;
&lt;h3&gt;Pokémon Toolkit&lt;/h3&gt;
&lt;p&gt;
  Over the year, multiple things led me to start building a self-hosted Pokémon
  TCG toolkit: a collection of tools that enable me to do all sorts of things.
  It’s running in my bedroom for local access only because I don’t want Pokémon
  Company’s lawyers knocking on my door.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://pokemontcg.io/&quot; class=&quot;notion-text-href&quot;&gt;PokemonTCG.io API&lt;/a&gt;
  started having problems early on and I had to figure out a backup plan so I
  started building a custom API to power up my hobby projects. It’s still
  missing some key features like a really good search but it’s good enough that
  I was able to start building the other bits.
&lt;/p&gt;

&lt;p&gt;
  I used to have my collection inventory in
  &lt;a href=&quot;https://www.pkmn.gg/&quot; class=&quot;notion-text-href&quot;&gt;pkmn.gg&lt;/a&gt; but they
  started to have more and more features behind a paywall and their focused
  seemed to move to a direction I don’t want to follow. The final trigger for
  building my own was when I realised they didn’t have a way for me to export my
  data. I knew I needed to start building my own sooner than later, otherwise it
  would be a massive undertaking to rebuild the collection later. With that, I’m
  in a stage that has all the features I needed from the site but has some added
  features like a trade feature and changelog.
&lt;/p&gt;

&lt;p&gt;
  As we started playing the Progression Series, I realised the amount of cards
  grew really fast and I needed a better way to manage my card pool than having
  an evergrowing list of cards. I built a script that takes an export from the
  virtual booster opening simulator and stored the cards in a database. I then
  built a UI that shows the cards I have, sorted by card type (Pokémon, Items,
  Stadiums, Supporters and so on) and displayed by evolution lines.
&lt;/p&gt;

&lt;p&gt;
  Finally, I started building a tool to manage future Progression Series. It’s
  still a work in progress but it allows league admins to create a series,
  select which sets are part of it, invite players by email and track scores and
  card pools.
&lt;/p&gt;

&lt;p&gt;
  In the future, once everything else moves forward a bit, I’ll integrate my
  earlier deck builder project into the toolkit.
&lt;/p&gt;

&lt;p&gt;
  Building this has been some of the most fun I’ve had writing software in ages.
  I’ve built it with Django and htmx which has turned out to be an excellent
  tech stack for a project like this.
&lt;/p&gt;
&lt;h3&gt;Homelab&lt;/h3&gt;
&lt;p&gt;
  I have two Raspberry Pis and a NAS running in my bedroom that I’ve configured
  with a few self-hosted homelab projects:
  &lt;a href=&quot;https://www.home-assistant.io/&quot; class=&quot;notion-text-href&quot;&gt;Home Assistant&lt;/a&gt;
  to run my
  &lt;a href=&quot;https://notes.hamatti.org/my-projects/smart-home/&quot; class=&quot;notion-text-href&quot;&gt;smart home&lt;/a&gt;,
  &lt;a href=&quot;https://docs.paperless-ngx.com/&quot; class=&quot;notion-text-href&quot;&gt;paperless-ngx&lt;/a&gt;
  to keep my digital documents in order,
  &lt;a href=&quot;https://jellyfin.org/&quot; class=&quot;notion-text-href&quot;&gt;Jellyfin&lt;/a&gt; for my
  personal media collection, a
  &lt;a href=&quot;https://github.com/coder/code-server&quot; class=&quot;notion-text-href&quot;&gt;VS Code Server&lt;/a&gt;
  for editing my projects on the Raspberry Pi and the aforementioned Pokémon
  Toolkit.
&lt;/p&gt;

&lt;p&gt;
  I also have a couple of RSS proxies running there. Either to
  &lt;a href=&quot;https://hamatti.org/posts/i-built-custom-rss-hydrator-for-better-github-and-youtube-feeds/&quot; class=&quot;notion-text-href&quot;&gt;take an existing RSS and modify it before it reaches my reader&lt;/a&gt;
  or to run custom RSS builders for sites that don’t provide RSS themselves.
&lt;/p&gt;

&lt;p&gt;
  I also have some scripts there that I can trigger from my iPad with a
  Shortcut: for example, I can choose an action from the iOS’s Share menu to
  send the current page URL to my homelab and depending on where that link
  points to, the bash script does different things.
&lt;/p&gt;

&lt;p&gt;
  It’s a growing collection as I discover new services. One of those is
  &lt;a href=&quot;https://github.com/booklore-app/BookLore&quot; class=&quot;notion-text-href&quot;&gt;BookLore&lt;/a&gt;, an ebook manager that I had been looking at for a while. I installed it and
  added most of my collection over the Christmas holidays.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  Games, books, podcasts and so on
&lt;/h2&gt;
&lt;h3&gt;Games&lt;/h3&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/year-in-review-2025/6.png.webp&quot; alt=&quot;A dozen or so deckboxes and two playmats on a kitchen table with dice and tokens spread around. &quot; /&gt;
&lt;p&gt;
  I wrote
  &lt;a href=&quot;https://hamatti.org/posts/i-played-some-games-this-year/&quot; class=&quot;notion-text-href&quot;&gt;a separate review post&lt;/a&gt;
  about some of my favourite games I played this year.
&lt;/p&gt;
&lt;h3&gt;Books, podcast and other media&lt;/h3&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/year-in-review-2025/7.png.webp&quot; alt=&quot;A book with Finnish title Veisu luonnonkoneille by Becky Chambers &quot; /&gt;
&lt;p&gt;
  Most of my recommendations are scifi or solarpunk adventures. I finally read
  Becky Chambers’
  &lt;a href=&quot;https://us.macmillan.com/series/monkrobot&quot; class=&quot;notion-text-href&quot;&gt;Monk and Robot&lt;/a&gt;
  duology and it was brilliant. I loved both books: I read the one in English
  and the other translated to Finnish as it was translated by my favourite
  translator and both were excellent.
&lt;/p&gt;

&lt;p&gt;
  Nnedi Okorafor’s
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Binti_(novella)&quot; class=&quot;notion-text-href&quot;&gt;Binti&lt;/a&gt;
  was another excellent scifi story.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://en.wikipedia.org/wiki/This_Is_How_You_Lose_the_Time_War&quot; class=&quot;notion-text-href&quot;&gt;This Is How You Lose the Time War&lt;/a&gt;
  had a lot of good in it but it was bit too abstract and dragged along a tid
  bit too much to find a permanent spot in my bookshelf but it had its moments.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://www.sarjakuvakauppa.fi/ankkalinna-portti-kahden-maailman-valilla.html&quot; class=&quot;notion-text-href&quot;&gt;Katja Kontturi’s Ankkalinna - Portti kahden maailman välillä&lt;/a&gt;
  is a Finnish book about Don Rosa’s comics. It’s a casual reader’s version of
  Kontturi’s PhD thesis and I got to meet the author in October and got my book
  signed as well. As a comic book geek, it was really nice to peek into the more
  analytical side of how Rosa crafted his stories.
&lt;/p&gt;

&lt;p&gt;
  My #1 podcast of the year was once again
  &lt;a href=&quot;https://lateralcast.com/&quot; class=&quot;notion-text-href&quot;&gt;Tom Scott’s Lateralcast&lt;/a&gt;
  because it’s just that good. Some new, interesting ones were
  &lt;a href=&quot;https://www.sleepbaseball.com/&quot; class=&quot;notion-text-href&quot;&gt;Northwoods Baseball Sleep Radio&lt;/a&gt;
  which is a fictional sportscast of baseball games spoken in slow soft tones,
  perfect for falling asleep.
  &lt;a href=&quot;https://www.atypicalartists.co/breaker-about&quot; class=&quot;notion-text-href&quot;&gt;Breaker Whiskey&lt;/a&gt;
  is a lovely daily microfiction audio drama / podcast that I enjoyed in the
  fall. Individual episodes are only a couple of minutes long and they follow a
  story of a woman in a post-apocalyptic USA.
&lt;/p&gt;

&lt;p&gt;
  To my Finnish speaking nerd audience, find Lohikäärmeradio wherever you find
  your podcasts. It’s a monthly podcast about fantasy and scifi books.
&lt;/p&gt;

&lt;p&gt;
  Towards the end of the year, I discovered
  &lt;a href=&quot;https://pagedout.institute/&quot; class=&quot;notion-text-href&quot;&gt;PagedOut! magazine&lt;/a&gt;. It’s a experimental one page == one topic technical magazine and I’ve
  enjoyed reading through the archives and have started drafting an article to
  submit there as well.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;What’s up with 2026?&lt;/h2&gt;

&lt;p&gt;
  Over the past years, I’ve enjoyed setting up goals for myself, just to give
  some structure. This year, I don’t feel like having any. I don’t believe that
  goals are really needed for good things to happen. Especially in personal
  life: I’ll work on things that I enjoy and believe will lead to good things,
  goals or no goals.
&lt;/p&gt;

&lt;p&gt;But there’s one major thing I want to do next year.&lt;/p&gt;

&lt;p&gt;
  &lt;b class=&quot;notion-text-bold&quot;&gt;I want to decide it’s gonna be a good year.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
  Ever since the pandemic started, I’ve been struggling with how life has turned
  out. The pandemic and what followed kind of destroyed my career, took a huge
  toll on my mental and physical health and social life.
&lt;/p&gt;

&lt;p&gt;I’m tired of waiting.&lt;/p&gt;

&lt;p&gt;
  Maybe it’s not up to some external factors to change but rather my look on
  life.
&lt;/p&gt;

&lt;p&gt;
  It’s time to take action and decide it’s good and focus on the positive
  aspects of life and make the most out of them.
&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>From Juhis with Love #012 - For a happy new year</title>
    <link href="https://hamatti.org/posts/external-from-juhis-with-love-012-for-a-happy-new-year/" />
    <updated>2025-12-31T00:00:00Z</updated>
    <id>https://hamatti.org/posts/external-from-juhis-with-love-012-for-a-happy-new-year/</id>
    <content type="html">
      
&lt;p&gt;
  In December issue of &lt;strong&gt;From Juhis with Love&lt;/strong&gt;, I share updates of my
  projects and lovely bits from the internet.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://buttondown.com/juhis/archive/012-for-a-happy-new-year/&quot;&gt;Read #012 - For a happy new year&lt;/a&gt;.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>We played a full Scarlet &amp; Violet Progression Series</title>
    <link href="https://hamatti.org/posts/we-played-a-full-scarlet-and-violet-progression-series/" />
    <updated>2025-12-27T00:00:00Z</updated>
    <id>https://hamatti.org/posts/we-played-a-full-scarlet-and-violet-progression-series/</id>
    <content type="html">
      &lt;p&gt;
  I’m a big fan of
  &lt;a href=&quot;https://progression-series.hamatti.org/about/&quot; class=&quot;notion-text-href&quot;&gt;Pokémon TCG Progression Series&lt;/a&gt;
  (or Evolution Series as some call them). In such series, players open booster
  boxes of consecutive sets and after each box, build a deck with cards they’ve
  pulled so far and play games.
&lt;/p&gt;

&lt;p&gt;
  Azul GG Garcia and Chip Richey are currently in the middle of
  &lt;a href=&quot;https://www.youtube.com/playlist?list=PLtaquYSiDejMLtVX90ByBMe1h1IKcIoa7&quot; class=&quot;notion-text-href&quot;&gt;their Scarlet and Violet series&lt;/a&gt;
  in Youtube, some years back GamingLair
  &lt;a href=&quot;https://www.youtube.com/playlist?list=PL7rAiabAkA9R6OMRSd4VsQ-Yy0CObwtj5&quot; class=&quot;notion-text-href&quot;&gt;started from the very Base Set&lt;/a&gt;
  and what got me originally excited in the format was
  &lt;a href=&quot;https://www.youtube.com/playlist?list=PLr_LAOrEVAtwrH2J-N6GVrhUBIGICfQsL&quot; class=&quot;notion-text-href&quot;&gt;Omnipoke’s Sun and Moon series&lt;/a&gt;
  that unfortunately never finished.
&lt;/p&gt;

&lt;p&gt;
  I’ve always wanted to play one but with physical cards, it’s so freaking
  expensive especially these days to purchase a booster box for each set that it
  never seemed doable. Last summer, I started putting together an idea where
  we’d open virtual packs using
  &lt;a href=&quot;https://pokemoncard.io/pack-sim/&quot; class=&quot;notion-text-href&quot;&gt;PokemonCard.io’s Pack Opening Simulator&lt;/a&gt;
  and
  &lt;a href=&quot;https://tcg.pokemon.com/en-us/tcgl/&quot; class=&quot;notion-text-href&quot;&gt;Pokémon TCG Live&lt;/a&gt;. Scarlet and Violet block had just finished and it was relatively cheap to
  craft missing cards in Live so for the first time it felt doable.
&lt;/p&gt;

&lt;p&gt;
  I sent a message to our local game group’s Discord and in total, five people
  were interested in starting such series and in September, we opened the first
  packs starting with Scarlet and Violet base set.
&lt;/p&gt;

&lt;p&gt;
  This week, just before Christmas, we finished our 15th round and thus
  completed the series. It was so much fun!
&lt;/p&gt;

&lt;p&gt;
  Everyone seemed to enjoy the series enough that we’ll be playing a different
  block early next year. My hopes are with HeartGold &amp; SoulSilver block but
  let’s see what we decide as a group. If you’re interested in seeing how that
  goes, keep an eye on the
  &lt;a href=&quot;https://notes.hamatti.org/tags/pokemon&quot; class=&quot;notion-text-href&quot;&gt;Pokémon tag page on my notes&lt;/a&gt;
  as I’m going to keep track of it there.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Deckbuilding challenge&lt;/h2&gt;

&lt;p&gt;
  I consider deckbuilding to be the biggest weakness of mine when it comes to
  TCG. There’s so many options and building a balanced, focused and consistent
  deck is hard. That’s why I welcomed this challenge with open arms as I wanted
  to get better at building decks.
&lt;/p&gt;

&lt;p&gt;Did I? Probably not.&lt;/p&gt;

&lt;p&gt;
  I had a great start to the series, finishing with strong 3-1, 3-1 and 2-2
  records in the first three sets. I’m used to playing jank rogue decks rather
  than meta decks so I think I had a bit of an advantage over the others in the
  early phases.
&lt;/p&gt;

&lt;p&gt;
  Once others started pulling better cards, especially ones with energy
  acceleration, I fell to the bottom tables. 1-3, 1-2, 0-3, 1-2 in four
  consecutive sets. Cards like
  &lt;a href=&quot;https://pkmncards.com/card/baxcalibur-scarlet-violet-promos-svp-019/&quot; class=&quot;notion-text-href&quot;&gt;Baxcalibur&lt;/a&gt;,
  &lt;a href=&quot;https://pkmncards.com/card/gardevoir-ex-scarlet-violet-svi-086/&quot; class=&quot;notion-text-href&quot;&gt;Gardevoir ex&lt;/a&gt;
  and
  &lt;a href=&quot;https://pkmncards.com/card/electric-generator-scarlet-violet-svi-170/&quot; class=&quot;notion-text-href&quot;&gt;Electric Generator&lt;/a&gt;
  started to dominate the field and I had not pulled anything with proper energy
  acceleration to keep up with these new decks.
&lt;/p&gt;

&lt;p&gt;
  Midway our series, I managed to get a set of Electric Generators from
  compensation packs (after each set, you’d get to open extra packs from
  previous set based on your ranking) and got my hands on
  &lt;a href=&quot;https://pkmncards.com/card/iron-hands-ex-paradox-rift-par-070/&quot; class=&quot;notion-text-href&quot;&gt;Iron Hands ex&lt;/a&gt;
  and got a 3-0 sweep.
&lt;/p&gt;

&lt;p&gt;
  I had another clean sweep victory in Stellar Crown with a
  &lt;a href=&quot;https://pkmncards.com/card/terapagos-ex-prismatic-evolutions-pre-092/&quot; class=&quot;notion-text-href&quot;&gt;Terapagos ex&lt;/a&gt;/&lt;a href=&quot;https://pkmncards.com/card/pidgeot-ex-obsidian-flames-obf-164/&quot; class=&quot;notion-text-href&quot;&gt;Pidgeot ex&lt;/a&gt;
  deck that was really strong thanks to
  &lt;a href=&quot;https://pkmncards.com/card/crispin-stellar-crown-scr-133/&quot; class=&quot;notion-text-href&quot;&gt;Crispin&lt;/a&gt;. After a nice streak of positive records, I made the biggest blunder in
  Journey Together set where I tried to put together a
  &lt;a href=&quot;https://pkmncards.com/card/raging-bolt-ex-temporal-forces-tef-123/&quot; class=&quot;notion-text-href&quot;&gt;Raging Bolt ex&lt;/a&gt;
  deck despite only having one
  &lt;a href=&quot;https://pkmncards.com/card/professor-sadas-vitality-paradox-rift-par-170/&quot; class=&quot;notion-text-href&quot;&gt;Professor Sada’s Vitality&lt;/a&gt;. My deck played one draw supporter and bricked completely in all three
  matches.
&lt;/p&gt;

&lt;p&gt;
  In Destined Rivals, my
  &lt;a href=&quot;https://pkmncards.com/card/ethans-ho-oh-ex-destined-rivals-dri-039/&quot; class=&quot;notion-text-href&quot;&gt;Ethan’s Ho-oh ex&lt;/a&gt;/&lt;a href=&quot;https://pkmncards.com/card/crustle-destined-rivals-dri-012/&quot; class=&quot;notion-text-href&quot;&gt;Crustle&lt;/a&gt;
  deck was massively dominant picking up easy 3-0. I got so excited about the
  deck that I made a commemorative Tag Team GX card out of it
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/we-played-a-full-scarlet-and-violet-progression-series/1.png.webp&quot; alt=&quot;A haphazardly photoshopped Pokemon card where I&#39;ve slapped Ho-oh and Crustle arts on top of a Pikachu and Zekrom Tag Team GX card and changed its name to Ho-oh &amp; Crustle &quot; /&gt;
&lt;p&gt;
  In the final combined set of Black Bolt and White Flare, my
  &lt;a href=&quot;https://pkmncards.com/card/cinccino-black-bolt-blk-153/&quot; class=&quot;notion-text-href&quot;&gt;Cinccino&lt;/a&gt;
  deck fell short after 3 excellent and most fun matches in the entire series.
&lt;/p&gt;

&lt;p&gt;
  I had a lot of fun playing a wide variety of decks and always trying to come
  up with something new, especially after sets when I had won 3-0. I decided
  early on that I’d retire decks that do too well because otherwise the format
  can have a tendency of staying with just a couple of decks and new sets having
  little to no impact.
&lt;/p&gt;

&lt;p&gt;
  I finished with a positive 25-24 record and 2nd place which was a big surprise
  for me, especially given how good the other players in our group are.
&lt;/p&gt;

&lt;p&gt;
  If you’re into Pokémon TCG and have accumulated some recent cards in Live, I
  recommend finding some friends to play this format. It’s super fun!
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Software&lt;/h2&gt;

&lt;p&gt;
  I kept notes of my own progress with remarks on pulls, decks and matchups in
  &lt;a href=&quot;https://notes.hamatti.org/gaming/board-games/pokemon/scarlet--and--violet-progression-series&quot; class=&quot;notion-text-href&quot;&gt;Scarlet &amp; Violet Progression Series&lt;/a&gt;
  and built
  &lt;a href=&quot;https://progression-series.hamatti.org/&quot; class=&quot;notion-text-href&quot;&gt;a website&lt;/a&gt;
  to keep track of series scores, decks and matchups. A lot of these ideas
  evolved throughout the series as we learned what was fun.
&lt;/p&gt;

&lt;p&gt;
  Originally, my idea for keeping track of what we’ve pulled was to print the
  page to PDF (and I believe that’s what most others kept doing throughout the
  series) but I quickly came to the conclusion that it was gonna get out of hand
  real fast.
&lt;/p&gt;

&lt;p&gt;
  So first I built
  &lt;a href=&quot;https://github.com/Hamatti/export-pack-sim&quot; class=&quot;notion-text-href&quot;&gt;export-pack-sim&lt;/a&gt;, a bookmarklet that extracts the card pool information for each set into
  plaintext and then started building my own selfhosted homelab solution for
  being able to add the cards to database and view them on a website. This
  turned out to be a great solution because it helped me brew new decks and
  think about my growing collection of cards even when I wasn’t logged in to
  Live.
&lt;/p&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/we-played-a-full-scarlet-and-violet-progression-series/2.png.webp&quot; alt=&quot;Screenshot of a web page displaying three lines of Pokemon TCG cards: Abra, Absol and Aipom with varied counts of different cards. &quot; /&gt;
&lt;p&gt;
  It’s still in its infancy as software as I just had to get something up and
  running while we were playing. It’s tightly connected to my own toolkit
  software that has its own card API, personal collection info and bunch of
  other helpful Pokémon TCG tools. I’ll try to see if I can find a way to open
  source them eventually but due to the fear of Pokémon Company lawyers, I’ll
  likely never be able to publish it as a web app.
&lt;/p&gt;

&lt;p&gt;
  One of its strengths is that it shows Pokémon by their evolution lines
  regardless of which set they came from. And it separates trainer cards by
  their subtype (Item/Tool/Supporter/Stadium), making it easier to find what
  you’re looking for.
&lt;/p&gt;

&lt;p&gt;
  I did start building a management tool for a Progression Series however. In
  it, you can invite players, select which sets to include in a series and how
  many boosters to open per set. Players could then open the boosters, have
  cards automatically added to their pool and in the best case scenario, even
  build the decks directly in the app. The goal with the deck builder portion
  especially is that it could use your pulled cards pool as the source from
  where to search and pick cards so you wouldn’t accidentally add cards you
  don’t have.
&lt;/p&gt;

&lt;p&gt;
  And then submit and confirm match scores so everything could be done within
  the app. Some parts of it I have working but it’s not quite ready yet for our
  next series. Maybe for the one after that.
&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>Merry Christmas!</title>
    <link href="https://hamatti.org/posts/merry-christmas-2025/" />
    <updated>2025-12-24T00:00:00Z</updated>
    <id>https://hamatti.org/posts/merry-christmas-2025/</id>
    <content type="html">
      &lt;p&gt;
  It’s Christmas Eve today and that’s when we in Finland celebrate Christmas. If
  you’re reading this when it comes out, I’m likely sitting at the Christmas
  table, feasting on wonderful food that our family has set up and enjoying
  watching my siblings’ children enjoy the wonders of Christmas season.
&lt;/p&gt;

&lt;p&gt;
  Thus, I reserve this week in the blog to wish you all merry Christmas and
  happy holidays.
&lt;/p&gt;

&lt;p&gt;
  2025 has been a year full of wonderful people and encounters. If our paths
  crossed this year, whether in personal life, through communities, at work or
  online, I’m thankful for that and I’m happy you’ve been part of my life this
  year ❤️.
&lt;/p&gt;

&lt;p&gt;
  While the last few years since the pandemic haven’t been exactly smooth
  sailing, I’ve been blessed to have so many great people in my life through all
  that and in the grand scheme of things, that’s really what I’ll remember from
  these times and what really matters.
&lt;/p&gt;

&lt;p&gt;
  I will take a deeper dive into my year next Wednesday with my annual Year in
  Review post but for now, it’s time to enjoy good food and company and rest and
  relax.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>I played some games this year</title>
    <link href="https://hamatti.org/posts/i-played-some-games-this-year/" />
    <updated>2025-12-20T00:00:00Z</updated>
    <id>https://hamatti.org/posts/i-played-some-games-this-year/</id>
    <content type="html">
      &lt;p&gt;
  It’s been another year of gaming and I wanted to highlight some of my
  favourites from this year. Games I &lt;b class=&quot;notion-text-bold&quot;&gt;played&lt;/b&gt; this
  year, not necessarily games &lt;b class=&quot;notion-text-bold&quot;&gt;published&lt;/b&gt; this
  year. These are not in any kind of order really.
&lt;/p&gt;

&lt;p&gt;
  I’m sharing these in the spirit of
  &lt;a href=&quot;https://hamatti.org/posts/human-curation-over-algorithmic-recommendations/&quot; class=&quot;notion-text-href&quot;&gt;more human curation over algorithmic recommendations&lt;/a&gt;.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;NHL 21&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/1.png.webp&quot; alt=&quot;EA Sports NHL 21 &quot; /&gt;
&lt;p&gt;
  The list may start with a bit of a surprise. I’ve been playing hockey games
  ever since I learned how to hold a controller or smash a keyboard. Since the
  early 1990s. It all started with the
  &lt;a href=&quot;https://hamatti.org/2c70733fbc61800883e4e8c6c2efcc9a&quot; class=&quot;notion-text-href&quot;&gt;Face Off!&lt;/a&gt;, then with EA’s
  &lt;a href=&quot;https://en.wikipedia.org/wiki/NHLPA_Hockey_%2793&quot; class=&quot;notion-text-href&quot;&gt;NHLPA Hockey &#39;93&lt;/a&gt;
  and
  &lt;a href=&quot;https://en.wikipedia.org/wiki/NHL_%2794&quot; class=&quot;notion-text-href&quot;&gt;NHL ‘94&lt;/a&gt;
  on Super Nintendo, then
  &lt;a href=&quot;https://en.wikipedia.org/wiki/NHL_97&quot; class=&quot;notion-text-href&quot;&gt;NHL 97&lt;/a&gt;
  on PC that I played for years. At the same time, I played
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Olympic_Hockey_%2798&quot; class=&quot;notion-text-href&quot;&gt;Olympic Hockey ‘98&lt;/a&gt;
  on Nintendo 64 and my mind was blown when
  &lt;a href=&quot;https://en.wikipedia.org/wiki/NHL_2003&quot; class=&quot;notion-text-href&quot;&gt;NHL 2003&lt;/a&gt;
  on Xbox came out.
&lt;/p&gt;

&lt;p&gt;
  Around 2006, I switched to
  &lt;a href=&quot;https://en.wikipedia.org/wiki/NHL_2K&quot; class=&quot;notion-text-href&quot;&gt;2K series&lt;/a&gt;
  for a while until in 2010, I got the demo of NHL 2010 and the skill stick
  experience changed the way of playing virtual hockey forever.
&lt;/p&gt;

&lt;p&gt;
  People always talk about these sports games as just annual roster updates and
  that’s why I’ve usually been updating around 3 years as there usually is
  enough small incremental changes that accumulate in a few years so that the
  new ones feel fresh and usually better.
&lt;/p&gt;

&lt;p&gt;
  I’ve been sticking with NHL 21 for over 5 years already and I’m still enjoying
  it.
&lt;/p&gt;

&lt;p&gt;
  “Enjoying it” might be an understatement. Every year since its release, it’s
  been my most played game on Playstation by quite a distance. In 2023, I played
  134 hours of it. In 2024, I played 124 hours. This year? 168 hours.
&lt;/p&gt;

&lt;p&gt;
  I’ve been thinking about maybe updating next year to get some of the newer
  teams and rosters but I’m in year 12 or something of a very nice GM run and it
  would be a shame to stop that now.
&lt;/p&gt;

&lt;p&gt;
  If I were made to choose only one game I could play from here on, I’d pick
  this one. I’ll never get bored of it.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Stardew Valley&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/2.png.webp&quot; alt=&quot;Stardew Valley &quot; /&gt;
&lt;p&gt;
  ConcernedApe’s masterpiece
  &lt;a href=&quot;https://www.stardewvalley.net/&quot; class=&quot;notion-text-href&quot;&gt;Stardew Valley&lt;/a&gt;
  isn’t a new game either. I purchased it for my birthday in 2017, a year after
  its launch and have racked way over 1000 hours in Steam — and that’s only
  counting the hours I’ve played when online so the real number is even higher.
&lt;/p&gt;

&lt;p&gt;
  In the world of microtransactions, shutting down servers, DLCs and all the
  other crap, Stardew Valley is what I wish more games would aspire to be. It’s
  been almost 10 years since the launch and it still receives updates. Not just
  bug fixes and stuff but actual story content. The team is working on the
  seventh update, 1.7., that’s been rumored to maybe arrive for the 10 year
  anniversary.
&lt;/p&gt;

&lt;p&gt;
  It’s not just the official updates either. The modding community is wonderful
  and there are so many great, very deep content mods that brings new fresh life
  to the game just when you thought you’re getting bored of it.
&lt;/p&gt;

&lt;p&gt;
  If you’re not familiar with it, Stardew Valley is a cozy farming game with
  elements of relationships with villagers, mining, fishing, combat and making a
  shit ton of money by selling wine in a town with 20 or so adults. Who’s buying
  and drinking all this wine? Millions worth of it, every month.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Blue Prince&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/3.png.webp&quot; alt=&quot;Blue Prince &quot; /&gt;
&lt;p&gt;
  I have a love-hate relationship with puzzle games. I mean, I love them and if
  it was up to me, I could spend hours every day solving puzzles. But I’m also
  very bad at them and they mess up my sleep with horrible nightmares really
  easily so I need to ration my intake.
&lt;/p&gt;

&lt;p&gt;
  This year, I gave
  &lt;a href=&quot;https://www.blueprincegame.com/&quot; class=&quot;notion-text-href&quot;&gt;Blue Prince&lt;/a&gt;
  two opportunities.
&lt;/p&gt;

&lt;p&gt;
  Blue Prince is a mansion drafting puzzle rogue-lite. Every day, you wake up in
  the courtyard of a mansion and try to make your way through it to solve its
  mysteries. Whenever you open a door to a new room, you get to draft a new room
  from a selection of (usually) 3 different rooms. There are a lot of mysteries
  and I have barely scratched the surface so I don’t know what they are yet.
&lt;/p&gt;

&lt;p&gt;
  I first got it in the spring when it came out and internet was raving about
  it. Most likely after watching this
  &lt;a href=&quot;https://www.youtube.com/watch?v=9K7zYN6_-2I&quot; class=&quot;notion-text-href&quot;&gt;Game Maker’s Toolkit video on the game&lt;/a&gt;. I played it and after a ton of attempts, I finally got through to one of
  the mysteries of the game — around day 70 or so. Only to find out, it was not
  a permanent upgrade but something that had to be solved EVERY TIME. That broke
  me and I abandoned the game.
&lt;/p&gt;

&lt;p&gt;
  In November, I got back to it and equipped with better understanding of the
  game, started a new fresh run and made quite a lot of progress in just a
  fraction of the days spent. I still haven’t gotten back to the point where I
  was in the spring but I have a bit more permanent upgrades and goodies
  unlocked so I’ve been enjoying it a bit more this time.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Cyberpunk 2077&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/4.png.webp&quot; alt=&quot;Cyberpunk 2077 &quot; /&gt;
&lt;p&gt;
  Thanks to this summer’s
  &lt;a href=&quot;https://www.cdprojekt.com/en/media/news/cyberpunk-2077-ultimate-edition-is-available-now-on-mac/&quot; class=&quot;notion-text-href&quot;&gt;Mac release&lt;/a&gt;, I finally got to experience
  &lt;a href=&quot;https://www.cyberpunk.net/fi/en/&quot; class=&quot;notion-text-href&quot;&gt;Cyberpunk 2077&lt;/a&gt;
  properly. I had borrowed it from the library for PS4 before but at the first
  fight scene, it turned into a slideshow and I couldn’t ever get through that
  forced moment.
&lt;/p&gt;

&lt;p&gt;
  I’ve been wanting to play this game for so long and it’s been great. I’m a big
  fan of cyberpunk genre and I feel the game has captured many aspects of it
  brilliantly. I love roaming the city, interacting with the characters and
  hacking away.
&lt;/p&gt;

&lt;p&gt;
  At the same time, I feel like it’s not gonna be a game that I’ll return over
  and over again in the future. It’s more of a one-off (or two, or three off)
  experience and that’s fine too.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Marvel’s Spider-Man&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/5.png.webp&quot; alt=&quot;Marvel’s Spider-Man &quot; /&gt;
&lt;p&gt;
  I might be a bit late to the party with this one but I finally played
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Marvel%27s_Spider-Man_(video_game)&quot; class=&quot;notion-text-href&quot;&gt;Marvel’s Spider-Man&lt;/a&gt;
  that’s been highly praised especially for its web-slinging movement mechanics.
  And yes, they are fun. But also, there’s a lot of it — too much to my taste.
  The first few hours it’s so much fun. After 12 hours, it gets boring because
  all the missions are spread out in a way that you need to cross half of New
  York to get to the location.
&lt;/p&gt;

&lt;p&gt;
  Despite that criticism, the game is great. Definitely worth all the praise
  it’s gotten. The story is your run of the mill Spider-Man story but it does
  its job well. Occasionally, you get to play as MJ and while usually these
  types of gimmicks are poorly done in games, I actually enjoyed these as well.
  While Spider-Man flies around the city and kicks and punches his way through
  the bad guys, MJ takes a more stealthy approach as a good journalist does.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Hoop Land&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/6.png.webp&quot; alt=&quot;Hoop land &quot; /&gt;
&lt;p&gt;
  I don’t play a lot of games on mobile but there are a couple of games I’ve
  been enjoying on my iPad that I want to share. After years of enjoying
  &lt;a href=&quot;https://en.wikipedia.org/wiki/Retro_Bowl&quot; class=&quot;notion-text-href&quot;&gt;Retro Bowl&lt;/a&gt;, the game became bit too repetitive and I was looking for something new. I
  ran into
  &lt;a href=&quot;https://www.koalitygame.com/hoop-land&quot; class=&quot;notion-text-href&quot;&gt;Hoop Land&lt;/a&gt;, a basketball game with surprising depth.
&lt;/p&gt;

&lt;p&gt;
  Retro Bowl’s simple controls and mechanics made it a perfect game to play on a
  tiny breaks but Hoop Land essentially requires a controller so it has filled a
  different type of void. But when you sit down to play, oh boy is it fun. It
  has a bit of a learning curve and in the beginning, I got smacked in the head
  every game but eventually started to get the ball into the basket.
&lt;/p&gt;

&lt;p&gt;
  For those moments when all I have with me is the iPad and a controller, it’s
  real good entertainment where I can put hours into.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Tatami&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/7.png.webp&quot; alt=&quot;Tatami &quot; /&gt;
&lt;p&gt;
  &lt;a href=&quot;https://kaylees.site/tatami.html&quot; class=&quot;notion-text-href&quot;&gt;Tatami&lt;/a&gt;
  is a lovely puzzle game by Kaylee Calderolla. The mechanics are simple: you
  need to group tiles on a grid into rectangles based on the rules imposed by
  each level. The levels get more difficult as time goes on.
&lt;/p&gt;

&lt;p&gt;
  As it’s a puzzle game that I need to ration to maintain a healthy-ish sleep
  cycle, I’m limiting myself to maximum couple of levels a day and early in the
  morning. I’m currently at level 231 and the puzzles are starting to get real
  difficult here.
&lt;/p&gt;

&lt;p&gt;
  The first 200 levels are free but it’s a single purchase game that’s built
  with such care for the users that I recommend purchasing it right away.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Pokémon TCG&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/8.png.webp&quot; alt=&quot;Pokemon TCG &quot; /&gt;
&lt;p&gt;
  Moving (partly) away from the digital realm, my number one game this year was
  Pokémon TCG. I played a ton both in-person as well as digitally. One of the
  highlights of the year was running a
  &lt;a href=&quot;https://notes.hamatti.org/gaming/board-games/pokemon/scarlet--and--violet-progression-series&quot; class=&quot;notion-text-href&quot;&gt;Scarlet &amp; Violet Progression Series&lt;/a&gt;
  that we started in September and finished just before Christmas.
&lt;/p&gt;

&lt;p&gt;
  I played in a bunch of Leagues and Prereleases, even won a tiny GLC tournament
  and continued growing my collection of Eeveelutions whenever I could pick up
  new cards I’m still missing.
&lt;/p&gt;

&lt;p&gt;
  I also spent a good chunk of timing building my own tools to manage my card
  collection (moved away from a service that provided no export and started to
  paywall and enshittify aggressively), built my own card API (when one I had
  used for years started to have issues), built a bunch of tooling to manage the
  progression series (a public website, a card pool viewer and I’m mid-way
  building a platform where one could manage a complete progression series with
  opening packs, building decks and recording scores. None of that will likely
  ever be publicly available because I don’t want their lawyers on my ass but
  I’m self-hosting for myself and the growing toolkit has been wonderful so far.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Magic the Gathering&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/9.png.webp&quot; alt=&quot;Magic the Gathering &quot; /&gt;
&lt;p&gt;
  I have been following Magic the Gathering for years but never really got into
  it to play. Mainly because my money already goes to Pokémon TCG and can’t
  afford two TCG hobbies simultaneously.
&lt;/p&gt;

&lt;p&gt;
  Then last year, they published
  &lt;a href=&quot;https://mtg.wiki/page/Bloomburrow&quot; class=&quot;notion-text-href&quot;&gt;Bloomburrow&lt;/a&gt;
  and I was sold. This year, I actually started playing. Not a ton but more and
  more as the year progressed. I built my own
  &lt;a href=&quot;https://notes.hamatti.org/gaming/board-games/mtg-battle-box&quot; class=&quot;notion-text-href&quot;&gt;Battle Box&lt;/a&gt;
  for easy pick-and-play at the pub, I built a
  &lt;a href=&quot;https://notes.hamatti.org/gaming/board-games/forgetful-fish&quot; class=&quot;notion-text-href&quot;&gt;Dandân, Forgetful Fish&lt;/a&gt;
  deck for similar type of game play.
&lt;/p&gt;

&lt;p&gt;
  And when a friend asked if I’d like to join their group of casual Commander, I
  purchased my first Commander pre-con deck
  &lt;a href=&quot;https://moxfield.com/decks/PzY-rAZ3SEiLi_fuR2XBhQ&quot; class=&quot;notion-text-href&quot;&gt;Family Matters&lt;/a&gt;
  and we started playing regularly.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Parks&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/10.png.webp&quot; alt=&quot;Parks &quot; /&gt;
&lt;p&gt;
  I didn’t get to play as much
  &lt;a href=&quot;https://boardgamegeek.com/boardgame/266524/parks&quot; class=&quot;notion-text-href&quot;&gt;Parks&lt;/a&gt;
  as I would have wanted this year but it has slowly climbed up the ranks of my
  favourite board games. It has such nice aesthetics, great gameplay and it’s
  the type of game that provides depth but is still kind to beginners and as
  such, can be a great gateway
  &lt;s class=&quot;notion-text-strikethrough&quot;&gt;drug&lt;/s&gt; game to get new people into the
  hobby.
&lt;/p&gt;

&lt;p&gt;
  In Parks, you and your friends are hiking at national parks, gathering
  resources, taking photos and experiencing the great wild nature.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;NHL 94/25 romhack&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/11.png.webp&quot; alt=&quot;NHL 25 Romhack &quot; /&gt;
&lt;p&gt;
  While NHL 21 has been my main way of enjoying virtual hockey, Adam Catalyst’s
  &lt;a href=&quot;https://forum.nhl94.com/index.php?%2Ftopic%2F34793-nhl-94-2025-edition-by-adam-catalyst%2F=&quot; class=&quot;notion-text-href&quot;&gt;NHL25 romhack for NHL ‘94&lt;/a&gt;
  has been a delight. NHL ‘94 is one of the most iconic hockey games ever and
  one I played a lot as a kid. So whenever there’s a way to return to that
  iconic experience with something new and fresh, I’m all for it.
&lt;/p&gt;

&lt;p&gt;
  This romhack brings modern teams and rosters, alongside with gameplay tweaks
  and graphics refinements. It’s a perfect nostalgia trip while still getting to
  enjoy all the benefits of the most recent roster updates.
&lt;/p&gt;

&lt;p&gt;
  It’s funny that if I want to play with Seattle Kraken or Utah Mammoth, I need
  to abandon my modern PS4 experience and play the game from over 30 years ago.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;PokeRogue&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/12.png.webp&quot; alt=&quot;Pokerogue &quot; /&gt;
&lt;p&gt;
  &lt;a href=&quot;https://pokerogue.net/&quot; class=&quot;notion-text-href&quot;&gt;PokéRogue&lt;/a&gt;, a
  fan-made rogue-lite Pokémon game continues to entertain me. I have an
  offline-version on my Steam Deck that I haven’t updated since I created it (I
  should check if my documented workflow still works).
&lt;/p&gt;

&lt;p&gt;
  PokéRogue is a game where you have 10 points to use to pick your starting
  party: the better the Pokémon, more expensive it is to add. Then you fight
  randomly generated opponents, catch wild monsters to add them to your party
  and as new starting Pokémon and try to get through the game.
&lt;/p&gt;

&lt;p&gt;It’s a lot of fun!&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;Factorio&lt;/h2&gt;
&lt;img src=&quot;https://hamatti.org/assets/img/posts/i-played-some-games-this-year/13.png.webp&quot; alt=&quot;Factorio &quot; /&gt;
&lt;p&gt;
  &lt;a href=&quot;https://www.factorio.com/&quot; class=&quot;notion-text-href&quot;&gt;Factorio&lt;/a&gt; is
  one of those games that I had to put on a shelf in April when I got a job. I
  couldn’t afford booting it up, blinking my eyes and noticing it’s 5 in the
  morning. I’m kind of looking forward to the Christmas holidays and dedicating
  a few days to just getting lost in the world of Factorio.
&lt;/p&gt;

&lt;p&gt;
  Every time we talk about video games with friends, Factorio comes up. It has a
  devious lack of cycles, if that makes any sense. There’s never a “now is a
  good moment to stop playing” moment. You just keep on going and going and
  going, solving the next optimisation puzzle. Until you notice you haven’t
  eaten or slept in ages.
&lt;/p&gt;

&lt;p&gt;
  I always play it on a safe mode, ie. turn off the aggressive creatures. The
  game is complicated enough to try to solve without the constant worry of
  someone wrecking my base.
&lt;/p&gt;

&lt;p&gt;
  In Factorio, you’re stranded on a strange planet and need to make the best out
  of the bad situation. You start by collecting some copper and iron ore and
  coal by hand and little by little build a massive automated factory with the
  aim to conquer space.
&lt;/p&gt;

&lt;p&gt;
  I’d love to recommend the game to everyone. If you care about your sleep
  though, maybe give it a pass 😅.
&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>Advent of Code 2025 retrospective</title>
    <link href="https://hamatti.org/posts/advent-of-code-2025-retrospective/" />
    <updated>2025-12-17T00:00:00Z</updated>
    <id>https://hamatti.org/posts/advent-of-code-2025-retrospective/</id>
    <content type="html">
      
&lt;p&gt;
  It feels weird to write an Advent of Code retrospective a week before
  Christmas. For years, it’s either been one of the last or first posts of the
  year. This year, the creator of Advent of Code, Eric, decided to limit the
  amount of puzzles to 12 days instead of the previous 25 and I really liked
  that.
&lt;/p&gt;

&lt;p&gt;
  This year, for the first time I reached the end credits. I got all 24 stars in
  12 days.
&lt;/p&gt;

&lt;p&gt;
  I had a wonderful time as usual. I solved all puzzles with Python, using
  nothing but standard library for everything except day 10, part 2. My
  favourite part is
  &lt;a href=&quot;https://notes.hamatti.org/technology/advent-of-code/2025/advent-of-code-2025-landing-page&quot; class=&quot;notion-text-href&quot;&gt;writing about my solutions&lt;/a&gt;, explaining my thinking process and teaching how wonderful language Python
  is.
&lt;/p&gt;

&lt;p&gt;
  Over the past weekend and change, I’ve been thinking about this a lot. I’d
  like my explanations to be helpful in learning puzzle solving, iteratively
  building solutions step-by-step, debugging and Python.
&lt;/p&gt;

&lt;p&gt;
  Sometimes I feel though that my refactoring and cleaning up process polishes
  the solutions too much and I reach too eagerly to what is available in
  Python’s standard library, especially itertools and collections modules. They
  are very good things to learn about if you want to write good Python code but
  many of them are “if you know to reach for them” level of things rather than
  something you might organically figure out.
&lt;/p&gt;

&lt;p&gt;
  Hence, I’m not anymore sure who the audience for them is. Maybe next year I’ll
  really focus on writing beginner-level step-by-step guides rather than just
  beautiful Pythonic solutions. I especially felt this when I organised an
  in-person jam on the 11th and went through one of the puzzles with a student.
&lt;/p&gt;

&lt;p&gt;
  I did make new friends and reconnected with old ones through the writing and
  it was a highlight of the year for me.
&lt;/p&gt;

&lt;p&gt;
  This year, I learned a lot from the following people who shared their
  solutions in a lovely variety of programming and human languages:
&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted_list&quot;&gt;
  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://blog.minaspace.org/&quot; class=&quot;notion-text-href&quot;&gt;Mina&lt;/a&gt;
    (Perl)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://www.godeveloper.co.uk/advent-of-code/&quot; class=&quot;notion-text-href&quot;&gt;Paul&lt;/a&gt;
    (Go)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://work.njae.me.uk/&quot; class=&quot;notion-text-href&quot;&gt;Dr. Neil&lt;/a&gt;
    (Haskell)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://notes.adfoucart.be/aocode25/index.html&quot; class=&quot;notion-text-href&quot;&gt;Adrien&lt;/a&gt;
    (Python, in French)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://www.ohjelmointiputka.net/keskustelu/32619-sql-advent-of-code-2025-sqlite&quot; class=&quot;notion-text-href&quot;&gt;Antti&lt;/a&gt;
    (SQL, in Finnish)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://brassnet.biz/blog&quot; class=&quot;notion-text-href&quot;&gt;Dan&lt;/a&gt;
    (Python)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://christopherhimes.com/blog/&quot; class=&quot;notion-text-href&quot;&gt;Christopher&lt;/a&gt;
    (Python)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://marcoshuerta.com/posts/aoc/2025/&quot; class=&quot;notion-text-href&quot;&gt;Marcos&lt;/a&gt;
    (Python)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://abhinavsarkar.net/notes/tags/advent-of-code/&quot; class=&quot;notion-text-href&quot;&gt;Abhinav&lt;/a&gt;
    (Janet)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://scerruti.github.io/AoC2025/&quot; class=&quot;notion-text-href&quot;&gt;Stephen&lt;/a&gt;
    (Java)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://nocto.weblog.lol/&quot; class=&quot;notion-text-href&quot;&gt;Kirsty&lt;/a&gt;
    (Python)
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    &lt;a href=&quot;https://hamberg.no/erlend/tags/aoc.html&quot; class=&quot;notion-text-href&quot;&gt;Erlend&lt;/a&gt;
    (Lean 4)
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
  Big thanks to Eric for once again building these puzzles for us to solve and
  to Koodiklinikka, TurkuDev, Asteriski and Reaktor communities for solving
  these with me and discussing the solutions.
&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;


    </content>
  </entry>
   
  
  <entry>
    <title>I’m a tool builder at heart</title>
    <link href="https://hamatti.org/posts/im-a-tool-builder-at-heart/" />
    <updated>2025-12-13T00:00:00Z</updated>
    <id>https://hamatti.org/posts/im-a-tool-builder-at-heart/</id>
    <content type="html">
      
&lt;p&gt;
  Two things in the past week made me think about tools and how I enjoy building
  them — often more than doing the things those tools enable us to do.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  A follow up on my latest IndieWeb post
&lt;/h2&gt;

&lt;p&gt;
  Earlier this week, I published
  &lt;a href=&quot;https://hamatti.org/posts/where-are-we-going-indieweb/&quot; class=&quot;notion-text-href&quot;&gt;my submission to IndieWeb Carnival&lt;/a&gt;
  and as part of discussion that sparked in Fediverse,
  &lt;a href=&quot;https://cyberplace.social/@khleedril/115696354441842911&quot; class=&quot;notion-text-href&quot;&gt;Khleedril commented&lt;/a&gt;:
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  I would argue that we don&#39;t need to talk about tools at all. They are a
  concrete implementation detail completely hidden by abstraction.
&lt;/blockquote&gt;

&lt;p&gt;
  This was a great comment as it touched on something I discussed in the
  original post: to me, IndieWeb as a community is primarily a community of tool
  builders. At least that’s who I want to find there and that’s what I want to
  geek out about with them.
&lt;/p&gt;

&lt;p&gt;
  Somebody needs to build the tools we use. The only way we can ignore them as
  implementation details is to let others — often corporates whose incentives
  don’t align with ours — to decide what tools we have and how we can use them.
&lt;/p&gt;

&lt;p&gt;
  That’s a core value in IndieWeb community for me. It’s difficult to take
  ownership of data and content and the control of them if we don’t build tools
  that allow that.
&lt;/p&gt;

&lt;p&gt;
  Often when I talk about the non-corporate, non-commercial web, I prefer to
  talk about personal or small web instead of indie web (or IndieWeb) for this
  particular reason. I’m a strong believer in that side of things too. To me,
  those are communities or approaches that cover much wider group of people:
  users, creators (as in, artists, writers, etc) and builders (as in,
  technology).
&lt;/p&gt;

&lt;p&gt;
  I’m especially excited about building those small indie tools: things that
  would never be commercially viable but that can solve problems of individuals
  or small groups.
  &lt;a href=&quot;https://notes.hamatti.org/technology/hobbit-software&quot; class=&quot;notion-text-href&quot;&gt;Hobbit software&lt;/a&gt;, if you will, or
  &lt;a href=&quot;https://hamatti.org/posts/home-cooked-situated-software/&quot; class=&quot;notion-text-href&quot;&gt;home-cooked, situated software&lt;/a&gt;.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;A wild tool idea appeared&lt;/h2&gt;

&lt;p&gt;A few days later the question popped into my head again.&lt;/p&gt;

&lt;p&gt;
  I was rewatching
  &lt;a href=&quot;https://www.youtube.com/watch?v=MCzAXR9LsUs&quot; class=&quot;notion-text-href&quot;&gt;Chrism360’s and Shenanagans’ old Pokemon Randomizer blind bingo race&lt;/a&gt;
  from 2018. In it, the players compete in achieving certain goals while playing
  randomized Pokémon Red. The catch is, they don’t know what those goals are and
  there’s a third person keeping track of the bingo card.
&lt;/p&gt;

&lt;p&gt;
  As I was watching it, I realised many of the goals can be quite challenging to
  keep in mind and make sure the person keeping score catches them all.
&lt;/p&gt;

&lt;p&gt;
  Immediately, my mind went into a “what kind of software could be built to help
  make it easier” rabbit hole. I started thinking about how those goals could
  have data attached that define Pokémon, moves or items that satisfy the
  criteria.
&lt;/p&gt;

&lt;p&gt;
  Then, the scorekeeper could just keep a log of actions and events (like
  catching a new Pokémon, learning new moves, etc) and the system would take
  care of all the difficult parts: matching the actions and events with the
  goals and would update the score as things happen.
&lt;/p&gt;

&lt;p&gt;
  I’m much more interested in building those kinds of tools than I am of
  participating in such races as a player.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  I’ve always been like this
&lt;/h2&gt;

&lt;p&gt;
  I became a community organiser because I realised at one point that I’m almost
  always more interested in the organising and being behind the scenes making
  stuff happen than I am with doing the thing itself.
&lt;/p&gt;

&lt;p&gt;
  Organising shares so many same traits as tool building. Both are about
  creating structure into chaos and making it easier for people to enjoy the
  thing they enjoy. Being able to tame that chaos into something easier to
  understand and deal with is what makes me tick in life.
&lt;/p&gt;

&lt;p&gt;
  On the first day of my current job, I introduced myself to sales people as
  someone who likes to build tools for professionals.
&lt;/p&gt;


    </content>
  </entry>
   
  
  <entry>
    <title>Where are we going, IndieWeb?</title>
    <link href="https://hamatti.org/posts/where-are-we-going-indieweb/" />
    <updated>2025-12-10T00:00:00Z</updated>
    <id>https://hamatti.org/posts/where-are-we-going-indieweb/</id>
    <content type="html">
      
&lt;p&gt;
  My dear internet friend and intellectual sparring partner V.H. Belvadi is
  hosting things month’s IndieWeb Carnival and is asking us:
  &lt;a href=&quot;https://vhbelvadi.com/indieweb-carnival-future&quot; class=&quot;notion-text-href&quot;&gt;where do you see the IndieWeb in 2030&lt;/a&gt;:
&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  Welcome to the last IndieWeb Carnival of 2025. Having been a part of this
  wonderful community for years now and having thought about the IndieWeb from
  various perspectives, I have plenty of ideas about where I hope we are headed
  in the near future. And I am sure you do too. So tell us,
  &lt;b class=&quot;notion-text-bold&quot;&gt;where do you see the IndieWeb in 2030,&lt;/b&gt; just
  five short years from now?
&lt;/blockquote&gt;

&lt;p&gt;
  My relationship with the IndieWeb community has been rocky and ever-evolving
  and it was pretty much this IndieWeb Carnival thing that finally brought me
  into the community and got more excited about it. Even then, I think “indie
  web” as an alternative to building your online presence outside from
  commercial platforms is more important than “IndieWeb”, the specific
  community.
&lt;/p&gt;

&lt;p&gt;
  One of the related key questions that I’ve been pondering a ton lately is
  &lt;b class=&quot;notion-text-bold&quot;&gt;what does the categorisation of “IndieWeb” mean &lt;/b&gt;so let’s start there.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  Category through belonging or focus
&lt;/h2&gt;

&lt;p&gt;
  Whenever we build a community (or one forms accidentally by likeminded people
  gathering together), there are some sort of borders around the community.
  There are people who are part of it and people who are not. This definition
  then often influences what actions are taken, who is accepted into the
  community and where the community wants to go.
&lt;/p&gt;

&lt;p&gt;
  A lot of the discussion related to IndieWeb happens around this definition
  too.
&lt;/p&gt;

&lt;p&gt;
  I see two ways of defining a community’s boundaries: 1) who gets to be part of
  it and 2) what the community’s focus is on. In public discussions, these two
  ways unfortunately mush together.
&lt;/p&gt;
&lt;h3&gt;Belonging: who gets to be part of IndieWeb&lt;/h3&gt;
&lt;p&gt;
  I want IndieWeb to be a community that’s welcoming everyone who wants to be
  part of it — regardless of their current situation. It’s really difficult to
  draw the line between “Indie” and “non-Indie” for example in case of a
  personal website.
&lt;/p&gt;

&lt;p&gt;
  For example, where would you draw the line in this spectrum of options with
  blogs as an example:
&lt;/p&gt;
&lt;ul class=&quot;notion-bulleted_list&quot;&gt;
  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    Writing a blog in LinkedIn or Medium
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    Writing a blog in hosted WordPress, Pika, Bear or other
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    Writing a blog in self-hosted WordPress
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    Writing a blog in hosted service but with your own domain
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    Writing a blog with static site generator and hosting it on Netlify
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    Writing a blog with static site generator and self-hosting it on a VPS
  &lt;/li&gt;

  &lt;li class=&quot;notion-bulleted_list_item notion-color-default&quot;&gt;
    Building your own blog engine and self-hosting it on a VPS
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;IndieWeb wiki defines itself as&lt;/p&gt;

&lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  We are a community of independent and personal websites based on the
  principles of: owning your domain and using it as your primary online
  identity, publishing on your own site first (optionally elsewhere), and owning
  your content.
&lt;/blockquote&gt;

&lt;p&gt;
  I like those principles (and have written
  &lt;a href=&quot;https://hamatti.org/posts/indieweb-principles-and-i/&quot; class=&quot;notion-text-href&quot;&gt;my thoughts on all 12 principles&lt;/a&gt;) but even then, they are more aspirational than gatekeeping. You don’t have
  to own your own domain to get started with the community, you don’t need to
  implement Webmentions or microformats or many of the other technical wonders
  us IndieWeb folks rave about.
&lt;/p&gt;

&lt;p&gt;
  I want IndieWeb to be and to remain an open community where people can decide
  to be part of, regardless of how their website is built or hosted. I want the
  community to be inspiring and aspirational with its ideas and technical
  possibilities rather than limiting or gatekeeping.
&lt;/p&gt;
&lt;h3&gt;Focus: what is the community about&lt;/h3&gt;
&lt;p&gt;
  Focus and belonging can sometimes be at odds with each other on a face value.
  The tighter the focus on a single topic is, less open it would have to be to
  new people.
&lt;/p&gt;

&lt;p&gt;
  I often hear opinions that “IndieWeb is too technical” and that it’s keeping
  non-developer folks out.
&lt;/p&gt;

&lt;p&gt;
  &lt;b class=&quot;notion-text-bold&quot;&gt;I think that’s okay.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;First of all, IndieWeb is not the one and only option to corporate web.&lt;/p&gt;

&lt;p&gt;
  I’ve been thinking a lot whether we can have the “Indie” part without the “you
  need to make it yourself” part. At what point, does it turn from indie to
  commercial when we build tools and services that reduces or removes the
  technical portion.
&lt;/p&gt;

&lt;p&gt;
  I don’t mean this as a gatekeepy “you need to be this technical to get in” or
  “only real developers can be part of indie web”. Not at all.
&lt;/p&gt;

&lt;p&gt;
  I see two main technical challenges one needs to overcome to build and host
  their own website: they need to build the site and they need to deploy it
  somewhere. It’s really difficult to reduce these to a minimum without turning
  the entire thing into a commercial-ish service — and we have a lot of those
  ones already.
&lt;/p&gt;

&lt;p&gt;
  If you just want a website and not worry about the technical bits, you could
  buy WordPress hosting from someone who sets WP up and start writing.
&lt;/p&gt;

&lt;p&gt;
  I don’t consider that any less indie in the terms of beloging (as I discussed
  in previous section) but there seems to be a big desire to have some options
  that would be “more indie” without being any more technical.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  I like the technical parts of IndieWeb
&lt;/h2&gt;

&lt;p&gt;
  I’m a technical person and I love building my own tools and tinkering with
  stuff on Saturday evenings. For me, IndieWeb is a community that encourages
  that and helps me find other people who care about the same things.
&lt;/p&gt;

&lt;p&gt;
  &lt;b class=&quot;notion-text-bold&quot;&gt;It’s more of a mindset than a skill check.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
  I hope to invite new people into the community who want to learn how to build
  websites, to learn programming through building the websites and tools to run
  them and have an interest towards learning new things in general — and to
  share what they have learned.
&lt;/p&gt;

&lt;p&gt;
  The best outcome is when the people involved in the community build better
  tools for everyone to use to make it easier to build and run their own sites.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;5 years from now?&lt;/h2&gt;

&lt;p&gt;
  I don’t know what we’ll be specifically in five years as Belvadi is asking. My
  “membership” of it is so loose that I don’t have strong opinions on anything
  practical.
&lt;/p&gt;

&lt;p&gt;I hope that the community stays open and welcoming.&lt;/p&gt;

&lt;p&gt;
  I hope it continues to encourage and inspire people to learn how to build the
  tools they need.
&lt;/p&gt;

&lt;p&gt;
  I hope it doesn’t take itself too seriously as the only or best option to
  commercial web.
&lt;/p&gt;

&lt;p&gt;
  And I hope I’m still as excited (if not more) about building websites in five
  years.
&lt;/p&gt;

&lt;hr class=&quot;notion-divider&quot; /&gt;

&lt;p&gt;Thanks V.H. for hosting this month’s Carnival!&lt;/p&gt;


    </content>
  </entry>
   
  
  <entry>
    <title>About writing and audience</title>
    <link href="https://hamatti.org/posts/about-writing-and-audience/" />
    <updated>2025-12-03T00:00:00Z</updated>
    <id>https://hamatti.org/posts/about-writing-and-audience/</id>
    <content type="html">
      &lt;blockquote class=&quot;notion-quote notion-color-default&quot;&gt;
  Would you still write if you had a single reader? And do you appreciate the
  readers you &lt;i class=&quot;notion-text-italic&quot;&gt;do&lt;/i&gt; have?
&lt;/blockquote&gt;

&lt;p&gt;
  Richard Griffiths asked these questions in his post
  &lt;a href=&quot;https://writingslowly.com/2025/11/16/why-niche-blogs-and-small.html&quot; class=&quot;notion-text-href&quot;&gt;Why niche blogs and Small Rooms still win - even in the age of
    technofeudalism&lt;/a&gt;. I read the post when it came out as it appeared in my RSS feed and was
  reminded about it again when Daniel Miller responded to it in
  &lt;a href=&quot;https://daniel.industries/2025/11/22/why-write-online/&quot; class=&quot;notion-text-href&quot;&gt;Why Write Online?&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  I love having discussions about the audience we write for. Because I think we
  &lt;b class=&quot;notion-text-bold&quot;&gt;worry too much about it.&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
  To answer Richard’s original question: 100%. For most of the time I’ve had a
  blog, I’ve written to a basically non-existent audience. These days, my
  readership is way bigger than I can comprehend. I even have a second blog out
  there that I haven’t shared with anyone yet but I still enjoy using it as a
  creative outlet.
&lt;/p&gt;

&lt;p&gt;
  The readers of this blog are people who like to read my stuff. Plain and
  simple. I don’t have a prescribed audience that I analyse and write what I
  think they want to read. I write what I have to share and people who like
  those things, join to read.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  Writing about professional topics
&lt;/h2&gt;

&lt;p&gt;
  Earlier in my blogging journey, I did worry about it a bit. I knew that if I
  had written for a specific niche, I would have had a higher chance of
  attracting a larger audience, faster. A couple of articles that helped me
  realise it was a silly worry are
  &lt;a href=&quot;https://rachsmith.com/to-be-whole-is-the-goal/&quot; class=&quot;notion-text-href&quot;&gt;Rach Smith’s To be whole is the goal&lt;/a&gt;
  and
  &lt;a href=&quot;https://www.nateliason.com/blog/be-yourself&quot; class=&quot;notion-text-href&quot;&gt;Nat Eliason’s Be Yourself, Not a Niche&lt;/a&gt;. More recently, I’ve been introduced to
  &lt;a href=&quot;https://roytang.net/2023/06/write-anything/&quot; class=&quot;notion-text-href&quot;&gt;Roy Tang’s You Can Write About Anything&lt;/a&gt;
  that discusses similar topics.
&lt;/p&gt;

&lt;p&gt;
  I have recently been talking about blogging to developer audiences in a bunch
  of events and I often get questions about my thoughts on the audience. One of
  my key messages is that you don’t necessarily need an audience for your blog
  posts to be powerful. If you document what you’ve learned and share what you
  know, you’ll have access to those posts when you need them.
&lt;/p&gt;

&lt;p&gt;
  You can share a link to such post when someone asks for help or when you apply
  to a job. Building such body of work can be very powerful in building
  credibility and trust as an expert, if you blog about your professional
  interests. I have expanded these thoughts in
  &lt;a href=&quot;https://notes.hamatti.org/writing/why-developers-should-blog&quot; class=&quot;notion-text-href&quot;&gt;Why developers should blog?&lt;/a&gt;
  with links and quotes to other’s thoughts.
&lt;/p&gt;

&lt;h2 class=&quot;notion-heading_2 notion-color-default&quot;&gt;
  Writing for yourself first
&lt;/h2&gt;

&lt;p&gt;
  In
  &lt;a href=&quot;https://hamatti.org/posts/notes-are-a-tool-for/&quot; class=&quot;notion-text-href&quot;&gt;Notes are a tool for …&lt;/a&gt;, I wrote about different ways writing notes help me in daily life.
  Similarly, writing itself is a powerful tool to process and communicate ideas.
&lt;/p&gt;

&lt;p&gt;
  Even if nobody reads your posts, your writing improves your skills as a
  writer.
&lt;/p&gt;

&lt;p&gt;
  You don’t have to dream about becoming an author to benefit from writing
  skills. In this day and age, communication is one of the key skills in many
  industries. Not only will you spend a larger share of your work day
  communicating when the higher up you are on the career ladder but becoming a
  great communicator can help you ascend the ladder faster, if that’s something
  you’d like to do.
&lt;/p&gt;

&lt;p&gt;
  As a software developer, most of my technical posts are written for myself. I
  document what I learn so that I can find it later — sharing it with the world
  is a nice bonus benefit. If one person reads a post of mine and gets inspired
  by it or learns something new from it, it’s a massive upside. It makes me
  genuinely happy.
&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>I built a tiny RSS generator for my Advent of Code solutions</title>
    <link href="https://hamatti.org/posts/i-built-a-tiny-rss-generator-for-my-advent-of-code-solutions/" />
    <updated>2025-12-02T00:00:00Z</updated>
    <id>https://hamatti.org/posts/i-built-a-tiny-rss-generator-for-my-advent-of-code-solutions/</id>
    <content type="html">
      &lt;p&gt;
  &lt;a href=&quot;https://hamatti.org/posts/your-blog-should-have-an-rss-feed/&quot; class=&quot;notion-text-href&quot;&gt;RSS/Atom feeds are one of the great technologies in the open web&lt;/a&gt;. They allow me to follow other people and them to follow me.
&lt;/p&gt;

&lt;p&gt;
  This week, I started solving Advent of Code problems and this time I’m
  publishing my explanations as part of
  &lt;a href=&quot;https://notes.hamatti.org/technology/advent-of-code/2025/advent-of-code-2025-landing-page&quot; class=&quot;notion-text-href&quot;&gt;my Digital Garden&lt;/a&gt;
  and that doesn’t support separated RSS feeds for a subset of notes.
&lt;/p&gt;

&lt;p&gt;
  Two IndieWeb principles that I love are
  &lt;a href=&quot;https://indieweb.org/make_what_you_need&quot; class=&quot;notion-text-href&quot;&gt;Make what you need&lt;/a&gt;
  and
  &lt;a href=&quot;https://indieweb.org/use_what_you_make&quot; class=&quot;notion-text-href&quot;&gt;Use what you make&lt;/a&gt;. In that spirit, I built a tiny tool today afterwork to enable people to
  follow my Advent of Code explanations via RSS.
&lt;/p&gt;

&lt;p&gt;
  A bit of background: my personal website at
  &lt;a href=&quot;https://hamatti.org/&quot; class=&quot;notion-text-href&quot;&gt;https://hamatti.org&lt;/a&gt;
  is built with Eleventy (and a bunch of custom scripts) and my digital garden
  at
  &lt;a href=&quot;https://notes.hamatti.org/&quot; class=&quot;notion-text-href&quot;&gt;https://notes.hamatti.org&lt;/a&gt;
  is powered by notes in Obsidian and
  &lt;a href=&quot;https://quartz.jzhao.xyz/&quot; class=&quot;notion-text-href&quot;&gt;Quartz&lt;/a&gt; that
  turns them to a website.
&lt;/p&gt;

&lt;p&gt;
  To build this tiny RSS generator, I combined a Node.js script with Eleventy’s
  &lt;a href=&quot;https://www.11ty.dev/docs/data-global/&quot; class=&quot;notion-text-href&quot;&gt;Global Data Files&lt;/a&gt;
  and
  &lt;a href=&quot;https://www.11ty.dev/docs/data/&quot; class=&quot;notion-text-href&quot;&gt;templating&lt;/a&gt;.
&lt;/p&gt;

&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;const fs = require(&quot;fs&quot;);

function addEntry(entryUrl) {
  // Read existing JSON in
  const data = JSON.parse(fs.readFileSync(&quot;_data/aoc2025.json&quot;, &quot;utf-8&quot;));

  // Extract Advent of Code puzzle day from URL
  // URL looks like this:
  // https://notes.hamatti.org/technology/advent-of-code/2025/day-1
  // so capture the number from `day-1` part.
  const day = entryUrl.match(/day-(&#92;d+)/)[1];

  const today = new Date();

  // Add new feed entry
  data.entries.push({
    url: entryUrl,
    title: `Advent of Code 2025, day ${day}, explanation and solution.`,
    created: today,
  });

  // Update metadata
  data.updated = today;

  // Write new data to JSON file
  fs.writeFileSync(&quot;_data/aoc2025.json&quot;, JSON.stringify(data));
}

if (process.argv.length &amp;#60; 3) {
  console.log(&quot;Usage: npm run aocfeed [url-to-note]&quot;);
  process.exit(1);
}

addEntry(process.argv[2]);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  It’s a tiny script that reads existing JSON, adds a new entry and writes it
  back.
&lt;/p&gt;

&lt;p&gt;
  Unfortunately I don’t yet have an easy way to add the full content since it’s
  not tied to my digital garden publishing pipeline but that can be an exercise
  for a day when I have more time.
&lt;/p&gt;

&lt;p&gt;
  The data it writes looks like this, at
  &lt;code class=&quot;notion-text-code&quot;&gt;_data/aoc2025.json&lt;/code&gt; :
&lt;/p&gt;

&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;entries&quot;: [
    {
      &quot;url&quot;: &quot;https://notes.hamatti.org/technology/advent-of-code/2025/day-1&quot;,
      &quot;title&quot;: &quot;Advent of Code 2025, day 1, explanation and solution.&quot;,
      &quot;created&quot;: &quot;2025-12-02T15:17:43.981Z&quot;
    },
    {
      &quot;url&quot;: &quot;https://notes.hamatti.org/technology/advent-of-code/2025/day-2&quot;,
      &quot;title&quot;: &quot;Advent of Code 2025, day 2, explanation and solution.&quot;,
      &quot;created&quot;: &quot;2025-12-02T15:17:58.315Z&quot;
    }
  ],
  &quot;updated&quot;: &quot;2025-12-02T15:17:58.315Z&quot;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and I have a feed template like this&lt;/p&gt;

&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;---
permalink: feed/aoc2025.xml
excludeFromSitemap: true
---
&amp;#60;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;#62;
&amp;#60;feed xmlns=&quot;http://www.w3.org/2005/Atom&quot;&amp;#62;
  &amp;#60;title&amp;#62;Advent of Code 2025 - Solutions and explanations by Juhis&amp;#60;/title&amp;#62;
  &amp;#60;link href=&quot;https://hamatti.org/feed/aoc2025.xml&quot; rel=&quot;self&quot; /&amp;#62;
  &amp;#60;link href=&quot;https://notes.hamatti.org/technology/advent-of-code/2025/advent-of-code-2025-landing-page&quot; /&amp;#62;
  &amp;#60;updated&amp;#62;{{aoc2025.updated}}&amp;#60;/updated&amp;#62;
  &amp;#60;id&amp;#62;https://hamatti.org/feed/aoc2025.xml&amp;#60;/id&amp;#62;
  &amp;#60;author&amp;#62;
    &amp;#60;name&amp;#62;{{ metadata.author.name }}&amp;#60;/name&amp;#62;
    &amp;#60;email&amp;#62;{{ metadata.author.email }}&amp;#60;/email&amp;#62;
  &amp;#60;/author&amp;#62;
  {%- for entry in aoc2025.entries | reverse | limit(30) %}
  &amp;#60;entry&amp;#62;
    &amp;#60;title&amp;#62;{{entry.title}}&amp;#60;/title&amp;#62;
    &amp;#60;link href=&quot;{{ entry.url }}&quot; /&amp;#62;
    &amp;#60;updated&amp;#62;{{ entry.created }}&amp;#60;/updated&amp;#62;
    &amp;#60;id&amp;#62;{{entry.url}}&amp;#60;/id&amp;#62;
    &amp;#60;content type=&quot;html&quot;&amp;#62;
      {{entry.title}}
    &amp;#60;/content&amp;#62;
  &amp;#60;/entry&amp;#62;
  {%- endfor %}
&amp;#60;/feed&amp;#62;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  Which reads data from the
  &lt;code class=&quot;notion-text-code&quot;&gt;aoc2025.json&lt;/code&gt; file and populates a feed
  whenever I call Eleventy to create a new build.
&lt;/p&gt;

&lt;p&gt;Once I’ve published a new note, I run&lt;/p&gt;

&lt;pre class=&quot;language-shell&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;node _scripts/updateAdventOfCodeFeed.js [url-to-note]&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and push changes to my website.&lt;/p&gt;

&lt;p&gt;
  Once that deploy is done, users can follow my Advent of Code via
  &lt;a href=&quot;https://hamatti.org/feed/aoc2025.xml&quot; class=&quot;notion-text-href&quot;&gt;https://hamatti.org/feed/aoc2025.xml&lt;/a&gt;.
&lt;/p&gt;

    </content>
  </entry>
   
  
  <entry>
    <title>From Juhis with Love #011 - November of learning</title>
    <link href="https://hamatti.org/posts/external-from-juhis-with-love-011-november-of-learning/" />
    <updated>2025-11-30T00:00:00Z</updated>
    <id>https://hamatti.org/posts/external-from-juhis-with-love-011-november-of-learning/</id>
    <content type="html">
      
&lt;p&gt;
  In November issue of &lt;strong&gt;From Juhis with Love&lt;/strong&gt;, I share updates of my
  projects and lovely bits from the internet.
&lt;/p&gt;

&lt;p&gt;
  &lt;a href=&quot;https://buttondown.com/juhis/archive/011-november-of-learning/&quot;&gt;Read #011 - November of learning&lt;/a&gt;.
&lt;/p&gt;

    </content>
  </entry>
  
</feed>
