<!DOCTYPE html>
<html lang="en"><head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1"><!-- Begin Jekyll SEO tag v2.8.0 -->
<title>occasionally useful | Blog about Kotlin, Android, Ruby, GameDev, and so forth.</title>
<meta name="generator" content="Jekyll v4.3.2" />
<meta property="og:title" content="occasionally useful" />
<meta name="author" content="Max Aller" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Blog about Kotlin, Android, Ruby, GameDev, and so forth." />
<meta property="og:description" content="Blog about Kotlin, Android, Ruby, GameDev, and so forth." />
<link rel="canonical" href="https://blog.maxaller.name/" />
<meta property="og:url" content="https://blog.maxaller.name/" />
<meta property="og:site_name" content="occasionally useful" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="occasionally useful" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebSite","author":{"@type":"Person","name":"Max Aller"},"description":"Blog about Kotlin, Android, Ruby, GameDev, and so forth.","headline":"occasionally useful","name":"occasionally useful","url":"https://blog.maxaller.name/"}</script>
<!-- End Jekyll SEO tag -->
<link rel="stylesheet" href="/assets/main.css"><link type="application/atom+xml" rel="alternate" href="https://blog.maxaller.name/feed.xml" title="occasionally useful" /><script>
if(!(window.doNotTrack === "1" || navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1")) {
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-248727-10', 'auto');
  ga('send', 'pageview');
}
</script>
  
</head>
<body><header class="site-header" role="banner">

  <div class="wrapper"><a class="site-title" rel="author" href="/">occasionally useful</a><nav class="site-nav">
        <input type="checkbox" id="nav-trigger" class="nav-trigger" />
        <label for="nav-trigger">
          <span class="menu-icon">
            <svg viewBox="0 0 18 15" width="18px" height="15px">
              <path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
            </svg>
          </span>
        </label>

        <div class="trigger"><a class="page-link" href="/about/">About</a><a class="page-link" href="/categories/">Categories</a></div>
      </nav></div>
</header>
<main class="page-content" aria-label="Content">
      <div class="wrapper">
        <style>
  .wrapper {
    max-width: calc(1200px - (30px * 2));
  }
</style>

<div class="home container">

  <h1 class="heading page-heading">Welcome!</h1>

  <div id="archives">
    

  <div class="archive-group">
  <h2 class="category-head">🕹️ gamedev <!--<a href="/feed/gamedev.xml"><icon class="rss"></icon></a>--></h2>
  <a name="gamedev"></a>
  <ul>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev/2022/10/03/october-game-jam-ideas.html" title="Thoughts on some ideas for this year&#8217;s October game jams.">
      October 2022 Game Jam Ideas
    </a>
    <span title="2022-10-03 16:00 UTC">(2022)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev/2022/10/03/adventurers-guild.html" title="Discussing the quest-issuing mechanic in an adventurer&#8217;s guild-type game.">
      Adventurer's Guild: Quest Mechanic
    </a>
    <span title="2022-10-03 03:00 UTC">(2022)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev,journal/2017/02/26/space-game-ideas.html" title="If you know me, you’ll know I have a lot of (game) ideas, coupled with a less-than-spectacular attention span. Most of the games that I start would likely take 6-12 months of regular evening work (10-12 hours/week) for even a minimal game, while I usually don’t spend more than 6 weeks on a game before becoming distracted by a new idea. But 6 months of focus is a long time! I could make games that I could finish in 1-2 months, but they aren’t games I want to make. Thus, I have a lot of games that are 5% done.">
      Space Game
    </a>
    <span title="2017-02-26 20:43 UTC">(2017)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev/2017/02/19/gravity-on-circular-space-station.html" title="For accuracy, it’s nice to know how fast a rotating circular (or toroidal) space station would have to be rotating to simulate Earth-like gravity for its occupants. After some searching, I finally dug up a concise and relevant Wikipedia article that helps explain exactly that.">
      Calculating Gravity on a Circular Space Station
    </a>
    <span title="2017-02-19 20:56 UTC">(2017)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev/2016/12/16/analysis-of-room-types-in-games-pt-6.html" title="There were five games covered here – Dungeon Keeper, Theme Hospital, Rimworld, Planetbase, and Dwarf Fortress, each with distinct ways of handling rooms. There are quite a number of axes along which to analyze these games, so let’s dig in.">
      Part 6, Analysis and Conclusion: Analysis of Room Types in Games
    </a>
    <span title="2016-12-16 01:16 UTC">(2016)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev/2016/12/16/analysis-of-room-types-in-games-pt-5.html" title="Dwarf Fortress (2006, Bay 12 Games)

What game list would be complete without mentioning Dwarf Fortress? But seriously, this game actually does belong on here.

Dwarf Fortress is a game where…well, you build a fortress, and you have dwarves. Like Dungeon Keeper, you define the boundaries of your rooms mostly by digging out dirt. Like Rimworld, there isn’t a strong in-game notion of “rooms”, though you can flag areas as being a bedroom or a meeting halls. But it’s not a necessity.">
      Part 5, Dwarf Fortress: Analysis of Room Types in Games
    </a>
    <span title="2016-12-16 01:15 UTC">(2016)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev/2016/12/16/analysis-of-room-types-in-games-pt-4.html" title="Planetbase (2015, Madrugaworks)

Planetbase is slightly different from the others – you’re in spaaaace! It’s a race to build a base in space before you run out of oxygen and supplies, at least for the first few days (surviving a day is actually an achievement).">
      Part 4, Planetbase: Analysis of Room Types in Games
    </a>
    <span title="2016-12-16 01:14 UTC">(2016)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev/2016/12/16/analysis-of-room-types-in-games-pt-3.html" title="Rimworld (2013 Alpha, Ludeon Studios)

Fast forward almost two decades and you have Rimworld. This game is a little different from the Bullfrog games in that the game doesn’t itself have a notion of rooms. It knows about indoor spaces and outdoor spaces, but that’s about it. You can build and place various objects into the world (tables, chairs, etc), but at no point except in the player’s mind do you actually get a room. If you want a kitchen, you throw up some walls and put a stove in there. Dining room? Place some tables together with adjacent chairs. Bedrooms are just beds that happen to have beds in them.">
      Part 3, Rimworld: Analysis of Room Types in Games
    </a>
    <span title="2016-12-16 01:13 UTC">(2016)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev/2016/12/16/analysis-of-room-types-in-games-pt-2.html" title="Theme Hospital (1997, Bullfrog Productions)

Amusingly, released by the same company in the same year, comes Theme Hospital, a game that also has rooms, but they couldn’t be more different. In this game, you’re, well, running a (ridiculous) hospital. You’re given some buildings and capital, and have to solve the silly ailments of the community (while generating a healthy profit, of course).">
      Part 2, Theme Hospital: Analysis of Room Types in Games
    </a>
    <span title="2016-12-16 01:12 UTC">(2016)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev/2016/12/16/analysis-of-room-types-in-games-pt-1.html" title="In construction and management simulation games in which you essentially construct buildings and structures, you often have to build rooms within those structures. People (or creatures) in the game will then enter and interact with these rooms and stuff placed in these rooms; however, the implementations of rooms in games have seen an impressive amount of variety. How are rooms placed? Can you put items in the rooms? How are the walls handled?

I’m going to talk about some of the various room designs I’ve observed in games I’ve played in a six-part series, starting right now.">
      Part 1, Kickoff and Dungeon Keeper: Analysis of Room Types in Games
    </a>
    <span title="2016-12-16 01:11 UTC">(2016)</span>
  </article>
  </li>
  
  </ul>
  </div>

    

    

  <div class="archive-group">
  <h2 class="category-head">🧑‍🍳 cooking <!--<a href="/feed/cooking.xml"><icon class="rss"></icon></a>--></h2>
  <a name="cooking"></a>
  <ul>
  
  <li>
  <article class="archive-item">
    <a href="/cooking/2020/04/27/vegan-hamburger-hotdog-bun.html" title="Making hamburger/hotdog buns with a bread machine.">
      Vegan Hamburger/Hotdog Buns (w/ Bread Machine)
    </a>
    <span title="2020-04-27 04:41 UTC">(2020)</span>
  </article>
  </li>
  
  </ul>
  </div>

    

  <div class="archive-group">
  <h2 class="category-head">📝 journal <!--<a href="/feed/journal.xml"><icon class="rss"></icon></a>--></h2>
  <a name="journal"></a>
  <ul>
  
  <li>
  <article class="archive-item">
    <a href="/journal/2024/09/30/affirmations.html" title="Some affirmations I need to hear.">
      Thoughts, Affirmations, and Negativity
    </a>
    <span title="2024-09-30 01:18 UTC">(2024)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/gamedev,journal/2017/02/26/space-game-ideas.html" title="If you know me, you’ll know I have a lot of (game) ideas, coupled with a less-than-spectacular attention span. Most of the games that I start would likely take 6-12 months of regular evening work (10-12 hours/week) for even a minimal game, while I usually don’t spend more than 6 weeks on a game before becoming distracted by a new idea. But 6 months of focus is a long time! I could make games that I could finish in 1-2 months, but they aren’t games I want to make. Thus, I have a lot of games that are 5% done.">
      Space Game
    </a>
    <span title="2017-02-26 20:43 UTC">(2017)</span>
  </article>
  </li>
  
  </ul>
  </div>

    

  <div class="archive-group">
  <h2 class="category-head">📱 android <!--<a href="/feed/android.xml"><icon class="rss"></icon></a>--></h2>
  <a name="android"></a>
  <ul>
  
  <li>
  <article class="archive-item">
    <a href="/android/2016/11/25/developing-a-local-android-plugin.html" title="You’re working on your Android application and realize you have a nice piece of reusable encapsulated logic you’d like to factor out into a library. You still want to be able to develop this library and your application in parallel, so they should be on disk together and somehow linked. So what’s the best way to accomplish this?">
      Developing and linking a local Android library
    </a>
    <span title="2016-11-25 22:11 UTC">(2016)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/android/2016/11/24/local-broadcast-receiver.html" title="As a newcomer to Android, one of the things that’s surprisingly tricky is communicating with a Service (an application component for long-running operations) from other parts of your application. You can’t simply call methods on it – you have to come up with a way to broadcast messages.">
      LocalBroadcastReceiver for communicating between Services and Activities
    </a>
    <span title="2016-11-24 20:43 UTC">(2016)</span>
  </article>
  </li>
  
  </ul>
  </div>

    

  <div class="archive-group">
  <h2 class="category-head">🖥️ engineering <!--<a href="/feed/engineering.xml"><icon class="rss"></icon></a>--></h2>
  <a name="engineering"></a>
  <ul>
  
  <li>
  <article class="archive-item">
    <a href="/engineering/2025/08/10/thread-matter-home-assistant-docker.html" title="Getting Thread/Matter working with Home Assistant Docker using ownbee/hass-otbr-docker and proper network configuration.">
      Thread/Matter with Home Assistant Docker: Yes, It Actually Works
    </a>
    <span title="2025-08-10 22:55 UTC">(2025)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/engineering/2023/06/16/new-reddit-comments.html" title="Implementing hierarchical comments.">
      A New Reddit Architecture, part 2 (comments)
    </a>
    <span title="2023-06-16 07:00 UTC">(2023)</span>
  </article>
  </li>
  
  <li>
  <article class="archive-item">
    <a href="/engineering/2023/06/15/new-reddit-architecture.html" title="What it would look like to build a new Reddit-like site on AWS.">
      A New Reddit Architecture, part 1
    </a>
    <span title="2023-06-15 03:43 UTC">(2023)</span>
  </article>
  </li>
  
  </ul>
  </div>

  </div>
</div>

      </div>
    </main><footer class="site-footer">

  <div class="wrapper">

    <h2 class="footer-heading">occasionally useful</h2>

    <div class="footer-col-wrapper">
      <div class="footer-col footer-col-1">
        <ul class="contact-list">
          <li>
            
              Max Aller
            
            </li>
            
            <li><a href="mailto:blog@max.maxaller.name">blog@max.maxaller.name</a></li>
            
            <li><a href="/old_blog.html">old blog</a></li>
        </ul>
      </div>

      <div class="footer-col footer-col-3">
        <div class="social-links"><ul class="social-media-list"></ul>
</div>
        <ul class="social-media-list">
          <li>
            <a href="https://stackexchange.com/users/137535">
              <img src="https://stackexchange.com/users/flair/137535.png?theme=clean" width="208" height="58" alt="profile for Max on Stack Exchange, a network of free, community-driven Q&amp;A sites" title="profile for Max on Stack Exchange, a network of free, community-driven Q&amp;A sites">
            </a>
          </li>
        </ul>
      </div>

      <div class="footer-col footer-col-2">
        <p>Blog about Kotlin, Android, Ruby, GameDev, and so forth.
</p>
        <p class="rss-subscribe">subscribe <a href="/feed.xml">via Atom</a></p>
      </div>
    </div>
    <div id="generated-at">
      Generated at 2026-06-08 07:01 UTC
    </div>
  </div>
</footer>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="/assets/plugins/readingTime.js"></script>
<script>
  $("article.post").readingTime({readingTimeTarget: '#eta', wordCountTarget: '#word-count', prependWordString: 'Words: ', prependTimeString: 'approximately ', wordsPerMinute: 200});
</script>
</body>

</html>
