<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Blog on foosel.net</title><link>https://foosel.net/blog/</link><description>Recent content in Blog on foosel.net</description><generator>Hugo -- 0.145.0</generator><language>en-us</language><copyright>Gina Häußge (foosel)</copyright><lastBuildDate>Fri, 06 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://foosel.net/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>My TODO list lives in my pocket</title><link>https://foosel.net/blog/2026-03-06-my-todo-list-lives-in-my-pocket/</link><pubDate>Fri, 06 Mar 2026 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2026-03-06-my-todo-list-lives-in-my-pocket/</guid><description>Combining leather working, paper crafting and handwriting to manage my life</description><content:encoded><![CDATA[<p>For several months now I&rsquo;ve been meaning to write about my notebook journey. Today the stars finally aligned and I just sat down to tell you about how I&rsquo;ve been managing my TODOs for almost a year now.</p>
<p>It all started when I created myself a little leather cover for my A5 sized solo RPG journal:</p>















        
        

        
            
            
        

        
            <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114191126595846444">
                <div class="toot-header">
                    <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                        <img
                            src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                            alt="Mastodon avatar for @foosel@chaos.social"
                            loading="lazy"
                        />
                    </a>
                    <div class="toot-author">
                        <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                        <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                    </div>
                </div>
                <p>Currently learning how to play <a href="https://chaos.social/tags/Starforged" class="mention hashtag" rel="tag">#<span>Starforged</span></a> and as I apparently enjoy the journaling part of it I just built myself a traveler&#39;s notebook 😊 Apart from two notebook inserts, this also has an insert for holding my character sheet and my assets, plus a move cheat sheet.</p><p><a href="https://chaos.social/tags/making" class="mention hashtag" rel="tag">#<span>making</span></a> <a href="https://chaos.social/tags/leatherwork" class="mention hashtag" rel="tag">#<span>leatherwork</span></a> <a href="https://chaos.social/tags/solo_rpg" class="mention hashtag" rel="tag">#<span>solo_rpg</span></a> <a href="https://chaos.social/tags/ttrpg" class="mention hashtag" rel="tag">#<span>ttrpg</span></a></p>
                
                    
                        
                            
                        
                    
                        
                            
                        
                    
                        
                            
                        
                    
                        
                            
                        
                    
                    <div class="toot-img-grid-4">
                    
                        
                            
                            <style>
                                .img-a9ae72f4ab1bfe0fc8ab99a68ccc106d {
                                    aspect-ratio: 3325 / 2494;
                                }
                            </style>
                            <img
                                src="https://assets.chaos.social/media_attachments/files/114/191/114/661/115/151/original/d6e0e0b6103216dc.jpg"
                                alt="A traveler&#39;s notebook made from brown leather"
                                class="toot-media-img img-a9ae72f4ab1bfe0fc8ab99a68ccc106d"
                                loading="lazy"
                            />
                        
                    
                        
                            
                            <style>
                                .img-a1d389bab9ae628c8b8db5618e153491 {
                                    aspect-ratio: 3325 / 2494;
                                }
                            </style>
                            <img
                                src="https://assets.chaos.social/media_attachments/files/114/191/115/578/435/489/original/9df115952591023d.jpg"
                                alt="Craft paper insert with a big pocket for some asset cards."
                                class="toot-media-img img-a1d389bab9ae628c8b8db5618e153491"
                                loading="lazy"
                            />
                        
                    
                        
                            
                            <style>
                                .img-85174fd57622e1a23341dbf1af6d0b1d {
                                    aspect-ratio: 3325 / 2494;
                                }
                            </style>
                            <img
                                src="https://assets.chaos.social/media_attachments/files/114/191/115/961/179/899/original/244bc59a564175c5.jpg"
                                alt="Notebook insert with a part of my current run"
                                class="toot-media-img img-85174fd57622e1a23341dbf1af6d0b1d"
                                loading="lazy"
                            />
                        
                    
                        
                            
                            <style>
                                .img-16ed1d771035e4691da4bdcd6e0b9ca4 {
                                    aspect-ratio: 3325 / 2494;
                                }
                            </style>
                            <img
                                src="https://assets.chaos.social/media_attachments/files/114/191/116/130/826/300/original/41c4f4587a06a332.jpg"
                                alt="Craft paper insert holding my folded character sheet."
                                class="toot-media-img img-16ed1d771035e4691da4bdcd6e0b9ca4"
                                loading="lazy"
                            />
                        
                    
                    </div>
                    
                    
                        
                        
                    
                        
                        
                    
                        
                        
                    
                        
                        
                    
                
                
                
                <div class="toot-footer">
                    <a href="https://chaos.social/@foosel/114191126595846444" class="toot-date" rel="noopener">March 19, 2025, 21:05</a>&nbsp;<span class="pokey">(UTC)</span>
                </div>
            </blockquote>
        
    
<p>I quickly realized that I quite liked writing down things by hand on the 100gsm dot grid paper of the notebook I got, and that I also liked the look and functionality of what I had created there.</p>
<p>That lead to an idea. At this point I was still managing my TODOs in <a href="https://todoist.com">Todoist</a>, but also often ended up writing down the weekly tasks on the whiteboard in my office as I had learned that checking them off physically with an actual pen gave me way more dopamine than clicking a checkbox in an app. And the whiteboard approach quickly fell apart when I was not at my desk - I often ended up taking a picture of my whiteboard before having to work from somewhere else, or putting things into Todoist that felt a bit like they didn&rsquo;t belong there (small chores).</p>
<p>So I thought that maybe I should just try to go fully analogue with my tasks, in a portable form factor. The A5 size I had used for the RPG journal didn&rsquo;t fit that portability requirement fully, but A6 would be something that I could easily fit into my cargo pockets. I thus ordered a stack of A6 notebooks<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> and built another leather cover for that size.</p>















        
        

        
            
            
        

        
            <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114241410760797146">
                <div class="toot-header">
                    <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                        <img
                            src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                            alt="Mastodon avatar for @foosel@chaos.social"
                            loading="lazy"
                        />
                    </a>
                    <div class="toot-author">
                        <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                        <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                    </div>
                </div>
                <p>After really enjoying using the traveler&#39;s notebook I built for <a href="https://chaos.social/tags/solorpg" class="mention hashtag" rel="tag">#<span>solorpg</span></a> use recently*, I&#39;ve just now built a smaller version for regular note taking. While I&#39;m a huge fan of <span class="h-card" translate="no"><a href="https://mas.to/@obsidian" class="u-url mention">@<span>obsidian</span></a></span>, not everything needs to be digital and I want to try some analog brainstorming and possibly journaling again.</p><p>* see <a href="https://chaos.social/@foosel/114191126595846444" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">chaos.social/@foosel/114191126</span><span class="invisible">595846444</span></a></p><p><a href="https://chaos.social/tags/leatherworking" class="mention hashtag" rel="tag">#<span>leatherworking</span></a></p>
                
                    
                        
                            
                        
                    
                    <div class="toot-img-grid-1">
                    
                        
                            
                            <style>
                                .img-e21e1a72443dbcd0ed66d2c4d3f9fb29 {
                                    aspect-ratio: 3325 / 2494;
                                }
                            </style>
                            <img
                                src="https://assets.chaos.social/media_attachments/files/114/241/401/327/898/403/original/8570c4aa2b82fefb.jpg"
                                alt="A passport/A6 sized traveler&#39;s notebook sitting on a table"
                                class="toot-media-img img-e21e1a72443dbcd0ed66d2c4d3f9fb29"
                                loading="lazy"
                            />
                        
                    
                    </div>
                    
                    
                        
                        
                    
                
                
                
                <div class="toot-footer">
                    <a href="https://chaos.social/@foosel/114241410760797146" class="toot-date" rel="noopener">March 28, 2025, 18:13</a>&nbsp;<span class="pokey">(UTC)</span>
                </div>
            </blockquote>
        
    
<p>Once more I went with a <a href="https://www.instructables.com/DIY-Midori-Style-Travelers-Notebook/">Midori style &ldquo;Traveler&rsquo;s Notebook&rdquo; approach</a> - a simple leather cover with a bungie cord in the middle, acting as both a place where to hang in one notebook from its spine, and a loop on the outside to keep the journal closed. To hang more than one book, additional bungie cord loops can be used to attach two or more books together.</p>
<p>Just like with my RPG journal, I also built myself an insert out of craft cardboard, to hold some of my cards and a slim tracker module, allow storing flat things on the front and back (receipts, tickets, my x-ray passport &amp; dentist bonus log&hellip;) and attach a pen loop and some bookmark ribbons to as well.</p>
<p><img alt="The outside front of the insert, with two card holders. The top one holds some white cards, the bottom one a black card sized tracker." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/front_inlay.resized.jpg"></p>
<p><img alt="Inside the insert&rsquo;s front there&rsquo;s a pocket to store flat stuff." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/front_inlay_2.resized.jpg"></p>
<p><img alt="The insert&rsquo;s back also has a pocket inside." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/back_inlay.resized.jpg"></p>
<p>Then I sat down and thought a lot on how to best go about organising things. I of course had heard about the <a href="https://bulletjournal.com/">Bullet Journal</a> method, so I looked up details on that. I quickly learned two things: 1) contrary to what images I found online and what I saw my mom doing made me believe, at its core bullet journalling is way less about fancy hand lettering and page designs but rather about rapidly logging down stuff and b) it&rsquo;s not actually about TODO lists but rather an approach for helping with self reflection and reaching your goals.</p>
<p>What I got from a) actually helped me a lot, but b) didn&rsquo;t work for me at all. I do call my little notebook my Bullet Journal, but it is in fact mostly a TODO list combined with some personal tracking, and of course note taking.</p>
<p>I did adopt the symbols however: Tasks that are planned but not yet started get a <code>•</code> in front of them. I can cross that off with an <code>X</code> to turn it into &ldquo;done&rdquo;. If a task takes longer or spans across multiple days, I can cross it off halfway <code>/</code> to mark it as started or in progress. With <code>&lt;</code> or <code>&gt;</code> I can signify that a task was rescheduled (forwards or backwards). All of these symbols can just be drawn over the initial <code>•</code> and I find that an amazing way to keep track of more than two possible task states.</p>
<p>Additionally I also use <code>°</code> for events, <code>-</code> to mark notes, <code>=</code> for mental and physical health related things and <code>»</code> for quotes.</p>
<p>So, how do I use all of this to organise my life now?</p>
<p>My journal contains two 30 sheet/60 page A5 books.</p>
<p>The first one is focused on the current month. I use it to keep track of my running tasks, logging my days, monitoring my <a href="https://foosel.net/blog/2025-09-15-about-my-chronic-vertigo/">vertigo symptoms</a> and mood. It helps me a ton  each day to see that I actually did get stuff done (even if it often doesn&rsquo;t feel like it).</p>
<p>Each month I create an overview of tasks I should get done sometime this month in my <em>Monthly Log</em>, and an overview of the next month and anything later than that in my <em>Future Log</em>.</p>
<p><img alt="Spread in my notebook showing the tasks for this month, and the future tasks for next month and later dates." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/this_and_next_month.resized.webp"></p>
<p>My <em>Daily Log</em> is combined with my mood tracker. I jot down one <strong>positive</strong> thing about each day (to combat the constant doom and gloom caused by living in this reality - it helps reading through what I write here at the end of each month). Even if it is just about taking an amazing nap that day, it counts.</p>
<p><img alt="Spread in my notebook showing a daily log, one line per day for the whole month, and a mood graph mapping each day&rsquo;s average mood in five levels." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/daily_log.resized.webp"></p>
<p>Then follows a spread with my <em>Vertigo Log</em>. It&rsquo;s a monthly log again with columns for the various symptoms and possible triggers I&rsquo;m tracking, with some space for daily notes as well. Sorry, but I&rsquo;m not including a picture here as all of that is a bit too personal to share publicly.</p>
<p>The rest of the notebook is organised by week. Each week I start with an overview of my repeating <em>chores</em> in the shape of an <a href="https://alastairjohnston.com/projects-the-alastair-method/">Alastair matrix</a>. I have columns for all days of the week. Each task gets its own line, with a <code>•</code> in the column(s) of the day(s) where I need or want to take care of it, and another <code>•</code> right in front of the task that I get to cross off when it&rsquo;s done.</p>
<p><img alt="Spread with a week&rsquo;s chore list on the left and a list of tasks for Next Week on the right." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/chores_and_next_week.resized.webp"></p>
<p>On the second page of the spread I have my running list of things I need to take care of <em>next week</em>.</p>
<p>The next spread is my running <em>tasks</em> list for the week. I put everything here as it comes up. Like the chores list it&rsquo;s a matrix allowing me to schedule each task for one or more specific days.</p>
<p><img alt="Spread with a running task list of a week." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/running_tasklist.resized.webp"></p>
<p>As you can see, I also color code tasks with markers, which allows me to easily filter the list at a glance. Green is work related, light blue are household chores, dark blue are health related tasks and pink are event related things.</p>
<p>I pre-fill the chores and tasks list based on the things I scheduled for this week over the course of last week, the monthly log &amp; the weekly repeated chores.</p>
<p>On the next pages then follows my running log of the week. Each morning I jot down the current date and weekday, take note of the weather (and also keep that updated throughout the day - it&rsquo;s a vertigo trigger) and then copy over all tasks scheduled for the day from the list of chores or tasks. Whatever comes up during the day gets added too, and also put on the running task list (I want that as a full overview of the week). If something comes up that doesn&rsquo;t need to get done this week, I throw it on the list for next week, or next month or later, whatever fits.</p>
<p><img alt="Spread of a running weekly log in my notebook. There are headers for March 2nd through March 4th, little symbols next to them, and several notes below." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/running_week.resized.webp"></p>
<p>What I also log into each day&rsquo;s header are various symbols for habit tracking, and an overall mood indicator - I use that for the mood graph in the daily log.</p>
<p>That&rsquo;s basically the day to day with the notebook: Jot down tasks as they come, get an overview each day, get sweet sweet dopamine every time I cross something off.</p>
<p>But what about the second book? That is for longer term tracking.</p>
<p>I have an overview of (recurring) tasks throughout the year here that I need to take care of. I use that at the start of each month to prefill the monthly log.</p>
<p><img alt="Spread in my notebook, titled &ldquo;Monthly Task List 2026&rdquo;. It&rsquo;s a matrix with columns for each month and a whole bunch of tasks scheduled across them." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/monthly_tasks_2026.resized.webp"></p>
<p>I also use the second notebook for long term work stuff, e.g. here is how I keep track of what I needed to take care of for each bugfix release for OctoPrint 1.11.x that wasn&rsquo;t already logged in the shape of public issues, PRs or commits, e.g. things I need to mention in the changelog, or not yet published security advisories.</p>
<p><img alt="Spread in my notebook, titled &ldquo;OctoPrint 1.11.x&rdquo;. There are entries for 1.11.1 to 1.11.8. All entries up to and including 1.11.7 have notes below them, a checkmark next to the header and the release date." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/octoprint_1.11.x.resized.webp"></p>
<p>What else goes in there are ideas for various projects, what things I have borrowed to or from friends (and when and whether it was returned yet), what books I read, vacation plans, quick notes, notes about talks I&rsquo;ve seen &hellip; In short, basically everything else. I have a ton of lists (the Bullet Journal Method calls those &ldquo;collections&rdquo;), some of which are getting constantly updated, some of which only act as reference.</p>
<p>Some things from the second book get copied over to my personal knowledge base that I keep in <a href="https://obsidian.md">Obsidian</a> (synced to my own NextCloud). As an example, I used the notebook last year during two PyCon Italia and EuroPython to take notes during the talks I attended, and those have now gone into my knowledge base (or turned into tasks long taken care of).</p>
<p>Really long term tasks - e.g. future vaccinations, check-ups and such - I still keep digitally in <a href="https://tasks.org">tasks.org</a> (also synced to my own NextCloud). At some point they&rsquo;ll trigger a reminder on my phone, and then they&rsquo;ll get schedule in my regular task list.</p>
<p>At this point I can say that basically everything gets managed with the help of this tiny self built journal for almost a year now and that works amazingly well for me.</p>
<p><img alt="My closed journal on my desk, next to it a couple of pastelle colored marker pens." loading="lazy" src="/blog/2026-03-06-my-todo-list-lives-in-my-pocket/bujo_and_pens.resized.jpg"></p>
<p>Needless to say I&rsquo;ve cancelled my Todoist subscription. 😉 <a href="https://di.day">#iDIDit</a>.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I got <a href="https://www.amazon.de/dp/B0D3YTV4GZ">these</a> but I&rsquo;m sure you can find something similar elsewhere too.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>What cool stuff did I do in 2025?</title><link>https://foosel.net/blog/2025-12-30-2025-retrospective/</link><pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2025-12-30-2025-retrospective/</guid><description>Highlighting some of my personal achievements of the past year to combat the negative vibes of this year</description><content:encoded><![CDATA[<p>Just like <a href="https://foosel.net/blog/2024-12-30-2024-retrospective/">last year</a> I&rsquo;ve decided to sit down today and write my very own retrospective. The year has been difficult in several ways, but whenever I took another look at last year&rsquo;s post it put a smile on my face, remembering the good things about life in general.</p>
<p>In the hope that this will continue to work, here we go with the same look at cool stuff that I did or experienced in 2025&hellip;</p>
<ol>
<li>
<p>I started the year with my by now traditional deep clean project, this time taking care of my hallway and the built-in closet. That also included recycling my first ever 3d printer with which everything OctoPrint started - a step I had to do for space reasons, but which still felt weird.</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/113760557884199400">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>Continuing my start-of-the-year clean-up project tradition (for last year&#39;s project see <a href="https://chaos.social/@foosel/111687404140972445" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">chaos.social/@foosel/111687404</span><span class="invisible">140972445</span></a>).</p><p>Today I tackled the hallway shelf and the built-in closet. Filled up several garbage bags once more. Ouch, my back 😅</p><p>I also decided to throw out my first 3d printer that was still stored in the closet, as much as it saddens me. It&#39;s no longer working &amp; it&#39;s taking up too much space for that. But I&#39;ll keep the front plate &amp; Pi 😊</p><p>No before pictures for you bw - too embarrassing 😬</p>
                   
                       
                           
                               
                           
                       
                           
                               
                           
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-3">
                       
                           
                               
                               <style>
                                   .img-2140162f994f8b39e9b299983aa5a15a {
                                       aspect-ratio: 2494 / 3325;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/760/522/317/649/813/original/ecbbde4c30707d16.jpg"
                                   alt="Hallway shelf with some games, bottles, COVID/health related stuff and storage for empties. To the left two stacked up chairs from the dinner table."
                                   class="toot-media-img img-2140162f994f8b39e9b299983aa5a15a"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-1f2ccf7901347e88915635318ef6e39f {
                                       aspect-ratio: 2494 / 3325;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/760/522/696/338/037/original/b447ffca799bec41.jpg"
                                   alt="Built-in closet. Kitchen stuff, household and DIY things, some hung up jackets and bags, tools, airbrush stuff, foldable trolley"
                                   class="toot-media-img img-1f2ccf7901347e88915635318ef6e39f"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-a0a279b3a9a45d38c64cd3643ee9bd35 {
                                       aspect-ratio: 2494 / 3325;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/760/523/545/501/778/original/4d91d23ecf22866e.jpg"
                                   alt="A slightly modded original Ultimaker built from laser cut wood"
                                   class="toot-media-img img-a0a279b3a9a45d38c64cd3643ee9bd35"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                           
                           
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/113760557884199400" class="toot-date" rel="noopener">January 2, 2025, 20:05</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
</li>
<li>
<p>I painted all of the (core) miniatures of my copy of <a href="https://boardgamegeek.com/boardgame/204472/sub-terra">&ldquo;Sub Terra&rdquo;</a>, making sure to also use a bit of UV colors for some special effects under black light.</p>
<p>
   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/113776631910946170">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>It&#39;s been years since I last painted some <a href="https://chaos.social/tags/miniatures" class="mention hashtag" rel="tag">#<span>miniatures</span></a>, and since then several <a href="https://chaos.social/tags/boardgames" class="mention hashtag" rel="tag">#<span>boardgames</span></a> have moved in that come with some. </p><p>As I find painting quite relaxing (it allows me to focus on something I&#39;m doing with my hands while making my brain shut up), I recently decided it was time to get back into it. I also wanted to try something new and got myself a set of Army Painter Speedpaints.</p><p>I started with the core game of Sub Terra yesterday and am quite happy with how things are looking now 😊</p>
                   
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-1">
                       
                           
                               
                               <style>
                                   .img-ab02a3b002de4906f50098b1b4c9c9d3 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/776/622/498/110/728/original/2591f48b6fa2d0a9.jpg"
                                   alt="Miniatures of the core game of Sub Terra, mounted on corks and painted."
                                   class="toot-media-img img-ab02a3b002de4906f50098b1b4c9c9d3"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/113776631910946170" class="toot-date" rel="noopener">January 5, 2025, 16:13</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/113776640997773679">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>And since this is a game that can be played in the darkness under UV light, I decided to add a little extra too...</p>
                   
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-1">
                       
                           
                               
                               <style>
                                   .img-fd2de912d4fda6037db7d69986a94185 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/776/635/697/100/256/original/5f3935e93f0e97d9.jpg"
                                   alt="The same shot under UV light, showing the monsters glowing green and the headlamps on the characters glowing white."
                                   class="toot-media-img img-fd2de912d4fda6037db7d69986a94185"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/113776640997773679" class="toot-date" rel="noopener">January 5, 2025, 16:16</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       </p>
</li>
<li>
<p>That also prompted me to finally kit up my painting stuff on a small cart that fits into the freshly cleaned up built-in closet.</p>
<p><img loading="lazy" src="/blog/2025-12-30-2025-retrospective/painting-cart.jpg"></p>
</li>
<li>
<p>As it is also becoming traditional by now, I spent some wonderfully calm days with my partner in the southern Black Forest again. We spent the days taking long walks/hikes through the snowy landscape, and the evenings playing through <a href="https://store.steampowered.com/app/2716400/The_Rise_of_the_Golden_Idol/">&ldquo;Rise of the Golden Idol&rdquo;</a> - quality time! 😊</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/113856741272685499">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>Spent a beautiful week with my partner of now five years in the southern Black Forest, to celebrate our anniversary by taking a short time out in nature 😊</p><p>While I&#39;m admittedly not too thrilled to return to work again tomorrow, this was the kind of reset I needed and it did a lot in topping up my energy levels 🥰</p><p>Apart from hiking and a wellness day in a spa, we also played through Rise of the Golden Idol in the evenings 😊 <a href="https://chaos.social/tags/relationshipGoals" class="mention hashtag" rel="tag">#<span>relationshipGoals</span></a></p>
                   
                       
                           
                               
                           
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-2">
                       
                           
                               
                               <style>
                                   .img-e8a9968ce200f6d87eedf9332e6eb1dd {
                                       aspect-ratio: 3840 / 2160;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/856/712/202/153/005/original/c3fb2bbd389c48f3.jpg"
                                   alt="Me posing next to the summit cross of the Belchen mountain. Behind me there&#39;s an ocean of clouds against a blue sky. The outlines of the Alps are visible in the far off distance."
                                   class="toot-media-img img-e8a9968ce200f6d87eedf9332e6eb1dd"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-658ca92d2db5d71b4cff2e65111ec25a {
                                       aspect-ratio: 3136 / 2356;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/856/759/148/403/930/original/2ae0fa8e719e7b3b.jpg"
                                   alt="Selfie of me and my partner, both of us wearing sun glasses against the glaring sun and hats and winter clothes against the biting cold, smiling into the camera."
                                   class="toot-media-img img-658ca92d2db5d71b4cff2e65111ec25a"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/113856741272685499" class="toot-date" rel="noopener">January 19, 2025, 19:46</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
</li>
<li>
<p>Back from that, I finally found the time to frame the bits of my first 3d printer that I kept and hung them in my office - that way it&rsquo;s not fully gone but taking up way less space than it did before.</p>
<p><img loading="lazy" src="/blog/2025-12-30-2025-retrospective/ultimaker-framed.jpg"></p>
</li>
<li>
<p>At the end of January, I gave my first talk in front of a live audience since the start of the pandemic, at a local Women in Tech meetup. To say that I was incredibly nervous about this would be an understatement, but everything went smoothly once I got started 😊</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/113916461942021342">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>Another one for the collection to remind me that I in fact now CAN give talks without turning bright red thanks to crippling stagefright 💪 It was a long process ^^</p><p>Slides are now also up on foosel.net!</p><p>Thank you Christian for the picture!</p>
                   
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-1">
                       
                           
                               
                               <style>
                                   .img-9ee7f9543b59d6a9e2f9d515b77ae905 {
                                       aspect-ratio: 1280 / 960;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/916/453/436/582/228/original/3c52bc42e4fca356.jpeg"
                                   alt="Me standing on stage, giving a talk. I&#39;m wearing an OctoPrint shirt and a mask. Behind me there&#39;s a slide about me, with my avatar on the right and a short bio on the left."
                                   class="toot-media-img img-9ee7f9543b59d6a9e2f9d515b77ae905"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/113916461942021342" class="toot-date" rel="noopener">January 30, 2025, 08:54</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
</li>
<li>
<p>Using my vinyl cutter I created some custom Mass Effect merch! Happy to say that the design indeed held up through several washes now - this thing has become my favourite hoodie and I&rsquo;m actually wearing it as I&rsquo;m typing these lines.</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/113934395775722840">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>Took care of a <a href="https://chaos.social/tags/project" class="mention hashtag" rel="tag">#<span>project</span></a> I had planned since before Christmas and turned a hoodie off mine into something a tad nerdier. This is now my favourite hoodie on the citadel!¹</p><p>¹ I just hope it survives the laundry, still my first steps with HTV 🙈</p><p><a href="https://chaos.social/tags/MassEffect" class="mention hashtag" rel="tag">#<span>MassEffect</span></a></p>
                   
                       
                           
                               
                           
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-2">
                       
                           
                               
                               <style>
                                   .img-4e3ce2fb448135d84ce111396cf7f6cb {
                                       aspect-ratio: 2464 / 3280;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/934/384/143/985/215/original/27840b314850673d.jpg"
                                   alt="Me wearing a dark grey hoodie jacket. On the breast of the jacket there&#39;s a print with a prominent &#34;N7&#34; logo from Mass Effect."
                                   class="toot-media-img img-4e3ce2fb448135d84ce111396cf7f6cb"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-6110cac4a5cb4aa7946aa7ff1508af95 {
                                       aspect-ratio: 2464 / 3280;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/113/934/384/374/978/518/original/46d1900a8c8bee66.jpg"
                                   alt="Close-up of the print. It says &#34;Alliance Special Forces Training Program&#34; around a circle, and there&#39;s the alliance logo in the middle with the N7 logo underneath."
                                   class="toot-media-img img-6110cac4a5cb4aa7946aa7ff1508af95"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/113934395775722840" class="toot-date" rel="noopener">February 2, 2025, 12:55</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
<p>I also created two more shirts, and another hoodie for my partner:</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114060040625283604">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>When the world becomes too much, I tend to make things...</p><p>Paragon shirt and Cerberus Normandy SR2 hoodie for my partner, Renegade shirt for me 😊</p>
                   
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-1">
                       
                           
                               
                               <style>
                                   .img-e0819dd3b1a6ac77c7a36b9be3767d6d {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/114/060/028/822/084/093/original/f4ba7db7a17c4769.jpg"
                                   alt="Three freshly created Mass Effect textiles next to each other, a shirt with the Paragon logo in blue, a short with the Renegade logo in red, and a zipper hoodie with the Cerberus logo and &#34;Normandy SR2&#34; in white and orange."
                                   class="toot-media-img img-e0819dd3b1a6ac77c7a36b9be3767d6d"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/114060040625283604" class="toot-date" rel="noopener">February 24, 2025, 17:28</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
</li>
<li>
<p>I finally played through <a href="https://store.steampowered.com/app/1562430/DREDGE/">&ldquo;Dredge&rdquo;</a> and had a blast doing so!</p>
</li>
<li>
<p>I bought a new vacuum and immediately fell into love with it, so much so that I printed a whole bunch of holders for its adapters 😂 Peak adulting ^^</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114054064123727495">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>For the record, my new cordless vacuum arrived early last week and I&#39;m really in love with that thing 😅</p><p>And after printing some holders yesterday and today, I now have it hanging in the built-in closet with all the adapters right next to it, ready to go every second 👍😀</p>
                   
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-1">
                       
                           
                               
                               <style>
                                   .img-df0731a8116ac8ea41f79cc101acf36f {
                                       aspect-ratio: 2494 / 3325;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/114/054/053/943/862/467/original/f1ccf15c4469271e.jpg"
                                   alt="Picture of the vacuum and its adapters in the built-in closet. The vacuum is mounted right behind the door. On the inside of the door there are some 3d printed holders holding all the adapters and a hose."
                                   class="toot-media-img img-df0731a8116ac8ea41f79cc101acf36f"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/114054064123727495" class="toot-date" rel="noopener">February 23, 2025, 16:08</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
</li>
<li>
<p>I started on my journey to reduce my footprint on US clouds:</p>
<ul>
<li>I switched from Google Drive to a NextCloud instance hosted at Hetzner in a german data center</li>
<li>After adding some more storage to my NAS I migrated all my pictures from Google Photos to a self-hosted <a href="https://immich.app/">immich</a> server</li>
<li>I switched my homelab&rsquo;s backup approach from Synology&rsquo;s proprietary stuff to <a href="https://www.borgbackup.org/">Borg</a>/<a href="https://torsion.org/borgmatic/">borgmatic</a></li>
</ul>
</li>
<li>
<p>I started playing <a href="https://tomkinpress.com/pages/ironsworn-starforged">&ldquo;Starforged&rdquo;</a> and for journaling my adventures built myself a traveler&rsquo;s notebook.</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114191126595846444">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>Currently learning how to play <a href="https://chaos.social/tags/Starforged" class="mention hashtag" rel="tag">#<span>Starforged</span></a> and as I apparently enjoy the journaling part of it I just built myself a traveler&#39;s notebook 😊 Apart from two notebook inserts, this also has an insert for holding my character sheet and my assets, plus a move cheat sheet.</p><p><a href="https://chaos.social/tags/making" class="mention hashtag" rel="tag">#<span>making</span></a> <a href="https://chaos.social/tags/leatherwork" class="mention hashtag" rel="tag">#<span>leatherwork</span></a> <a href="https://chaos.social/tags/solo_rpg" class="mention hashtag" rel="tag">#<span>solo_rpg</span></a> <a href="https://chaos.social/tags/ttrpg" class="mention hashtag" rel="tag">#<span>ttrpg</span></a></p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-4">
                        
                            
                                
                                <style>
                                    .img-a9ae72f4ab1bfe0fc8ab99a68ccc106d {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/191/114/661/115/151/original/d6e0e0b6103216dc.jpg"
                                    alt="A traveler&#39;s notebook made from brown leather"
                                    class="toot-media-img img-a9ae72f4ab1bfe0fc8ab99a68ccc106d"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-a1d389bab9ae628c8b8db5618e153491 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/191/115/578/435/489/original/9df115952591023d.jpg"
                                    alt="Craft paper insert with a big pocket for some asset cards."
                                    class="toot-media-img img-a1d389bab9ae628c8b8db5618e153491"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-85174fd57622e1a23341dbf1af6d0b1d {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/191/115/961/179/899/original/244bc59a564175c5.jpg"
                                    alt="Notebook insert with a part of my current run"
                                    class="toot-media-img img-85174fd57622e1a23341dbf1af6d0b1d"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-16ed1d771035e4691da4bdcd6e0b9ca4 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/191/116/130/826/300/original/41c4f4587a06a332.jpg"
                                    alt="Craft paper insert holding my folded character sheet."
                                    class="toot-media-img img-16ed1d771035e4691da4bdcd6e0b9ca4"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/114191126595846444" class="toot-date" rel="noopener">March 19, 2025, 21:05</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
<p>This in turn led to me starting a Bullet Journal in an A6 sized self crafted traveler&rsquo;s notebook, and that&rsquo;s been used daily since. I&rsquo;ve been meaning to write a post about that, I really need to do this asap&hellip;</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114241410760797146">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>After really enjoying using the traveler&#39;s notebook I built for <a href="https://chaos.social/tags/solorpg" class="mention hashtag" rel="tag">#<span>solorpg</span></a> use recently*, I&#39;ve just now built a smaller version for regular note taking. While I&#39;m a huge fan of <span class="h-card" translate="no"><a href="https://mas.to/@obsidian" class="u-url mention">@<span>obsidian</span></a></span>, not everything needs to be digital and I want to try some analog brainstorming and possibly journaling again.</p><p>* see <a href="https://chaos.social/@foosel/114191126595846444" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">chaos.social/@foosel/114191126</span><span class="invisible">595846444</span></a></p><p><a href="https://chaos.social/tags/leatherworking" class="mention hashtag" rel="tag">#<span>leatherworking</span></a></p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-e21e1a72443dbcd0ed66d2c4d3f9fb29 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/241/401/327/898/403/original/8570c4aa2b82fefb.jpg"
                                    alt="A passport/A6 sized traveler&#39;s notebook sitting on a table"
                                    class="toot-media-img img-e21e1a72443dbcd0ed66d2c4d3f9fb29"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/114241410760797146" class="toot-date" rel="noopener">March 28, 2025, 18:13</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>On Easter my partner surprised me with a self-designed Lego Brickheads kit of us, which I had a blast building together with him.</p>
<p><img alt="Custom Brickheads of &ldquo;Gina&rdquo; and &ldquo;Dennis&rdquo; built and standing in front of the custom made box" loading="lazy" src="/blog/2025-12-30-2025-retrospective/brickheads.jpg"></p>
</li>
<li>
<p>I finally bound a book again, creating my first ever paperback!</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114405026360844463">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>I haven&#39;t bound a book in a while but wanted to turn my copy of The Perilous Void into something physical for use on my <a href="https://chaos.social/tags/Starforged" class="mention hashtag" rel="tag">#<span>Starforged</span></a> adventure. Originally I planned to go with ring binding, but the printout didn&#39;t leave enough space for that so instead I went for a double fan bound paperback. Not perfect, but I&#39;m still quite proud of it 😊</p><p><a href="https://chaos.social/tags/solorpg" class="mention hashtag" rel="tag">#<span>solorpg</span></a> <a href="https://chaos.social/tags/ttrpg" class="mention hashtag" rel="tag">#<span>ttrpg</span></a> <a href="https://chaos.social/tags/bookbinding" class="mention hashtag" rel="tag">#<span>bookbinding</span></a></p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-4">
                        
                            
                                
                                <style>
                                    .img-1014eb72eadb421cca69e3e3e3da7d85 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/405/018/114/577/140/original/8b51b1fd7255b7e5.jpg"
                                    alt="The finished paperback lying on a table."
                                    class="toot-media-img img-1014eb72eadb421cca69e3e3e3da7d85"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-7ab41050e723ad9a91b2535ca1cb696f {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/405/018/350/375/775/original/d7e586379f0a1814.jpg"
                                    alt="Closer look at the spine of the finished paperback."
                                    class="toot-media-img img-7ab41050e723ad9a91b2535ca1cb696f"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-9c593f2bb8314323fa2a6587c4a49d67 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/405/018/610/572/487/original/f48dfcc927685233.jpg"
                                    alt="The book held open by my hand."
                                    class="toot-media-img img-9c593f2bb8314323fa2a6587c4a49d67"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-e238c0602e576a229f35666035911fb0 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/405/018/778/405/114/original/5eb69439ac71f3cb.jpg"
                                    alt="Close-up of the bound spine while held open."
                                    class="toot-media-img img-e238c0602e576a229f35666035911fb0"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/114405026360844463" class="toot-date" rel="noopener">April 26, 2025, 15:42</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>I upgraded my Framework 13 Intel 11th gen to a new AMD Ryzen AI 300 mainboard. It&rsquo;s my daily driver that I use for basically everything, and so I also put all the RAM in there that it supported: 96GB, which back then cost me 180€. Given the RAM prices now (the same kit now is getting sold for 900€), I am incredibly happy about this foresight 😬</p>
<p><img alt="Screenshot of the System Information of the new laptop. Device name: mariner; OS: Fedora Linux 42 (Workstation Edition); Hardware Model: Framework Laptop 13 AMD Ryzen AI 300 Series; Processor: AMD Ryzen HX370 w/ Radeon 890M x 24; Memory: 96GiB; Disk Capacity: 2.0 TB" loading="lazy" src="/blog/2025-12-30-2025-retrospective/framework-upgrade.png"></p>
</li>
<li>
<p>During an evening walk through my partner&rsquo;s home town with him I made an incredible find in a &ldquo;book closet&rdquo;: A book about home computers from the mid 1980s.</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114507595287597953">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>Auf dem Abendspaziergang gerade dieses Kleinod in einem Bücherschrank gefunden und ich bin hin und weg. Das hätte ich gerne als Kind gehabt! Geht richtig tief in den Erklärungen und ist finde ich sehr schön aufbereitet. Ich bin gerade total glücklich über diesen Schatz und werde es in Ehren halten!</p><p>Und ich glaub ich gehe Mal auf die Jagd nach den anderen Teilen 😅</p><p>Ich hab noch keine Jahreszahl gefunden, aber die PLZ des Verlags ist noch vierstellig, also wohl vor 1993.</p><p>*edit* Wohl ~1985 😀</p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-4">
                        
                            
                                
                                <style>
                                    .img-0fb2a69fb3c86875c64098675b71e900 {
                                        aspect-ratio: 2494 / 3325;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/507/569/798/910/952/original/078291aed7edddef.jpg"
                                    alt="Cover von &#34;Schreibers Schlüssel zur Computerwelt: Heimcomputer&#34;. Das Cover zeigt eine grafische Darstellung eines alten Mikrocomputers."
                                    class="toot-media-img img-0fb2a69fb3c86875c64098675b71e900"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-29a77f36704a5917e699b324a425af9d {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/507/571/809/218/163/original/721bada242237073.jpg"
                                    alt="Doppelseite des Buches, &#34;Was ist das - ein Computer?&#34;.
    
    Diverse Textboxen und Zeichnungen zeigen und beschreiben verschiedene Bestandteile eines Mikrocomputers."
                                    class="toot-media-img img-29a77f36704a5917e699b324a425af9d"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-073a4f9df27857a95fee220e7b125786 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/507/573/794/942/030/original/3bf504eb19bb6b5f.jpg"
                                    alt="Doppelseite im Buch, &#34;Die Sache mit den Bits&#34;. In verschiedenen Textboxen aufgelockert mit Grafiken werden Binärkodierung und -operationen erläutert."
                                    class="toot-media-img img-073a4f9df27857a95fee220e7b125786"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-2b780bf2329c0d129e2da27cf75c0aed {
                                        aspect-ratio: 2494 / 3325;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/507/574/048/329/660/original/81dcc314d4a2d0fa.jpg"
                                    alt="Die Rückseite des Buches zeigt die Teile der Reihe: 
    
    - Heimcomputer 
    - BTX für jedermann
    - BASIC
    - Taschenrechner ganz einfach
    - Daten im Haushalt
    - Heimcomputer Lexikon
    "
                                    class="toot-media-img img-2b780bf2329c0d129e2da27cf75c0aed"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/114507595287597953" class="toot-date" rel="noopener">May 14, 2025, 18:27</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
<p>The rest of the evening was spent reading through it quite excited, and hunting down some other ones from the series on ebay 😂</p>
</li>
<li>
<p>I went to PyCon Italia - my first conference since the start of the pandemic - and not only went climbing with some fellow Pythonistas but also met Jacopo, who&rsquo;s been helping me a lot with OctoPrint&rsquo;s security!</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114602174901579648">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>For the past few days at <span class="h-card" translate="no"><a href="https://social.python.it/@pycon" class="u-url mention">@<span>pycon</span></a></span> I got to hang out with Jacopo Tediosi, who has helped me a lot in improving OctoPrint&#39;s security over the past year. It&#39;s always great when something like this happens!</p><p><a href="https://chaos.social/tags/pyconit2025" class="mention hashtag" rel="tag">#<span>pyconit2025</span></a></p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-be2790a1b56cb8f4c0dbb5ad92362df8 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/602/167/262/664/725/original/91ff2e253d45bda4.jpg"
                                    alt="Me and Jacopo are posing in front of the photo wall at PyCon. We are both smiling."
                                    class="toot-media-img img-be2790a1b56cb8f4c0dbb5ad92362df8"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/114602174901579648" class="toot-date" rel="noopener">May 31, 2025, 11:20</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
<p>I&rsquo;ve already got my ticket for PyCon Italia 2026 😊</p>
</li>
<li>
<p>The refactoring work on OctoPrint since late 2024 finally paid out and I was able to print from the in progress Moonraker Connector Plugin for the first time.</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/114788854495540415">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>Have been spending the week so far working on a plugin for <a href="https://chaos.social/tags/OctoPrint" class="mention hashtag" rel="tag">#<span>OctoPrint</span></a>&#39;s new comm layer that will be part of 1.12.0 &amp; as of earlier today I&#39;m able to print on Moonraker enabled Klipper based printers😁</p><p>This went faster than expected thanks to all that refactoring that I started shortly before x-mas, and I&#39;m incredibly happy that the architecture approach I had worked so well &amp; actually makes adding support for a different connection type this easy!</p><p>Plenty of bugs to fix ofc, but it&#39;s ALIVE!</p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-1554a4a14eb0da099d02431efc1dbec7 {
                                        aspect-ratio: 462 / 670;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/114/788/824/233/589/733/original/3cf9d23d25c0c92a.png"
                                    alt="Screenshot of OctoPrint&#39;s state panel, showing a print from &#34;SD&#34; in progress. The progress bar sits at 34%."
                                    class="toot-media-img img-1554a4a14eb0da099d02431efc1dbec7"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/114788854495540415" class="toot-date" rel="noopener">July 3, 2025, 10:35</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>I went to EuroPython in Prague again, and this time even gave a talk! Of course, support plushy Timothy was there too 😊</p>
<p><img alt="Me giving a talk at EuroPython 2025. Support plush donkey Timothy is sitting at the front of the podium." loading="lazy" src="/blog/2025-12-30-2025-retrospective/europython-talk.jpg"></p>
</li>
<li>
<p>In August I went to <a href="">WHY2025</a> - my first camp in the Netherlands since 2009. We took the <a href="https://datagnome.de">Datenzwerge</a> with us of course and deployed all 10 of them across the camp grounds. It was some very intense but awesome days!</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/115038186227796448">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>Some pictures from <a href="https://chaos.social/tags/why2025" class="mention hashtag" rel="tag">#<span>why2025</span></a> ...</p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-4">
                        
                            
                                
                                <style>
                                    .img-10367abd34aea8c2f4f76c3757a5b55a {
                                        aspect-ratio: 3324 / 2496;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/038/180/213/881/581/original/94a0f7c4db4049fd.jpg"
                                    alt="Led lights on the dark"
                                    class="toot-media-img img-10367abd34aea8c2f4f76c3757a5b55a"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-a9b6c0c3755ab94dede082f9de5d8b41 {
                                        aspect-ratio: 2496 / 3324;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/038/180/537/550/259/original/4a17cfb63731a11c.jpg"
                                    alt="A led curtain"
                                    class="toot-media-img img-a9b6c0c3755ab94dede082f9de5d8b41"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-1028791c8ef368750a13a987f7bd84d4 {
                                        aspect-ratio: 3324 / 2496;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/038/180/728/189/732/original/bbd60899a71a89b6.jpg"
                                    alt="Colourful led bulbs on the side of a tent, in the dark"
                                    class="toot-media-img img-1028791c8ef368750a13a987f7bd84d4"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-214cc7c6ba9eb7b9d299e487a44587f0 {
                                        aspect-ratio: 3324 / 2496;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/038/180/955/275/234/original/693e2ec562190989.jpg"
                                    alt="Some high grass in the dark, lighted in deep green. In front the shadow of a bicycle"
                                    class="toot-media-img img-214cc7c6ba9eb7b9d299e487a44587f0"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/115038186227796448" class="toot-date" rel="noopener">August 16, 2025, 11:23</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>While at WHY I met <a href="https://eheidi.dev/">Erika Heidi</a> whom I so far only had known virtually through GitHub Stars. We nerded out SO MUCH about tech, bouldering and 3d printing, it was a ton of fun :D</p>
<p><img alt="Me and Erika taking a selfie at WHY" loading="lazy" src="/blog/2025-12-30-2025-retrospective/why-erika.jpg"></p>
</li>
<li>
<p>For my partner&rsquo;s birthday, I created yet another custom shirt utilizing the vinyl cutter and some HTV, this time with a logo from Dead Space. The design was based on in-game graphics, and weeding it was a bit of a nightmare 😂</p>
<p><img alt="Custom logo of the &ldquo;Ishimura Planetside Team&rdquo; from Dead Space" loading="lazy" src="/blog/2025-12-30-2025-retrospective/vinyl-dead-space.jpg"></p>
</li>
<li>
<p>I also got my partner an OLED Steamdeck for his birthday, and therefore also had to create <a href="https://foosel.net/blog/2023-01-19-custom-steamdeck-buttons/">new custom buttons</a>. While at that, I also finally created some green ones for myself, and also created a whole new mold for the digi pad. Now my Steamdeck is also nicely customized 😊</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/115119707999875452">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>Finished my custom buttons and d-pad and put them into my <a href="https://chaos.social/tags/SteamDeck" class="mention hashtag" rel="tag">#<span>SteamDeck</span></a> 😊</p><p>Had to sand the d-pad on the center spike as otherwise it didn&#39;t work well, but I think now things are fine. Almost ran out on the rub-on letters too, my last X is now on there 😅 I&#39;m thinking about getting a custom decal sheet made.</p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-3">
                        
                            
                                
                                <style>
                                    .img-9c1761852e5a08043714197a6e8c753e {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/119/674/590/688/121/original/6fe2af457433863e.jpg"
                                    alt="Close-up of custom made green action buttons in a Steamdeck"
                                    class="toot-media-img img-9c1761852e5a08043714197a6e8c753e"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-6244361b50bbd64a8d8846c6e6c366fc {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/119/674/826/278/540/original/1fc6274f9ea0bfe4.jpg"
                                    alt="Close-up of a custom made green d-pad in a Steamdeck"
                                    class="toot-media-img img-6244361b50bbd64a8d8846c6e6c366fc"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-ac822a4d94ed5804f9ee415f1ea4b5dd {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/119/675/034/662/845/original/476eeab72e1072fb.jpg"
                                    alt="Steamdeck OLED with custom made green d-pad and action buttons."
                                    class="toot-media-img img-ac822a4d94ed5804f9ee415f1ea4b5dd"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/115119707999875452" class="toot-date" rel="noopener">August 30, 2025, 20:55</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>During this time, I also played through my personal Game of the Year, <a href="https://store.steampowered.com/app/1170570/The_Drifter/">&ldquo;The Drifter&rdquo;</a>. That also spawned a whole Point-and-Click-Adventure phase for me again 😂</p>
</li>
<li>
<p>Over the course of October I took part in another month long daily art challenge, &ldquo;Cosytober&rdquo;. I once again painted 31 pixelart pictures, this time limiting myself to 64x64px and the ENDESGA77 palette.</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/115468514303275578">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>And that&#39;s a wrap on <a href="https://chaos.social/tags/cosytober2025" class="mention hashtag" rel="tag">#<span>cosytober2025</span></a> for me! </p><p>I&#39;m very proud that despite everything I managed to do one every single day throughout this month! And I&#39;m also very happy with the drawings, I think I improved a lot, and am really enjoying doing pixelart!</p><p>Like last year, I compiled all of the drawings of the month into a wallpaper and you can find that below.</p><p>Do you have any personal favourites? I&#39;d love to know!</p><p>cc <span class="h-card" translate="no"><a href="https://mastodon.rosiesosocial.com/@RosieSoCosy" class="u-url mention">@<span>RosieSoCosy</span></a></span></p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-4c3aed289b4b16d1602b26b5c15460c3 {
                                        aspect-ratio: 1920 / 1080;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/468/507/468/004/612/original/770a0dc9b690b71b.png"
                                    alt="Wallpaper of all 31 pixelart drawings of &#34;foosel&#39;s Cosytober&#34;"
                                    class="toot-media-img img-4c3aed289b4b16d1602b26b5c15460c3"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/115468514303275578" class="toot-date" rel="noopener">October 31, 2025, 11:21</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
<p>I also started taking part in the <a href="https://mastodon.art/@pixel_dailies">Pixelart Dailies</a> during October and kept that going well into November, when I ran out of energy.</p>
</li>
<li>
<p>During Cosytober I also got myself a used Surface Go 2 tablet off of ebay and turned it into a pen enabled Linux based tablet, perfect for working on pixelart from the couch 😁</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/115379554054628521">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>I&#39;ve been back to Linux on the desktop for several years now. For the longest time I was wondering how Linux on a tablet would work. So say Hi to this Surface Go 2 that I bought used on eBay for cheap and liberated from the Windows 10 that it came with. 😬 <a href="https://chaos.social/tags/EndOf10" class="mention hashtag" rel="tag">#<span>EndOf10</span></a></p><p>It now runs <a href="https://chaos.social/tags/Bluefin" class="mention hashtag" rel="tag">#<span>Bluefin</span></a>, and pretty much everything worked out of the box. The only a tad annoying thing is entering my password via the touchscreen. Amazing tablet for <a href="https://chaos.social/tags/Aseprite" class="mention hashtag" rel="tag">#<span>Aseprite</span></a>! 😊</p><p>More detailed blog post when I&#39;m back on my feet 🤧</p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-2">
                        
                            
                                
                                <style>
                                    .img-7243cce210826a2a8b7d5ebd19c04d72 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/379/537/657/332/407/original/df72bb4af9500e22.jpg"
                                    alt="Picture of the Surface Go 2 running Linux. It shows the system info. The system&#39;s name is &#34;Tendi&#34;"
                                    class="toot-media-img img-7243cce210826a2a8b7d5ebd19c04d72"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-9737e49d03ccfd516120432aecb574cf {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/379/538/647/494/758/original/9bebf61b1437e836.jpg"
                                    alt="Picture of the tablet running Aseprite with a pixelart drawing of a squirrel currently open."
                                    class="toot-media-img img-9737e49d03ccfd516120432aecb574cf"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/115379554054628521" class="toot-date" rel="noopener">October 15, 2025, 18:17</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
<p>And yes, I know, I still owe this blog post 🙈</p>
</li>
<li>
<p>In early December this year&rsquo;s hotsauce finally got finished and labeled. The chillies were planted in February and the fruits harvested in early October. As always, it was a project that was in progress throughout most of the year!</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/115651620739382562">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>May I present? The result of our <a href="https://chaos.social/tags/ProjectHotsauce2025" class="mention hashtag" rel="tag">#<span>ProjectHotsauce2025</span></a>: Firestarter 😁</p><p>We continue our run of naming the yearly sauce after a song 😉</p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-4a2949d88f011560e793d157dd853849 {
                                        aspect-ratio: 1600 / 1201;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/651/610/737/507/233/original/4c8d537de2554466.jpg"
                                    alt="Several hot sauce bottles on a table, now labeled.
    
    The label says
    
    Firestarter
    Hot Sauce 2025
    Made By Gina & Dennis"
                                    class="toot-media-img img-4a2949d88f011560e793d157dd853849"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/115651620739382562" class="toot-date" rel="noopener">December 2, 2025, 19:28</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>Also in early December, I fell completely in love with the game <a href="https://store.steampowered.com/app/1532200/Mars_First_Logistics/">&ldquo;Mars First Logistics&rdquo;</a>, which I can only recommend if you are into Lego Technic.</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/115736693422407285">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>Choooo choooooo!</p><p><a href="https://chaos.social/tags/MarsFirstLogistics" class="mention hashtag" rel="tag">#<span>MarsFirstLogistics</span></a> <a href="https://chaos.social/tags/gaming" class="mention hashtag" rel="tag">#<span>gaming</span></a></p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-8bddb17ce14320cf1fc6ea7bfcc3d286 {
                                        aspect-ratio: 1920 / 1080;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/736/682/450/842/644/original/edcf331157162e2d.png"
                                    alt="Screenshot from Mars First Logistics, showing my transporter being carried by a Monorail running through the reddish landscape."
                                    class="toot-media-img img-8bddb17ce14320cf1fc6ea7bfcc3d286"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/115736693422407285" class="toot-date" rel="noopener">December 17, 2025, 20:03</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>And finally, shortly before Christmas I tried my hand at making Vanillekipferl for the first time, and greatly succeeded!</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/115753009964627497">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>I also tried my hands at Vanille Kipferl for the first time in my life!</p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-827ce46e5608d7941fca37b4bd2f7570 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/115/753/008/121/740/156/original/e511af17f6187501.jpg"
                                    alt="Several freshly baked Kipferl in a tin."
                                    class="toot-media-img img-827ce46e5608d7941fca37b4bd2f7570"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/115753009964627497" class="toot-date" rel="noopener">December 20, 2025, 17:12</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
</ol>
<p>And that&rsquo;s a wrap on 2025 I think! I probably once more missed some fun stuff or awesome stuff I did or experienced, but reading through all of that written down here it feels like less of a crappy year already 😬</p>
<p>Like last year, this list was compiled with the help of my <a href="https://chaos.social/@foosel">Mastodon account</a> and my picture gallery 😄 I&rsquo;ll see that I do one of these again in a year&rsquo;s time. For now I wish you a happy and safe 2026!</p>
]]></content:encoded></item><item><title>About my chronic vertigo</title><link>https://foosel.net/blog/2025-09-15-about-my-chronic-vertigo/</link><pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2025-09-15-about-my-chronic-vertigo/</guid><description>&lt;p>&lt;em>I finally decided to write the following post as every time I have an acute episode of my chronic vertigo
and mention it to people, I have to explain my situation and symptoms again. So I decided to write it
down here to just be able to link people to it instead 😉. This is &lt;strong>not&lt;/strong> an attempt to get attention or pity,
so please spare me that! 😅&lt;/em>&lt;/p>
&lt;p>I have had a chronic vertigo since fall of 2000 now. It&amp;rsquo;s not a case of issues with low blood pressure (&amp;ldquo;blackness in front of the eyes&amp;rdquo;) or some
light-headedness or something like that, but rather a case of
the same sensoric input being generated somewhere between my &lt;a href="https://en.wikipedia.org/wiki/Vestibular_system">vestibular system&lt;/a> and my brain as if I was on a roller coaster or sitting on
a merry-go-around. During acute episodes which last hours to days (and sometimes even weeks) this leads to unstable walking, a very insecure feeling when standing and sometimes also nausea
and &lt;a href="https://en.wikipedia.org/wiki/Nystagmus">nystagmus&lt;/a>, not to mention exhaustion while trying to compensate for all of that. Thankfully, it&amp;rsquo;s &amp;ldquo;just&amp;rdquo; vertigo, my hearing is perfectly fine.&lt;/p></description><content:encoded><![CDATA[<p><em>I finally decided to write the following post as every time I have an acute episode of my chronic vertigo
and mention it to people, I have to explain my situation and symptoms again. So I decided to write it
down here to just be able to link people to it instead 😉. This is <strong>not</strong> an attempt to get attention or pity,
so please spare me that! 😅</em></p>
<p>I have had a chronic vertigo since fall of 2000 now. It&rsquo;s not a case of issues with low blood pressure (&ldquo;blackness in front of the eyes&rdquo;) or some
light-headedness or something like that, but rather a case of
the same sensoric input being generated somewhere between my <a href="https://en.wikipedia.org/wiki/Vestibular_system">vestibular system</a> and my brain as if I was on a roller coaster or sitting on
a merry-go-around. During acute episodes which last hours to days (and sometimes even weeks) this leads to unstable walking, a very insecure feeling when standing and sometimes also nausea
and <a href="https://en.wikipedia.org/wiki/Nystagmus">nystagmus</a>, not to mention exhaustion while trying to compensate for all of that. Thankfully, it&rsquo;s &ldquo;just&rdquo; vertigo, my hearing is perfectly fine.</p>
<p>This crap started with a really bad respiratory infection that gave me a high fever and put me into bed
for almost two weeks. After the fever went down I had a constant vertigo. This was right during my last two years at
school and meant that I missed almost two months of classes and then had to get brought to and fetched
from school by my dad for a month while I was learning to cope with this during my day-to-day and it turning less
constant<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>The initial diagnosis was <a href="https://en.wikipedia.org/wiki/Labyrinthitis">labyrinthitis</a>. When that took too long without the symptoms going away despite
treatment, I spent a week getting a full check-through at a hospital in summer of 2001 after which the diagnosis became
<a href="https://en.wikipedia.org/wiki/Benign_paroxysmal_positional_vertigo">BPPV</a> and I was taught the usual treatment for that. With that diagnosis I went on with life, doing my prescribed exercises,
hoping it would just disappear one day. But when that didn&rsquo;t happen and was still going on in summer of 2019 I decided to get yet another full check-through and the result of
that was basically &ldquo;It&rsquo;s not BPPV, but we don&rsquo;t know what it is, everything works like it should as far as we can see&rdquo;. Not a hardware issue, no wiring problems nor
firmware bugs to see 🤷</p>
<p>So this kinda sucks. Most days I thankfully don&rsquo;t notice it, and when it hits I can still handle my day-to-day
fine in most cases thanks to a sheer ton of training 😬. It certainly helps that I can do my job sitting down 😅</p>
<p>The bad episodes seem to get triggered by sudden weather changes<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, stress and illness<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. I so far haven&rsquo;t
seen <em>any</em> connection to my food intake (thankfully). As I have a history of weather and stress
induced migraines, and <a href="https://en.wikipedia.org/wiki/Migraine-associated_vertigo">vestibular migraines</a> are a thing as
I learned after yet another lengthy research session, I&rsquo;m now tracking my symptoms daily
(vertigo, headache, tinnitus, nausea, plus stress &amp; weather) in preparation for yet <em>another</em> round of
trying to get a proper diagnosis and ideally working treatment for this shit from a neurologist.</p>
<p><strong>tldr:</strong> It&rsquo;s not low blood pressure, it&rsquo;s not just &ldquo;a bit dizzy&rdquo;, it&rsquo;s not BPPV (so Epley etc don&rsquo;t help), no hearing loss is involved.
It might be a weird version of migraines, I&rsquo;m currently tracking things in preparation for another attempt at getting to the bottom of this.
I won&rsquo;t die from it and have well working coping strategies but on some days it just plain sucks.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>That&rsquo;s when I learned that the brain is absolutely <em>amazing</em> at compensating for broken sensoric inputs!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Or this constant rain-sun-rain-sun-rain-sun shit that&rsquo;s going on during seasonal changes now it seems 😒&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Especially respiratory infections are my kryptonite - five days of the sniffles, ten or more of everything spinning.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Five of my favourite lifehacks</title><link>https://foosel.net/blog/2025-02-05-five-of-my-favourite-lifehacks/</link><pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2025-02-05-five-of-my-favourite-lifehacks/</guid><description>&lt;p>For a couple of years now I&amp;rsquo;ve had the sneaking suspicion that I&amp;rsquo;m neurodivergent. And while I still don&amp;rsquo;t have a diagnosis, there are several things
I use to cope with my brain constantly going &lt;em>BRRRRRR&lt;/em>, thinking (and worrying) about everything while forgetting important things, and I thought some of those
might also be helpful to others.&lt;/p>
&lt;p>Thus, here are five of my favourite lifehacks that I&amp;rsquo;ve been using to cope with the weirdness that is my brain. Some of them I&amp;rsquo;ve used for years before I ever suspected
something, some of them I only discovered after reading up on neurodiversity. Maybe you find something interesting for yourself!&lt;/p></description><content:encoded><![CDATA[<p>For a couple of years now I&rsquo;ve had the sneaking suspicion that I&rsquo;m neurodivergent. And while I still don&rsquo;t have a diagnosis, there are several things
I use to cope with my brain constantly going <em>BRRRRRR</em>, thinking (and worrying) about everything while forgetting important things, and I thought some of those
might also be helpful to others.</p>
<p>Thus, here are five of my favourite lifehacks that I&rsquo;ve been using to cope with the weirdness that is my brain. Some of them I&rsquo;ve used for years before I ever suspected
something, some of them I only discovered after reading up on neurodiversity. Maybe you find something interesting for yourself!</p>
<h2 id="waterproof-post-its-in-the-shower">Waterproof post-its in the shower</h2>
<p>My daily morning shower is a time I really do enjoy. It&rsquo;s also a time where I seem to get quite creative from time to time, getting great ideas on how to solve
existing problems in my life, or just remembering stuff I need to take care of. Of course, after getting out of the shower, once I&rsquo;ve toweled off, most
of that stuff is forgotten again.</p>
<p>A solution that has worked amazingly well for me here are waterproof post-its and a pencil that I just have stored high up in my shower! So when I get an idea or remember
something important, I now just note it down on a post-it and immediately glue that post-it to the shower door. That last step is very important, because that
way I have it basically right in my face while toweling myself off, and don&rsquo;t forget to take it with me when I&rsquo;m done with my morning routine to take care of it or
note it down somewhere else (either my <a href="https://obsidian.md/">Obsidian</a> knowledge base for ideas, or <a href="https://www.todoist.com/">Todoist</a> for TODOs).</p>
<p><img alt="A stack of water proof post-its put on my shower wall, with a pencil put on top on a hook." loading="lazy" src="/blog/2025-02-05-five-of-my-favourite-lifehacks/postits.jpg"></p>
<p>That approach has been working well for me now for quite some years! Before I came across the waterproof post-its though, I tried the same approach with a diver writing panel.
But with that I had the problem that I then either forgot that I had written something on it (as it hung inside the shower, not immediately visible while toweling off), or I
forgot to clear it again (as I didn&rsquo;t have an eraser right on hand) and so found it already full with notes when I needed to write something new on it. The post-it approach
solves both points, as the notes are way more mobile that way, and taking one off the stack immediately gives me a fresh one.</p>
<p>Something that doesn&rsquo;t get a post-it though is when my shower gel runs out - in that case I just throw the empty bottle out of the shower right away so I will stumble
over it when I get out and remember to put it on the grocery list 😆</p>
<h2 id="visual-timers">Visual timers</h2>
<p>I have a problem with timers (e.g. for the laundry) going off when I&rsquo;m right in the middle of something at work, not immediately able to react to it, and then
promptly forgetting about it. And I have a problem with noticing time run by in general when I&rsquo;m in the flow.</p>
<p>For the longest time this was causing me a ton of stress and cases of &ldquo;Oh no, not again&rdquo;, but these days I have that pretty well under control after putting a
visual timer on my work desk and one in the living room. And that&rsquo;s a trick I only discovered after reading up on neurodiversity and learning about
<a href="https://www.psychologytoday.com/intl/basics/time-blindness">time blindness</a>.</p>
<p><img alt="A visual timer set to 15min." loading="lazy" src="/blog/2025-02-05-five-of-my-favourite-lifehacks/timer.jpg"></p>
<p>Laundry timer just went off but I&rsquo;m deep in some code, hunting a bug? My hand now automatically just reaches to the visual timer and sets up something like 30min on it.
I only want to work on this work item for an hour (time box, follow-up appointment, it&rsquo;s already 5pm and I really should call it a day soon, &hellip;)? Hand out, timer on 60min.
I have to wait 10min to check my COVID test? Hand out, timer on 10min.</p>
<p>All of that would of course also work with a timer on my phone, but this works better for me: There&rsquo;s a physical timer right in front of me, with a physical wheel I can turn
to set a time, and I don&rsquo;t have to parse the numbers on the front either, the amount of time is clearly visible by how much red I see.</p>
<p>Where my phone <em>does</em> come in though is when I know I have an appointment sometime in the day. This causes me a ton of stress for the whole day until the appointment because
I know there&rsquo;s something coming up that I must not miss, and then I&rsquo;m scared of forgetting all about time again and missing it, causing me to not be able to concentrate on
anything else very well. What has helped me here is putting one to several alarms on my phone before the actual appointment, giving me an early warning that the time is coming
close, and allowing me to relax until that happens.</p>
<h2 id="physical-callbacks">Physical callbacks</h2>
<p>Another problem I often encounter is having to remember to do something at some point in the near future. My forgetfulness is becoming a bit of a pattern here I guess 😅</p>
<p>Some examples:</p>
<ul>
<li>I have a bunch of envelopes I need to bring to the next mailbox the next time I&rsquo;m out. (Hello <a href="https://www.patreon.com/foosel">OctoPrint Patreons</a> at $10+ 👋)</li>
<li>We just had a BBQ on the balcony and now the grill has to cool down before I can close and cover it again.</li>
<li>There are dinner left-overs that need to go into the fridge or freezer, but currently they are still too warm for that.</li>
<li>I need to remember to do something come monday when I&rsquo;m back at my desk, which I can only do at my desk, e.g. ordering a new prescription.</li>
</ul>
<p>For things like that I usually use a quick physical callback.</p>
<p><img alt="A note stuck into my keyboard saying &ldquo;Fix Build on staging/maintenance&rdquo;." loading="lazy" src="/blog/2025-02-05-five-of-my-favourite-lifehacks/callback.jpg"></p>
<p>Something I still have to do before going to sleep, e.g. take care of the grill or the left-overs? I put something
in the hallway that doesn&rsquo;t belong there. Usually that&rsquo;s my rolled up yoga mat, as that&rsquo;s a quick and easy thing to do given its usual place. I have to remember to take care
of something while out? I put it on top of my shoes or throw it into a bag I hang from the apartment door&rsquo;s handle. Something I need to take care off at my desk? A note stuck
into my keyboard or the empty prescription thrown on my desk work wonders.</p>
<h2 id="large-water-bottle-at-my-desk">Large water bottle at my desk</h2>
<p>I tend to not drink enough when I don&rsquo;t have water immediately in reach. So now I always keep a large refillable water bottle on my desk that I can drink from directly and that can
stay open without a big risk of spilling. Currently that&rsquo;s a 1l or 1.5l Nalgene wide mouth with an OTF cap.</p>
<p><img alt="My open water bottle sitting on my desk." loading="lazy" src="/blog/2025-02-05-five-of-my-favourite-lifehacks/bottle.jpg"></p>
<p>Bottle + glass never worked well for me - constantly having to refill the glass is something that annoys me greatly, plus I tend to forget it (of course&hellip;). Smaller bottle also
doesn&rsquo;t work, constantly empty. And a larger bottle than 1.5l poses the issue that I have to take it to the kitchen to refill from the tap, vs just being able to take care of that
during the regular bathroom break (which is WAY faster).</p>
<p>The goal here is to make it as easy as possible for me to - often absentmindedly - drink water, and that&rsquo;s achieved with that approach, allowing me to reach my daily 2-3l of fluid
intake.</p>
<h2 id="sleep-headphones--audio-books">Sleep headphones &amp; audio books</h2>
<p>My brain doesn&rsquo;t shut up fscking <em>ever</em>, and it interferes with my nightly rest. Imagine trying to fall asleep when your brain is constantly thinking about the latest bug in your code,
code architecture, what groceries you need to buy, upcoming elections, that discussion in that issue you had this morning, that email you still have to write tomorrow, &hellip;</p>
<p>It&rsquo;s only when I&rsquo;m completely and utterly exhausted that I can fall asleep right away, otherwise it&rsquo;s a long struggle of trying to ignore my brain and coming down from the day before
it works.</p>
<p>Thankfully, I discovered sleep headphones for myself a long time ago, so headphones in the shape of a headband with some really flat speakers inside and a bluetooth module or wired connection
to your phone or mp3 player.</p>
<p><img alt="My sleep headphones lying on my pillow." loading="lazy" src="/blog/2025-02-05-five-of-my-favourite-lifehacks/sleepphones.jpg"></p>
<p>Those allow me to listen to things without disturbing my partner. And those things for me usually are audio versions of books I already happen to know. The latter
is extremely important, as with books I don&rsquo;t know yet, my curiousity into how the story continues might keep me from falling asleep. I have the same issue I with most podcasts. But
audio books of books I&rsquo;ve already read work amazingly well. I set the sleep timer in my audio player to something like 30min and then just close my eyes and listen. My brain shuts up
as I&rsquo;m keeping it busy with listening and imagining what&rsquo;s going on in the book, and I often manage to drift off in less than 10min.</p>
<p>So there you are, five lifehacks that make my daily life easier for me!</p>
]]></content:encoded></item><item><title>What cool stuff did I do in 2024?</title><link>https://foosel.net/blog/2024-12-30-2024-retrospective/</link><pubDate>Mon, 30 Dec 2024 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2024-12-30-2024-retrospective/</guid><description>An attempt at highlighting some personal achievements of the past year, to combat the constant negative vibes</description><content:encoded><![CDATA[<p>I decided to try my hand at my very own 2024 retrospective to give myself a chance to see more of the good things I managed to get done or that I experienced. And as the news continue to be all doom and gloom I figured why not do this in the shape of a blog post so that a) it&rsquo;s more easy for myself to revisit that again in the future whenever I get dragged down and b) y&rsquo;all maybe also get some positive vibes.</p>
<p>So here we go&hellip;</p>
<ol>
<li>
<p>I got myself a Silhouette Portrait 3 vinyl cutter (that i can fully operate with open source tooling based on an Inkscape plugin, fsck proprietary cloud sh*t!) and immediately gave it a face. Technically that still happened in 2023, but on December 30th, so I&rsquo;ll let it count ;)

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/111669542081808946">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>New tool in the house! After circling one for years now, I finally pulled the trigger on a vinyl cutter/plotter!</p><p>It&#39;s a Silhouette Portrait 3, only a small one, but the important part is that I can use it with Open Source tooling &amp; local only*, thanks to the combo of <span class="h-card" translate="no"><a href="https://mastodon.art/@inkscape" class="u-url mention">@<span>inkscape</span></a></span> &amp; the inkscape-silhouette** extension!</p><p>Lots of ideas swirling around in my head about stickers, shirts and such, but for now I&#39;ve given it a face! 😄</p><p>* Fsck this cloud only subscription crap!</p><p>** <a href="https://github.com/fablabnbg/inkscape-silhouette" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">github.com/fablabnbg/inkscape-</span><span class="invisible">silhouette</span></a></p>
                   
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-1">
                       
                           
                               
                               <style>
                                   .img-32f672dd5cacfcb7b0249d76fa91a93d {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/111/669/525/211/912/358/original/6e66def4b545b67c.jpg"
                                   alt="A Silhouette Portrait 3 vinyl cutter with two eye stickers. It looks like it is doing this face: o_o"
                                   class="toot-media-img img-32f672dd5cacfcb7b0249d76fa91a93d"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/111669542081808946" class="toot-date" rel="noopener">December 30, 2023, 13:13</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       </p>
</li>
<li>
<p>I did a deep clean and reorganization of my office, and I&rsquo;m happy to report that this has mostly held up!

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/111704357097141495">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>Day 4: Desk, electronics area, paper printer (a bit). I still need to take care of the paper waste in a few (we have some containers for that down the street), the e-waste (run to the place for that some time next week) and some bulky waste ASAP, and I didn&#39;t touch the lassr material storage after all, but for now I&#39;m calling this done.</p><p>Feels great walking into the office again, which is the best thing considering I&#39;ll be back at work come Monday.</p>
                   
                       
                           
                               
                           
                       
                           
                               
                           
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-3">
                       
                           
                               
                               <style>
                                   .img-dd4ac4d7d92f8bc3ba112965d12026c2 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/111/704/339/338/814/327/original/470e84c0eb575788.jpg"
                                   alt="View towards the back of the office. Desk to the left, a big whiteboard and some shelves filled with electronics directly forward and a paper printer and a table with a laser cutter to the right."
                                   class="toot-media-img img-dd4ac4d7d92f8bc3ba112965d12026c2"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-abb3a1a23b1a892902b4023ae88cbec8 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/111/704/340/108/739/770/original/6382d94d1b9c5963.jpg"
                                   alt="View towards the desk from being the chair. Three screens, Framework laptop vertical to the left, a bunch of steaming lights."
                                   class="toot-media-img img-abb3a1a23b1a892902b4023ae88cbec8"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-c4ae238bbbaeea155cb1e1b06062f058 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/111/704/340/513/213/985/original/91b247e489578ac3.jpg"
                                   alt="Once more a view towards the front of the office with the Expedit directly forward. To the left the still untouched laser table, to the right the heavy duty shelves."
                                   class="toot-media-img img-c4ae238bbbaeea155cb1e1b06062f058"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                           
                           
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/111704357097141495" class="toot-date" rel="noopener">January 5, 2024, 16:47</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       </p>
</li>
<li>
<p>I got a new label printer (Brother QL-820NWB) and <a href="https://foosel.net/til/how-to-print-deutsche-post-stamps-via-the-command-line-on-a-brother-ql-label-printer/">created scripts to easily print out Deutsche Post stamps with that</a>.</p>
</li>
<li>
<p>I spent some beautiful calm days with my partner in the southern black forest - plenty of snow and walks and games!</p>
<p><img alt="A tree on the side of a hill in the snow. The sky is blue, the sun is shining." loading="lazy" src="/blog/2024-12-30-2024-retrospective/schauinsland.jpg"></p>
</li>
<li>
<p>With the help of the vinyl cutter and the laser cutter I gave our <a href="https://datagnome.de">Datenzwerge</a> some stylish travel cases!</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/111914246770176122">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>Our datagnomes will travel in style from now on!</p><p>We got two L-Boxes for them now which fit 5 gnomes each. A few weeks ago I lasercut some custom foam inlays for them, and just today finally got around to also put some custom vinyl stickers on them, after my partner turned the logo he created black and white for us 😊</p><p>I&#39;m very happy with the result, and I hope <span class="h-card" translate="no"><a href="https://chaos.social/@Romses" class="u-url mention">@<span>Romses</span></a></span> will be as well once he gets his box into his hands soon 😄</p><p><a href="https://chaos.social/tags/DatenzwergLeaks" class="mention hashtag" rel="tag">#<span>DatenzwergLeaks</span></a></p>
                   
                       
                           
                               
                           
                       
                           
                               
                           
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-3">
                       
                           
                               
                               <style>
                                   .img-ea5b2473afefe82c7f0be34c64db84e2 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/111/914/230/716/722/817/original/5149fce9b55a4c59.jpg"
                                   alt="A black L-Box 136 standing on a chair. On its lid there&#39;s a black and white datagnome logo with the text datagnome.de next to it."
                                   class="toot-media-img img-ea5b2473afefe82c7f0be34c64db84e2"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-6e5e731b3c70d93182635ff219db6452 {
                                       aspect-ratio: 2494 / 3325;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/111/914/231/026/614/297/original/f007293d4894e45e.jpg"
                                   alt="The open box on a chair. Five datagnomes are inside, each in its own compartment in a custom foam insert. There&#39;s also two smaller compartments holding extra gnome feet."
                                   class="toot-media-img img-6e5e731b3c70d93182635ff219db6452"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-bb77a1bb69645e91343cef7b8353c1b2 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/111/914/231/372/118/263/original/327ad0b9e4c03345.jpg"
                                   alt="Both of the boxes, clopped together so they can be lifted both as one unit."
                                   class="toot-media-img img-bb77a1bb69645e91343cef7b8353c1b2"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                           
                           
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/111914246770176122" class="toot-date" rel="noopener">February 11, 2024, 18:24</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
</li>
<li>
<p>I also did a deep clean and reorganization of my wardrobe, and that&rsquo;s also still holding up! No more dreading of sorting the laundry into the wardrobe!</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/111942405312732513">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>Phewwww. Six hours of wardrobe cleaning today, and after doing the same last Friday I can now say the wardrobe is in a shape I really enjoy opening it again. </p><p>Today&#39;s focus was the &quot;general household laundry stuff&quot; part of it. The plushies and the sewing machine have their own shelves now 😄</p><p>I&#39;ve already brought the 3 large garbage bags full of old clothes to the recycling container, &amp; put the 6 actual trash bags into the garbage container. </p><p>And now excuse me while I fall down on my couch.</p>
                   
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-1">
                       
                           
                               
                               <style>
                                   .img-b7468f4f203311e985ebe37cf72d71b1 {
                                       aspect-ratio: 2494 / 3325;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/111/942/393/803/119/716/original/6ab4eda7e4155c16.jpg"
                                   alt="Picture of a freshly cleaned wardrobe."
                                   class="toot-media-img img-b7468f4f203311e985ebe37cf72d71b1"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/111942405312732513" class="toot-date" rel="noopener">February 16, 2024, 17:45</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
</li>
<li>
<p>I learned book binding and got into solo RPGs!</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/112349936201913060">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>Inspired by <span class="h-card" translate="no"><a href="https://mastodon.art/@stiftnuersel" class="u-url mention">@<span>stiftnuersel</span></a></span> I decided to finally try to add book binding to my skill set and started with binding both books of 2D6 Dungeon (also a tip by <span class="h-card" translate="no"><a href="https://mastodon.art/@stiftnuersel" class="u-url mention">@<span>stiftnuersel</span></a></span>).</p><p>Especially sewing the paper stacks was incredibly relaxing. I put an audio book on (going through The Stormlight Archive again) and just went for it. </p><p>Decided to go with a soft cover. The cardboard came from some deliveries and the fabric from the left overs of an old sewing project. </p><p>Quite happy with the result 😊</p>
                   
                       
                           
                               
                           
                       
                           
                               
                           
                       
                           
                               
                           
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-4">
                       
                           
                               
                               <style>
                                   .img-ceae5b1dba98e70df73196f78a8a8c35 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/112/349/907/794/968/695/original/5b78cec985b9fd51.jpg"
                                   alt="Two freshly bound text blocks."
                                   class="toot-media-img img-ceae5b1dba98e70df73196f78a8a8c35"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-cf3ab7d62e2c8b4416ef6dc2885c9e27 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/112/349/909/240/954/139/original/4c203266e3ee348f.jpg"
                                   alt="Template used for creating the sewing holes."
                                   class="toot-media-img img-cf3ab7d62e2c8b4416ef6dc2885c9e27"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-8fba713e43f66ea8103a6b9da61c6835 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/112/349/910/904/288/741/original/7337019487524df7.jpg"
                                   alt="Finished book covered with a black structured fabric."
                                   class="toot-media-img img-8fba713e43f66ea8103a6b9da61c6835"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-9a45671a1970cd6ac2371bf1d98773fe {
                                       aspect-ratio: 1080 / 1440;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/112/349/911/315/645/559/original/df0d5e57734ce146.jpg"
                                   alt="Leafing through the book."
                                   class="toot-media-img img-9a45671a1970cd6ac2371bf1d98773fe"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                           
                           
                       
                           
                           
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/112349936201913060" class="toot-date" rel="noopener">April 28, 2024, 17:06</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
</li>
<li>
<p>I also got into crafting print-and-play games!</p>

   
   
   
   
   
   
   
   
   
   
   
   
   
   
           
           
   
           
               
               
           
   
           
               <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/112401363792302351">
                   <div class="toot-header">
                       <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                           <img
                               src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                               alt="Mastodon avatar for @foosel@chaos.social"
                               loading="lazy"
                           />
                       </a>
                       <div class="toot-author">
                           <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                           <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                       </div>
                   </div>
                   <p>I&#39;ve been in a crafting mood for a few days now. One of the results of that were my recent adventures in book binding <a href="https://chaos.social/tags/2d6Dungeon" class="mention hashtag" rel="tag">#<span>2d6Dungeon</span></a>, the other was finally figuring out a good way to create custom playing cards for print&#39;n&#39;play games. </p><p>I stumbled across <a href="https://chaos.social/tags/EscapeFromStation52" class="mention hashtag" rel="tag">#<span>EscapeFromStation52</span></a> in one of my itch.io bundles and that was the trigger: Cards were printed one sided on a piece of 185gsm linen stock, sealed with fixative, folded and spray glued together, then cut. A bit thick but feel &amp; shuffle great!</p>
                   
                       
                           
                               
                           
                       
                           
                               
                           
                       
                       <div class="toot-img-grid-2">
                       
                           
                               
                               <style>
                                   .img-457dd3c3ae9ae01dda59989bdf8aff9d {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/112/401/353/116/099/380/original/cdc45fb258fcabea.jpg"
                                   alt="The stack of cards for the game"
                                   class="toot-media-img img-457dd3c3ae9ae01dda59989bdf8aff9d"
                                   loading="lazy"
                               />
                           
                       
                           
                               
                               <style>
                                   .img-3b91ac412867bca468089259145a61c7 {
                                       aspect-ratio: 3325 / 2494;
                                   }
                               </style>
                               <img
                                   src="https://assets.chaos.social/media_attachments/files/112/401/356/673/063/182/original/cea29bf1cfab489c.jpg"
                                   alt="Front and backs of the cards"
                                   class="toot-media-img img-3b91ac412867bca468089259145a61c7"
                                   loading="lazy"
                               />
                           
                       
                       </div>
                       
                       
                           
                           
                       
                           
                           
                       
                   
                   
                   
                   <div class="toot-footer">
                       <a href="https://chaos.social/@foosel/112401363792302351" class="toot-date" rel="noopener">May 7, 2024, 19:05</a>&nbsp;<span class="pokey">(UTC)</span>
                   </div>
               </blockquote>
           
       
</li>
<li>
<p>As a result of that I also built a little tool (running 100% in the browser!) to convert the usual PNP card PDFs into ready to print gutterfold PDFs for easier alignment of the card backs and fronts: <a href="https://foosel.github.io/cardfoldr/">CardFoldr</a>!</p>
</li>
<li>
<p>I missed the probably biggest Aurora event of the past decade in Germany, but managed to still get some shots a few days later.</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/112428209096634181">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>I&#39;m still unhappy that I completely missed the aurora from Friday to Saturday (only heard about it the next day and cursed heavily) but at least got some pictures last night. It was only minimally visible by eye, but the camera was able to see more.</p><p>And we also ended up chatting with some really nice strangers that were also out to look at the sky, so while I just kept clicking the record button on the camera while getting colder and colder, the company completely made up for it.</p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-2">
                        
                            
                                
                                <style>
                                    .img-c3f2da579b423f3262243f146851d30c {
                                        aspect-ratio: 3324 / 2496;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/428/179/434/598/316/original/2e9df8e36e777334.jpg"
                                    alt="Night shot over a field with a reddish aurora in the sky. Some lights on the ground."
                                    class="toot-media-img img-c3f2da579b423f3262243f146851d30c"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-fe5f4baa4e3cc84dcc58c75648aeef3a {
                                        aspect-ratio: 3324 / 2496;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/428/186/439/563/751/original/f76ff73f81139912.jpg"
                                    alt="Night shot over a field. Stars in the sky and some reddish and slightly greenish light over it, the reddish looks like an aurora."
                                    class="toot-media-img img-fe5f4baa4e3cc84dcc58c75648aeef3a"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/112428209096634181" class="toot-date" rel="noopener">May 12, 2024, 12:52</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>I did some minor leather crafting to build myself a big roll-up dice tray for my solo RPG sessions. It has since also come in handy during the one or other board game session.</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/112457157352018051">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>I wanted a bigger dice tray. Had some leather and snap buttons on hand. I&#39;m not sure if this qualifies as <a href="https://chaos.social/tags/LeatherWorking" class="mention hashtag" rel="tag">#<span>LeatherWorking</span></a> but it definitely qualifies as gaming related <a href="https://chaos.social/tags/crafting" class="mention hashtag" rel="tag">#<span>crafting</span></a>, so even while I&#39;m under the weather (hence no climbing pictures today) I got something made 😊</p><p>Edit: I should add that this approach to a dice tray is not my idea and there are plenty of these out there to buy. I just didn&#39;t want to buy something I had everything on hand to make myself as I enjoy making.</p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-2">
                        
                            
                                
                                <style>
                                    .img-3098551b5a490b33b03c86d578988279 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/457/147/236/319/119/original/51022acc7dc2ab2d.jpg"
                                    alt="A rolled up square of black leather with some snap buttons visible on the edges, and a leather strap wrapped and buttoned up around it."
                                    class="toot-media-img img-3098551b5a490b33b03c86d578988279"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-f7a5cf955d9e25ebdedf645773bcb85e {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/457/147/447/891/099/original/63d5024e70b5ed71.jpg"
                                    alt="The leather square unrolled and the buttons snapped together. It&#39;s now usable as a dice tray."
                                    class="toot-media-img img-f7a5cf955d9e25ebdedf645773bcb85e"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/112457157352018051" class="toot-date" rel="noopener">May 17, 2024, 15:34</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>I went to <a href="https://entropia.de/GPN22">GPN22</a> with my buddy Romses and five Datenzwerge. We had a great time there chatting with old and new friends, and getting more grey hair due to WiFi issues with the gnomes and DECT issues 😂</p>
<p><img alt="A picnic blanket with an opened up DECT phone, soldering tooling, a partial Datenzwerg, and some more electronics. Also - someone&rsquo;s leg and someone else&rsquo;s hands holding a portable oscilloscope" loading="lazy" src="/blog/2024-12-30-2024-retrospective/symbolbild-gpn.jpg"></p>
</li>
<li>
<p>My book binding experiments escalated and I bound a 400 page book 😬</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/112665867404914833">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>My custom hardcover edition of Across a Thousand Dead Worlds <a href="https://chaos.social/tags/atdw" class="mention hashtag" rel="tag">#<span>atdw</span></a> is finished! 🎉</p><p>Created the case earlier today, then glued in the textblock. While that was in the press I fetched the vinyl cutter and created a basic cover and spine print, using the same fonts that are also used in the book. </p><p>It&#39;s not fully square, and trying to back it yesterday also caused some steps in the rounding, but I&#39;m still very happy with the result! 😊</p><p>Will probably still add a dust jacket, but for now it&#39;s done!</p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-4">
                        
                            
                                
                                <style>
                                    .img-e7f4605b56535fb755c2d27c0eea0c97 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/665/849/000/119/512/original/bea1ec7b4b931135.jpg"
                                    alt="The book sitting in a press made from two boards and some weights on top."
                                    class="toot-media-img img-e7f4605b56535fb755c2d27c0eea0c97"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-f01d4244a3c60f59245d18a4758eb0d9 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/665/849/359/888/565/original/b96cb6c51110db74.jpg"
                                    alt="The finished book lying on a dark table. It&#39;s covered in black cloth. On the front are the letters &#34;ADTW&#34; in a two by two letter square, on the spine it says &#34;Across a Thousand Dead Worlds&#34; in two lines."
                                    class="toot-media-img img-f01d4244a3c60f59245d18a4758eb0d9"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-29a386cb164ee3cd6207760865773507 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/665/849/561/244/742/original/1d79a853fc4ff136.jpg"
                                    alt="Close-up of the tail of the opened book. The spine works great."
                                    class="toot-media-img img-29a386cb164ee3cd6207760865773507"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-5e79b61efd16094df197e7674e46e50d {
                                        aspect-ratio: 2494 / 3325;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/665/849/747/292/662/original/200228041f23b19d.jpg"
                                    alt="The book sitting on a book shelf and looking great!"
                                    class="toot-media-img img-5e79b61efd16094df197e7674e46e50d"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/112665867404914833" class="toot-date" rel="noopener">June 23, 2024, 12:11</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>I went to EuroPython to Prague, had some amazing chats with people there, enjoyed a bunch of very tasty non-alcoholic cocktails, had a lovely time at the social event, and also experienced my first flight-cancellation and rebooking on my return trip 😅</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/112766493783478034">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>Good morning <a href="https://chaos.social/tags/EuroPython" class="mention hashtag" rel="tag">#<span>EuroPython</span></a>! The sleep was good, the self test was negative, the breakfast was delicious, now <span class="h-card" translate="no"><a href="https://plushies.social/@timothy" class="u-url mention">@<span>timothy</span></a></span> and I are ready for day two of talks and chats!</p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-732f123532c27f0fdc9262a6e1237689 {
                                        aspect-ratio: 2464 / 3280;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/766/489/101/694/244/original/18544abb04ffb64a.jpg"
                                    alt="Me in the audience of Forum Hall at EuroPython, masked with my back to the front and my plush donkey on my head, pointing to the stage"
                                    class="toot-media-img img-732f123532c27f0fdc9262a6e1237689"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/112766493783478034" class="toot-date" rel="noopener">July 11, 2024, 06:42</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>After a <strong>very</strong> stressful time at work thanks to <a href="https://octoprint.org/blog/2024/06/28/stats-manipulation/">some stats manipulation</a> by <a href="https://octoprint.org/blog/2024/07/04/more-stats-manipulation/">some bad players</a> (that btw still has me get very angry whenever I think about it) I had a very relaxing and resetting two week vacation with my partner at the north sea, filled with e-bike rides, walks through the wadden sea, our very first stint at a &ldquo;Hochseilgarten&rdquo; (climbing garden) and also playing through Fort Solis, Little Hope and House of Ashes together during the evenings 😄 I also treated myself to a new camera body for this occasion, a Lumix G91, allowing the G70 to stay in webcam mode for good now.</p>
<p><img alt="A tiny starfish in the sand, under water" loading="lazy" src="/blog/2024-12-30-2024-retrospective/starfish.jpg"></p>
</li>
<li>
<p>While there I also blogged about my <a href="https://foosel.net/blog/2024-08-08-edc-2024/">EDC 2024</a>. For which I then promptly sewed a new custom pouch once I was back at home.</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/112996329622482193">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>Went down the <a href="https://chaos.social/tags/myog" class="mention hashtag" rel="tag">#<span>myog</span></a> rabbit hole recently as my bought <a href="https://chaos.social/tags/edc" class="mention hashtag" rel="tag">#<span>edc</span></a> pouch was annoying me.</p><p>Even though my chronic vertigo is currently making me nauseous, I decided to try to distract myself from that and sewed a first version of a pouch.</p><p>Outside is some black 600D cordura, inside red ripstop nylon for contrast, and two stripes of 50mm stretch band turned into two pockets on one side and three on the other to help with organisation. The zipper is a red ykk aqua guard.</p>
                    
                        
                            
                                
                            
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-2">
                        
                            
                                
                                <style>
                                    .img-7e620a3a0b269e4f949d6e4cc183deb2 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/996/317/114/839/063/original/8b4a294d7e50618c.jpg"
                                    alt="A black pouch with a red zipper."
                                    class="toot-media-img img-7e620a3a0b269e4f949d6e4cc183deb2"
                                    loading="lazy"
                                />
                            
                        
                            
                                
                                <style>
                                    .img-b72abbc6d00dff5921476929f863cf42 {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/112/996/317/737/836/855/original/fcee57ee2ee1d8cb.jpg"
                                    alt="The pouch zipped and pushed open. The inside shows some small pockets created by black fabric stripes on top of the red inside."
                                    class="toot-media-img img-b72abbc6d00dff5921476929f863cf42"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/112996329622482193" class="toot-date" rel="noopener">August 20, 2024, 20:52</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>During September I participated in FediJam and created <a href="https://foosel.itch.io/cloud-shepherd">Cloud Shepherd</a>, a cozy puzzle game in which you herd clouds over fields to make it rain. I did all the programming, graphics and sound effects (yes, also the dog and the sheep) myself - and <strong>I won the gamejam</strong>! And as this was my first time doing pixelart, it gave me some courage&hellip;</p>
<p><img alt="The title screen of my game Cloud Shepherd, showing a rural landscape from above, with some clouds, sheep, a herding dog and a field. All of that is done in brightly colored pixel art" loading="lazy" src="/blog/2024-12-30-2024-retrospective/cloud-shepherd.png"></p>
</li>
<li>
<p>&hellip; so throughout October <a href="https://chaos.social/@foosel/113233763230193057">I partook in the #hartoween art challenge</a> and did a pixelart painting for every day - albeit admittedly some of them a few days later due to other committments and illness, but all 31 of them in October!</p>
<p><img alt="A collage of all 31 pixelart paintings with their associated prompts" loading="lazy" src="/blog/2024-12-30-2024-retrospective/hartoween-wallpaper.png"></p>
</li>
<li>
<p>For that I also figured out how to <a href="https://foosel.net/til/how-to-make-transparent-gifs-easier-shareable-by-adding-a-checkerboard-background/">make transparent GIFs more easily shareable on social media</a> as I also was creating timelapses of my drawings and wanted to share them with a proper checkerboard background.</p>
</li>
<li>
<p>Also in October, I went to <a href="https://2024.mrmcd.net/de/">MRMCD24</a> together with my partner and my buddy Romses, and of course a whole army of Datenzwerge. We deployed 8 of them this time and it was a huge success.</p>
</li>
<li>
<p>During that time I also played through my personal Game of the Year 2024, Animal Well!</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/113290415749654937">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>Can&#39;t help myself, I&#39;m absolutely in awe at the art style of <a href="https://chaos.social/tags/AnimalWell" class="mention hashtag" rel="tag">#<span>AnimalWell</span></a>. </p><p>That mix of highlights, scan lines and glow, plus all these details... So much to discover on every single screen, and yet the pallette still *feels* subtle.</p><p>I have to admit, I got drawn to that game by its graphics first and foremost, but gameplay is a ton of fun too. A puzzle platformer with a beautiful atmosphere. Can recommend!</p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-bda04d798f739c346cbf2cfed7ffb96d {
                                        aspect-ratio: 1280 / 800;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/113/290/402/788/933/185/original/d9ffe67d41d2ef09.png"
                                    alt="Screenshot of Animal Well, showing a cave with some capybaras, plants hanging from the ceiling, and small lights. The grass on the ground looks like it glows."
                                    class="toot-media-img img-bda04d798f739c346cbf2cfed7ffb96d"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/113290415749654937" class="toot-date" rel="noopener">October 11, 2024, 19:22</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>In November the 2024 edition of our hotsauce got finished. As every year we planted the chillies around February and then took care of them throughout most of the year. Sadly, the yield this time around wasn&rsquo;t as great and we had to add some store bought chillies into the mix. I think the sauce still came out great though after five weeks of fermentation. Alas, I can&rsquo;t taste it myself - no heat tolerance 😅</p>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
            
            
    
            
                
                
            
    
            
                <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/113419292806716881">
                    <div class="toot-header">
                        <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                            <img
                                src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                                alt="Mastodon avatar for @foosel@chaos.social"
                                loading="lazy"
                            />
                        </a>
                        <div class="toot-author">
                            <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                            <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                        </div>
                    </div>
                    <p>And now they are labelled 😊</p>
                    
                        
                            
                                
                            
                        
                        <div class="toot-img-grid-1">
                        
                            
                                
                                <style>
                                    .img-959d8163343345e6dcbb101b3eed1a5f {
                                        aspect-ratio: 3325 / 2494;
                                    }
                                </style>
                                <img
                                    src="https://assets.chaos.social/media_attachments/files/113/419/287/506/851/826/original/af88f81979b8a92e.jpg"
                                    alt="A bunch of small hot sauce bottles on a table. The bottles are labelled. The labels say 
    
    Hellrider
    Hot sauce by Gina & Dennis
    2024"
                                    class="toot-media-img img-959d8163343345e6dcbb101b3eed1a5f"
                                    loading="lazy"
                                />
                            
                        
                        </div>
                        
                        
                            
                            
                        
                    
                    
                    
                    <div class="toot-footer">
                        <a href="https://chaos.social/@foosel/113419292806716881" class="toot-date" rel="noopener">November 3, 2024, 13:37</a>&nbsp;<span class="pokey">(UTC)</span>
                    </div>
                </blockquote>
            
        
</li>
<li>
<p>After one too many quality issues with my Blue Yeti, I upgraded my office audio setup and got myself a Shure MV7+ and a Vocaster Two audio interface. And since then I&rsquo;m finally <em>happy</em> when hearing my own voice in a recording 😄</p>
</li>
<li>
<p>As my final work project of the year, I did some - successful! - refactoring experiments on OctoPrint that unlocked some things I&rsquo;ll work on in early 2025, and I&rsquo;m really looking forward to that 😊</p>
</li>
</ol>
<p>And there you have it. My personal list of good stuff that I did or experienced in 2024! Probably missing plenty of things, but that&rsquo;s all that I could think of now off the top of my head and with the help of my <a href="https://chaos.social/@foosel">Mastodon account</a> and my picture gallery 😄 Let&rsquo;s see what cool stuff I&rsquo;ll manage to list for 2025!</p>
]]></content:encoded></item><item><title>EDC 2024</title><link>https://foosel.net/blog/2024-08-08-edc-2024/</link><pubDate>Thu, 08 Aug 2024 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2024-08-08-edc-2024/</guid><description>My everyday carry of 2024</description><content:encoded><![CDATA[<p>The other day I was taking care of a fresh mosquito bite with the heat-it that&rsquo;s part of my EDC (&ldquo;everyday carry&rdquo;), and that reminded me that I&rsquo;d been meaning to do a quick write-up about my EDC for ages.</p>
<p>On top of my keys (with some meds and my second factor tokens) and my phone (currently a Pixel 6a) I usually carry a little pouch with me as pictured above.</p>
<p>Unpacking it fully, it looks like this:</p>
<p><img alt="Picture of the now empty pouch and its contents as described below" loading="lazy" src="/blog/2024-08-08-edc-2024/edc2024_annotated.jpg"></p>
<p>So what is all this stuff? Here we go:</p>
<ol>
<li>a full miniature RPG dice set (you never know when you need to roll on something)</li>
<li>64GB USB stick (mostly empty for impromptu file transfers, but also something to watch in case I have to entertain myself in a hotel or something)</li>
<li>Troika Liliput pen (ballpoint pen, ruler, stylus, screwdriver)</li>
<li>small pill tube with painkillers (I tend to get weather related headaches)</li>
<li>Leatherman Squirt PS4</li>
<li>small rechargeable LED flashlight (white light, red light &amp; UV, plus emergency flashing)</li>
<li>small lighter (I don&rsquo;t smoke, I just prefer to have a fire and emergency light source on me)</li>
<li>3d printed emergency whistle</li>
<li>small refreshment towel (in case I need to wash my hands but can&rsquo;t)</li>
<li>hygiene baggy &amp; tampon (in case I misjudge my cycle or need to help someone else who misjudged theirs)</li>
<li>two glucose sweets (always good to have something on hand for myself or others)</li>
<li>meds against motion sickness (which I sadly suffer from greatly, especially in cars I&rsquo;m not driving myself)</li>
<li>short USB-C to USB-A cable for charging my phone, plus a SIM tool</li>
<li>USB-C heat-it (little gadget I can plug into my phone and control from an app that helps with mosquito bites through heat - consider it a really portable form of the popular bite-away wand)</li>
<li>(not pictured) a key for a safe</li>
</ol>
<p>And that&rsquo;s it with regards to my EDC! I&rsquo;m currently thinking about sewing a custom pouch, as the store bought one I currently use could really use better zippers and a slightly different internal organisation, but that&rsquo;s a future project.</p>
<p>I&rsquo;ll do my best to also add a post about my portable solder kit soon 😁 In the meantime, feel free to get in touch <a href="https://chaos.social/@foosel">on Mastodon</a> for questions or comments!</p>
<p><em>edit</em> I forgot to label the USB stick earlier, this has now been fixed.</p>
]]></content:encoded></item><item><title>On the importance of time off</title><link>https://foosel.net/blog/2024-07-25-on-the-importance-of-time-off/</link><pubDate>Thu, 25 Jul 2024 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2024-07-25-on-the-importance-of-time-off/</guid><description>Why work related mentions on my personal accounts annoy me</description><content:encoded><![CDATA[<p>I&rsquo;m on day 4 of my desperately needed summer vacation<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, and twice already I got pinged on my personal social media accounts about OctoPrint related stuff. This happens on every vacation that I take, and during shorter breaks like weekends or just after hours as well, so much so that I&rsquo;ve pinned a post about it to my Mastodon account (that now also cross references this very blog post):</p>















        
        

        
            
            
        

        
            <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/109245619011351909">
                <div class="toot-header">
                    <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                        <img
                            src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                            alt="Mastodon avatar for @foosel@chaos.social"
                            loading="lazy"
                        />
                    </a>
                    <div class="toot-author">
                        <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                        <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                    </div>
                </div>
                <p>Friendly reminder: This is my private Mastodon account which I also want to be able to read after work, during the weekends &amp; other time off without getting dragged back into work 😉 </p><p>See also: <a href="https://foosel.net/blog/2024-07-25-on-the-importance-of-time-off/" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">foosel.net/blog/2024-07-25-on-</span><span class="invisible">the-importance-of-time-off/</span></a></p><p>Thus, if you have any OctoPrint 🐙 related mentions, please direct them at <span class="h-card" translate="no"><a href="https://fosstodon.org/@octoprint" class="u-url mention">@<span>octoprint</span></a></span>. </p><p>For support, get in touch on the forum or check out the Discord server, see <a href="https://help.octoprint.org" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="">help.octoprint.org</span><span class="invisible"></span></a></p><p>Respect my right to have a life beyond OctoPrint, thank you 😊</p>
                
                
                
                <div class="toot-footer">
                    <a href="https://chaos.social/@foosel/109245619011351909" class="toot-date" rel="noopener">October 28, 2022, 11:17</a>&nbsp;<span class="pokey">(UTC)</span>
                </div>
            </blockquote>
        
    
<p>Contrary to what many people seem to think 😉 I indeed have a life beyond OctoPrint, and actually a lot of stuff I&rsquo;m interested in beyond 3d printing (shocking, I know!). Yet a lot of people out there think that as an Open Source maintainer I&rsquo;m available for anything concerning my project(s) 24/7. Even if OctoPrint wasn&rsquo;t the <em>incredibly</em> stressful and intense, albeit amazing job it is, this wouldn&rsquo;t be the case for me.</p>
<p><strong>Even if we love what we do, we need rest.</strong> Our brains need a chance to get out of the usual daily routine and we need to get some dopamine boosts from a change of rhythm. Stuff that got learned, stuff that caused harm, stuff that needed a lot of thinking, all of that needs time to get processed. That&rsquo;s why we (shouldn&rsquo;t) work the whole day, that&rsquo;s why we (should) have weekends, and that&rsquo;s why we also (should) have vacations where we do something else than what we do day to day for a living.</p>
<p>What I learned from several close calls with full blown burn-out over the past ~12 years of maintaining OctoPrint is that taking regular restful breaks is probably one of the most important things, maybe even <strong>the</strong> most important thing, I can do for the long term health of both myself and my projects. That&rsquo;s why not getting dragged back into work in general and OctoPrint specifically during my off times is a boundary that I will always defend hard<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>And that&rsquo;s what I can only recommend to anyone - maintainer or not. You have a right to restful breaks. And you cannot be at the peak of your performance if you are close to or already burnt out. Stand up for your time off! Fuck hustle culture!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>It&rsquo;s disturbing how much energy this whole <a href="https://octoprint.org/blog/2024/06/28/stats-manipulation/">stats manipulation</a> crap sucked - <a href="https://octoprint.org/blog/2024/07/04/more-stats-manipulation/">twice</a>!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>And let&rsquo;s face it, no one else will.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Developing "Pew Pew Pew: Danger Zone!"</title><link>https://foosel.net/blog/2023-05-30-developing-pew-pew-pew-danger-zone/</link><pubDate>Tue, 30 May 2023 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2023-05-30-developing-pew-pew-pew-danger-zone/</guid><description>A bit of a devlog for my Go Godot Jam 4 entry</description><content:encoded><![CDATA[<p>As hinted at to be my plan in <a href="/blog/2023-04-16-the-path-to-super-bunny-hoppers/">my post about my first proper gamedev experience back in April</a>, I recently took part in my first
ever gamejam, <a href="https://itch.io/jam/go-godot-jam-4">Go Godot Jam 4</a>, and during that built a game called <a href="https://foosel.itch.io/pew-pew-pew-danger-zone">&ldquo;Pew Pew Pew: Danger Zone!&rdquo;</a>. The jam required all submissions to be built in <a href="https://godotengine.org">Godot Engine</a>, which was one of the reasons I chose it - I just recently got my feet wet in game development with Godot 4 and wanted to get some more practice in. Since my partner was otherwise committed, I entered as a solo dev.</p>
<p>In this post I want to share a bit of a devlog and some insights into that experience, to add more background to <a href="https://chaos.social/@foosel/110321340611941751">the Mastodon thread I maintained throughout</a>.</p>
<p>Apologies in advance, this is going to be a long one, but there are also a ton of pictures and videos to break up the text a bit 😉</p>
<h2 id="development">Development</h2>
<p>The submission phase (so the time I had for developing and submitting a game fitting the theme) was 9 days long, from Friday, May 5th at 22:00 UTC to Sunday, May 14th at 22:00 UTC. Since the start wasn&rsquo;t until midnight in my timezone and after yet another intense work week I was quite exhausted on that Friday evening, I didn&rsquo;t stay up for the theme announcement. So it wasn&rsquo;t before the morning of Satuday May 6th for me to learn about the theme <strong>LESS IS MORE</strong>, right after waking up.</p>
<h3 id="saturday-may-6th-lets-go">Saturday, May 6th: Let&rsquo;s go!</h3>
<p>During my morning routine I got an idea on what game to create<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>: A little shoot-em-up (shmup) with minimalistic graphics, slightly bullet hell-ish, where the only way to upgrade your weapon and shoot more bullets was to lose health. The challenge would be balancing health vs damage output, possibly even dodging health pickups to stay at a higher bullet output with the risk of dying.</p>
<p>After breakfast I sat down to sketch out this idea a bit further.</p>
<p><img alt="My handwritten and handrawn notes of the game idea" loading="lazy" src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/ggj4-notes.webp"></p>
<p>The originally plan was to have the player be a triangle pointing upwards, and several enemy types also based on geometric shapes. The player would have three hit points and thus three different bullet emitter configurations. I jotted down some ideas for collectable power-ups (a shield, health, little shooting satellites, homing missiles), did some initial UI sketches and also laid out a rough plan for the interactive tutorial I wanted to include, by already leaving myself a plan B in case I wouldn&rsquo;t have enough time to implement it. Not written down in my notes but already quite clear in my head was the plan to have the game have 2-3 levels and a final boss to defeat, which felt like a good scope for the time I had available.</p>
<p>The plan was to spend most of the time until maybe Wednesday implementing controls, enemies, bullets and the basic game loop, and then spending the rest of the time on the tutorial, levels and boss, plus of course testing and publishing on <code>itch.io</code>.</p>















        
        

        
            
            
        

        
            <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/110321340611941751">
                <div class="toot-header">
                    <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                        <img
                            src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                            alt="Mastodon avatar for @foosel@chaos.social"
                            loading="lazy"
                        />
                    </a>
                    <div class="toot-author">
                        <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                        <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                    </div>
                </div>
                <p><a href="https://chaos.social/tags/GoGodotJam4" class="mention hashtag" rel="tag">#<span>GoGodotJam4</span></a> started at midnight. The theme is &quot;Less is more&quot; and I intend to participate! Got an idea that should work I hope, so let the coding commence!</p>
                
                
                
                <div class="toot-footer">
                    <a href="https://chaos.social/@foosel/110321340611941751" class="toot-date" rel="noopener">May 6, 2023, 10:47</a>&nbsp;<span class="pokey">(UTC)</span>
                </div>
            </blockquote>
        
    
<p>Then I sat down and got to work.</p>
<p>My first task was getting a player scene created and basic 2d movement controls implemented. After that I quickly created a player asset, two enemy assets and some bullets in Inkscape, basing my color choices on the <a href="https://lospec.com/palette-list/endesga-64">ENDESGA 64 color palette</a>, and started looking into automatic bullet emitters and bullet patterns for the enemies, and straight shooting for the player. I also implemented the logic for the player to lose health when colliding with the enemies&rsquo; bullets and consequently shooting more bullets, and for the enemies to lose health and dying when colliding with the player&rsquo;s bullets.</p>
<p>All of that took me the better part of Saturday, but by the time evening got around I had a very basic prototype with bullet emitters and patterns on the (still static) enemies and some basic shooting logic on the player. There was no sound yet, no game juice, nothing like that, but it was a start!</p>
<video controls preload="auto" width="100%"  autoplay loop playsinline class="html-video">
    <source src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/ggj4-day1.webm" type="video/webm">
  <span></span>
</video>
<h3 id="sunday-may-7th-lets-add-some-game-juice">Sunday, May 7th: Let&rsquo;s add some game juice!</h3>
<p>Sunday began with a trip to a doc to get my sixth COVID shot<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. After that I sat down again in front of the laptop to implement as much as I could before the by now customary post-vaccination-headache would start haunting me.</p>
<p>It turned out to be a quite busy day, as I implemented:</p>
<ul>
<li>screen scrolling and movement limits for the player to always stay on screen</li>
<li>player death and respawning at the bottom of the screen, with a short period of invincibility right after respawning indicated by some fading in and out</li>
<li>screenshake and an explosion particle effect when destroying an enemy or the player</li>
<li>some basic sound effects for shooting and the explosions, whipped up in <a href="https://github.com/timothyqiu/gdfxr">gdfxr</a></li>
<li>a simple shadow effect for the player and enemies to simulate height (really just the same sprite with a modulate color applied and offset by a few pixels)</li>
</ul>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/ggj4-day2.webm" type="video/webm">
  <span></span>
</video>
<p>I also did some research on what music to put in and came across some amazing tracks by <a href="https://davidkbd.itch.io/">David KBD</a>. I was not yet fully set on which tracks to use precisely, but I was sure I had found a match (and was right!).</p>
<p>I was quite happy with that kind of progress and went to sleep with a good feeling, despite dreading the next day a bit due to the expected side effects of the vaccination.</p>
<h3 id="monday-may-8th-its-got-a-name">Monday, May 8th: It&rsquo;s got a name!</h3>
<p>But when I woke up on Monday morning, I happily realized that this time I had gotten away with just a bit of a headache and some tiredness, but nothing more. Alas, that still didn&rsquo;t allow me to continue to work on the game - it was a regular work day after all! And so I had to wait until the evening to continue. I was able to implement some pluggable enemy behaviour (for now only following the player at an offset, but with an underlying code structure that would allow to quickly implement other behaviours as well) and also a first version of the HUD with health bar, damage output bar, life counter and score display. Also, I whipped up a background graphic in Inkscape and put that in as well. But most importantly I came up with a name for my creation: <strong>Pew Pew Pew: Danger Zone!</strong></p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/ggj4-day3.webm" type="video/webm">
  <span></span>
</video>
<h3 id="tuesday-may-9th-pickups">Tuesday, May 9th: Pickups!</h3>
<p>Just as Monday, Tuesday would also be a slower day with regards to progress on the game - working on OctoPrint all day didn&rsquo;t leave much time and energy in the evenings to make huge steps forward<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, but I got some more stuff done nevertheless and was able to add various pickups to the game:</p>
<ul>
<li>a health pickup that would recover one hit point for the player (which of course would reduce the damage output),</li>
<li>a shield pickup that would protect the player from bullet damage for a few seconds,</li>
<li>point pickups and</li>
<li>a pickup that would add a little drone circling around the player which for now did nothing but in the future I wanted to have shoot homing missiles at the closest enemy</li>
</ul>
<p>Almost all of that would of course see further fine tuning during the next few days, but it was a good start on the pickups.</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/ggj4-day4.webm" type="video/webm">
  <span></span>
</video>
<h3 id="wednesday-may-10th-refactoring--doubting-myself">Wednesday, May 10th: Refactoring &amp; doubting myself!</h3>
<p>Wednesday was the worse day of the jam for me. Work was tough, I was really out of energy in the evening, and the time that I did have after work was spent on refactoring the bullet emitters on the enemies so that I could also use them for the player and setting up some more bullet patterns, during which I also managed to introduce a hilarious bug that doubled all of the emitted bullets, making the game incredibly hard.</p>
<p><img alt="A screenshot from PPP:DZ. Most of the screen is filled with bullets thanks to the duplication bug." loading="lazy" src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/ggj4-day5.png"></p>
<p>That was also the day I spent a lot of time on trying to get the drone to work and failing miserably - the homing missiles just didn&rsquo;t feel right, a circular pattern I tried as an alternative felt even worse, and all in all it simply was not coming together. I knew I still didn&rsquo;t have a single level, the drone idea was failing and I was thinking I&rsquo;d have to pull it, and things just still didn&rsquo;t feel very fun. All in all, I was starting to seriously doubt whether I&rsquo;d be able to submit something to the jam that I could be proud of. I went to bed quite frustrated and in doubt with myself.</p>
<h3 id="thursday-may-11th-menus-bombs-game-over">Thursday, May 11th: Menus, bombs, game over!</h3>
<p>Thursday was a way better day however! I woke up very early, and when I realized I could no longer sleep got up and went through my morning routine. I was still thinking a lot about the drone and how to fix it, when suddenly a shower thought struck. I&rsquo;d implement another pickup, a little bomb that you&rsquo;d be able to trigger with a button press and which would then damage all enemies in its radius for a large amount of points and eradicate all bullets and pickups.</p>
<p>I finished my routine, sat down in front of the computer and started working on that - even before work! It was around 7am and I figured I should be able to get that implemented in the 2-2.5h before I had to start working on OctoPrint, and it turns out I indeed managed to pull that off! I created a small effect to indicate the damage radius of the bomb that would get attached to the player when the bomb was picked up, and a small animation that would make this light up and vanish when the bomb was set off via the <code>Shift</code> key, together with a new sound effect. And doing that was fun! I was starting to feel optimistic again and started on my work day.</p>
<p>I finished that a bit earlier than usual because I had accumulated some overtime the past few weeks and got back into working on PPP:DZ. I fixed the homing missiles on the drone - they were not perfect, but they were finally homing! I also created a title graphic, the game&rsquo;s menu, a pause menu, a game over and a winning screen, some pickup indicators for the HUD, made level switching work, and changed some things about the pickups - the drone would now time out, the shield would track damage and be able to protect from 10 damage points. I think this was also the day I had the idea to give the player a bit of gravity for pulling in pickups, and that also made things finally feel way nicer!</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/ggj4-day6.webm" type="video/webm">
  <span></span>
</video>
<p>It was an incredibly productive day, and I knew I&rsquo;d be able to fully concentrate on the game for all of Friday, Saturday and Sunday. I set myself the goal to finish a first level by the end of the next day, add two more levels and a boss fight on Saturday, and do nothing but testing and bug fixing for all of Sunday.</p>
<p>I went to bed feeling like I might actually be able to pull this off after all!</p>
<h3 id="friday-may-12th-weve-got-a-first-level">Friday, May 12th: We&rsquo;ve got a first level!</h3>
<p>After starting the day with a climbing session at the bouldering gym and some chatting with my buddies, I returned home, jumped into the shower and immediately got another idea for the game<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>: Modulating the bullet speed based on health, increasing their speed the less health you still have, leading to a more frantic feeling and also even more damage output.</p>
<p>As soon as I was done with the morning routine I sat back down in front of the laptop and looked into implementing that. It turned out to be surprisingly easy to do, and when I fired up the game for the first time and took some damage on purpose I actually loudly shouted &ldquo;F*CK YEAH!&rdquo; because it made the game feel so much better!</p>
<p>I spent the rest of the day implementing the first level - creating a bunch of enemies and made them follow the player, move in a pattern across the screen or just stay statically in place and shoot away, fine tuning placement and playing through it again and again and again until I was happy with the feeling of things. In the process, I also found and fixed a sheer ton of bugs and minor or major annoyances, including a couple of game breaking race conditions 😬</p>
<p>Somewhere during that day, <a href="https://foosel.itch.io/pew-pew-pew-danger-zone">I also set up the game on itch.io</a>, wrote a little description, created some preview images and made sure the web export was running fine. At this point the page was still set to private, but thanks to the shareable secret link I was already able to send it to a few friends for testing, which is what I did.</p>
<p>I think around this time I must also have added the highscore mechanism, incl. persistence, which to my happy surprise also worked without any issues in the web export.</p>
<p>By the end of the day, I was exhausted, but happy with the progress, right on time, and looking forward to the next day!</p>















        
        

        
            
            
        

        
            <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/110357894701554845">
                <div class="toot-header">
                    <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                        <img
                            src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                            alt="Mastodon avatar for @foosel@chaos.social"
                            loading="lazy"
                        />
                    </a>
                    <div class="toot-author">
                        <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                        <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                    </div>
                </div>
                <p>Current state: exhausted, but level 1 designed through and implemented :D Only needs some more fine tuning! Also fixed a ton of issues I found during play testing, even some game breaking race conditions 😲</p><p>Fun addition: firing interval now inversely scales with health too - the closer to the death, the faster you fire. &quot;Less health, more bullets&quot; indeed.</p><p>Quite happy with the progress once again! Nothing planned the next two days but working on and finishing this 💪</p>
                
                    
                        
                    
                    <div class="toot-img-grid-0">
                    
                        
                    
                    </div>
                    
                    
                        
                            
                            <style>
                                .img-36a639af097046ce2f167f127b49bccd {
                                    aspect-ratio: 1280 / 720;
                                }
                            </style>
                            <div class="ctr toot-video-wrapper">
                                <video muted playsinline controls class="ctr toot-media-img img-36a639af097046ce2f167f127b49bccd">
                                    <source src="https://assets.chaos.social/media_attachments/files/110/357/880/597/878/877/original/e03754c6fe10d442.mp4">
                                    <p class="legal ctr">(Your browser doesn&rsquo;t support the <code>video</code> tag.)</p>
                                </video>
                            </div>
                        
                        
                    
                
                
                
                <div class="toot-footer">
                    <a href="https://chaos.social/@foosel/110357894701554845" class="toot-date" rel="noopener">May 12, 2023, 21:43</a>&nbsp;<span class="pokey">(UTC)</span>
                </div>
            </blockquote>
        
    
<h3 id="saturday-may-13th-content-done">Saturday, May 13th: Content done!</h3>
<p>I woke up to some amazing feedback from a buddy and implemented that right away:</p>
<ul>
<li>the pickup gravity was a bit too aggressive and constantly yeeted things out of the screen, so I toned that down a bit and that help a lot</li>
<li>the drone was feeling too weak, so I increased its shot frequency</li>
<li>there was still an issue that the level end screen would not stop you from continuing to move around and shoot behind it - that required a bit more work, but was on the TODO list already anyhow</li>
</ul>
<p>Next task on the plan for the day was implementing two more levels and a boss! Since the boss definitely was the higher risk and higher impact, I tackled that one first, and created a big circle enemy chock full of hit points and with a shield powered by satellites rotating around it that would also shoot at the player. Admittedly that the shield was powered by these satellites was a bit of a hidden feature - shooting one down would temporarily remove the shield, only for it to return, until all satellites were taken out. It seems not many players might have caught on to that though 😅</p>
<p>I threw it into its dedicated level and added a boss health bar to the HUD.</p>
<p>Around afternoon I posted a sneak peak of the boss on Mastodon:</p>















        
        

        
            
            
        

        
            <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/110362364305310898">
                <div class="toot-header">
                    <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                        <img
                            src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                            alt="Mastodon avatar for @foosel@chaos.social"
                            loading="lazy"
                        />
                    </a>
                    <div class="toot-author">
                        <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                        <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                    </div>
                </div>
                <p>👀</p>
                
                    
                        
                            
                        
                    
                    <div class="toot-img-grid-1">
                    
                        
                            
                            <style>
                                .img-a1495e23254a6b3d9ad23184fa599034 {
                                    aspect-ratio: 1280 / 720;
                                }
                            </style>
                            <img
                                src="https://assets.chaos.social/media_attachments/files/110/362/360/528/771/954/original/08beffe37c501cda.png"
                                alt="Screenshot of the boss in my game Pew Pew Pew: Danger Zone!

A big circular enemy, with five triangle shaped enemies orbiting it. Tons of bullets on the screen."
                                class="toot-media-img img-a1495e23254a6b3d9ad23184fa599034"
                                loading="lazy"
                            />
                        
                    
                    </div>
                    
                    
                        
                        
                    
                
                
                
                <div class="toot-footer">
                    <a href="https://chaos.social/@foosel/110362364305310898" class="toot-date" rel="noopener">May 13, 2023, 16:40</a>&nbsp;<span class="pokey">(UTC)</span>
                </div>
            </blockquote>
        
    
<p>I then went on to create two more levels, which turned out to be surprisingly fast - I was able to reuse some of the enemy movement patterns and also could quickly implement some more ideas I had, thanks to the pluggable behaviours and Godot&rsquo;s animations.</p>
<p>The music selection was finalized as well: &ldquo;Screams in the Distance&rdquo; (as loop) from <a href="https://davidkbd.itch.io/eternity-metal-scfi-music-pack">DavidKBD&rsquo;s Eternity Pack</a> for the title screen, &ldquo;Spiral of Plasma&rdquo; for the levels and &ldquo;Synth Kobra&rdquo; for the boss fight, both from <a href="https://davidkbd.itch.io/interstellar-edm-metal-music-pack">DavidKBD&rsquo;s Interstellar Pack</a>.<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<p>Doing test play after test play while developing I came to the conclusion that the boss encounter still needed a certain &ldquo;oompf!&rdquo; and added a warning animation with an alert sound, which together with the music choice imho really helped to set the right tone for a boss fight.</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/boss-fight.mp4" type="video/mp4">
  <span></span>
</video>
<p>After some more testing and fine tuning I decided to go public with the game, in the hopes to get some more feedback from a wider audience before the final day, <a href="https://foosel.itch.io/pew-pew-pew-danger-zone">published the itch.io page</a> and posted a link to it on Mastodon:</p>















        
        

        
            
            
        

        
            <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/110362764232694746">
                <div class="toot-header">
                    <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                        <img
                            src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                            alt="Mastodon avatar for @foosel@chaos.social"
                            loading="lazy"
                        />
                    </a>
                    <div class="toot-author">
                        <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                        <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                    </div>
                </div>
                <p>Okay! As of now all the content I wanted to create for &quot;Pew Pew Pew: Danger Zone!&quot; has been created 🥰</p><p>For the rest of today and all of tomorrow the plan is testing, testing, testing, improving some things a bit and ironing out any kinks I find.</p><p>I&#39;m beyond proud that I so far actually did manage to pull this off the way I planned it, for my first jam ever. Feels amazing. 😄</p><p><a href="https://foosel.itch.io/pew-pew-pew-danger-zone" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">foosel.itch.io/pew-pew-pew-dan</span><span class="invisible">ger-zone</span></a></p><p><a href="https://chaos.social/tags/GoGodotJam4" class="mention hashtag" rel="tag">#<span>GoGodotJam4</span></a> <a href="https://chaos.social/tags/GoGodotJam" class="mention hashtag" rel="tag">#<span>GoGodotJam</span></a> <a href="https://chaos.social/tags/gamedev" class="mention hashtag" rel="tag">#<span>gamedev</span></a> <a href="https://chaos.social/tags/gamejam" class="mention hashtag" rel="tag">#<span>gamejam</span></a></p>
                
                
                
                <div class="toot-footer">
                    <a href="https://chaos.social/@foosel/110362764232694746" class="toot-date" rel="noopener">May 13, 2023, 18:22</a>&nbsp;<span class="pokey">(UTC)</span>
                </div>
            </blockquote>
        
    
<p>At this point I also submitted it to the jam, knowing full well that it was not yet done, but also that I&rsquo;d still be able to upload new builds and update the page itself until the deadline. I figured I&rsquo;d rather have an old build submitted than miss the deadline altogether due to some unforeseen circumstances.</p>
<p>Then I continued testing and fixing stuff until I was too tired to do go on and went to bed.</p>
<h3 id="sunday-may-14th-day-of-the-deadline">Sunday, May 14th: Day of the Deadline!</h3>
<p>I woke up to some more feedback, one point of which would turn out to be the most common one during the rating phase as well: the enemy bullets were too hard to see. I tried changing their color to red like the enemies themselves, and that helped, but made the game look a bit too monochrome. So I decided to see if switching to a darker background would help, and it did indeed.</p>
<p><img alt="Screenshot of the boss fight in front of a darker background. The bullets have more contrast now." loading="lazy" src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/boss-fight-darker.png"></p>
<p>Things were still not perfect, but it was the final day, I still had to implement a tutorial screen, do some more testing, fine tune some sound effects and finally do several more testing runs - I really didn&rsquo;t have time for big experiments anymore to make the bullets more visible. And to be honest, I didn&rsquo;t consider trying to completely avoid the enemy bullets the goal of the game anyhow, given getting hit was the only way to improve your damage output and there was some short period of invincibility after taking a hit, so sudden death scenarios shouldn&rsquo;t be that big of a concern either.</p>
<p>Thus, I put &ldquo;further research how to increase visibility of enemy bullets&rdquo; on the &ldquo;post jam&rdquo; task list and after redoing all the screenshots and going over all game items to make sure they still were visible too (the shield pickup needed some changes here), I tackled the tutorial. I had said goodbye to the idea of a tutorial level a long time ago already, and almost scratched the tutorial screen as well, but figured it would be better to have some hints in game. I created some key graphics to visualize the controls and put together a basic &ldquo;how to play&rdquo; one-pager that could be selected in the main menu. I also added a very basic keyboard control summary to the bottom of the screen right at the start of the first level, that would slowly fade out.</p>
<p><img alt="Screenshot of the final menu, with the new &ldquo;how to play&rdquo; option" loading="lazy" src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/menu.png"></p>
<p><img alt="Screenshot of the tutorial screen" loading="lazy" src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/tutorial-screen.png"></p>
<p><img alt="Screenshot of the control summary at the start of the first level" loading="lazy" src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/control-summary.png"></p>
<p>What then followed were a couple more hours of final testing, and once I could no longer find anything crucial that needed to be fixed, I decided to call it done, did a final upload and announced on Mastodon that I was done:</p>















        
        

        
            
            
        

        
            <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/110367608340282718">
                <div class="toot-header">
                    <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                        <img
                            src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                            alt="Mastodon avatar for @foosel@chaos.social"
                            loading="lazy"
                        />
                    </a>
                    <div class="toot-author">
                        <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                        <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                    </div>
                </div>
                <p>With the latest update that adds some final polishing (and after making another run through to make sure everything looks ok), I&#39;m calling a wrap on &quot;Pew Pew Pew: Danger Zone!&quot; and my first <a href="https://chaos.social/tags/gamejam" class="mention hashtag" rel="tag">#<span>gamejam</span></a> </p><p>Wow, what an experience. Woke up last Saturday to the theme, thought about it during my morning routine, came up with an idea &amp; put down a plan that felt doable in the available time. And - to my absolute surprise - this plan worked out! Beyond proud! 😊</p><p><a href="https://foosel.itch.io/pew-pew-pew-danger-zone" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">foosel.itch.io/pew-pew-pew-dan</span><span class="invisible">ger-zone</span></a></p>
                
                
                
                <div class="toot-footer">
                    <a href="https://chaos.social/@foosel/110367608340282718" class="toot-date" rel="noopener">May 14, 2023, 14:54</a>&nbsp;<span class="pokey">(UTC)</span>
                </div>
            </blockquote>
        
    
<p>And if you want to see what the game looked like at the time of submission, here&rsquo;s a playthrough of the first level:</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/pewpewpew-level1.mp4" type="video/mp4">
  <span></span>
</video>
<p>and another one of the boss fight:</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/pewpewpew-boss.mp4" type="video/mp4">
  <span></span>
</video>
<h2 id="feedback--lessons-learned">Feedback &amp; lessons learned</h2>
<p>After the submission phase ended, what came next was the rating phase. Everyone who had submitted a game during the jam and of course the organizers themselves could now rate the submissions in five categories. Quoting from the jam page:</p>
<blockquote>
<ol>
<li><strong>Technical</strong> - Does the game work? Does the game show off the engine? Does it do anything particularly impressive? Is it feature rich?</li>
<li><strong>Artistic</strong> - Is it pretty? Are the sound and visuals effective and fitting? Is the style coherent to the gameplay? Are the text boxes legible?</li>
<li><strong>Design</strong> - Does the game teach you how to play it? Do the mechanics make sense?</li>
<li><strong>Gameplay</strong> - Is it fun? Does the difficulty scale? Are there accessibility options? Have I played the same game before or is it innovative?</li>
<li><strong>Theme</strong> - Does the game fit the theme? Is it surface level or is the theme at the core of the game?</li>
</ol></blockquote>
<p>It took me a while to wrap my head around these categories and get a good feeling for how to rate games in them, but after a couple games played and rated I got into a good groove. Meanwhile I started receiving comments and feedback from other participants and a recurring theme there was: &ldquo;the enemy bullets are hard to see&rdquo; 😅</p>
<p>Lesson learned: I should at least have given myself a timebox on that last day, to try out some more things to make the bullets more visible. I&rsquo;m still not sure if I would have found a solution that would have worked well, but some more timeboxed experimenting might have helped. But then, it was the final day of my first ever jam, and I was a bit anxious to get everything done in time, so I guess I can forgive myself for not having done that.</p>
<p>Other than that the feedback was very positive, and when <a href="https://youtu.be/fp_1nU3fvwA?t=4185">it even got streamed by one of the judges</a> I was happy to see that they seemed to really enjoy it and gave me some great ratings as well! Many people said it was fun, enjoyed the intensity, and gave amazing suggestions on how to improve it further.</p>
<p>I also got into some nice discussions about gamedev in general with other participants (and made at least one new friend 👋😊).</p>
<p>So, while horribly anxiety inducing whenever I saw a new notification pop up on itch.io, the rating phase was also a lot of fun, I learned a lot from it and got a ton of helpful feedback!</p>
<p>And I hope I did my part in making it a similarily positive experience for the others as well, by giving them constructive feedback on their games too. I tried to play and rate as many games as possible, and while I didn&rsquo;t manage to play all of them (there were almost 200 submissions!), I did play and rate 42 games in the end, which was almost double of the ratings that I received. Next time I&rsquo;ll try to do more!</p>
<h2 id="final-results--the-future-of-pppdz">Final results &amp; the future of PPP:DZ</h2>
<p>Rating ended late on May 25th, but the results would not be announced until a final event stream that got scheduled for late on May 27th.</p>
<p>In the end, I made 21st place overall in the jam, and even #9 in gameplay, which was an outcome that I absolutely did not expect on my first ever gamejame participation and only my second gamedev experience! When I saw the results, I was absolutely floored! Based on what I had seen from others during the jam, I was hoping I&rsquo;d made it in the Top 100 (out of almost 200 submissions), and would have already been happy with a placement in the Top 50. That I almost made it into the Top 20 and even managed to secure a place in the Top 10 of the Gameplay category was beyond my wildest dreams!</p>
<p><img alt="Screenshot of my final score, showing the overall placement at 21st place and Gameplay at 9th" loading="lazy" src="/blog/2023-05-30-developing-pew-pew-pew-danger-zone/result.png"></p>
<p>But even before this amazing outcome I had already decided that I wanted to continue working on the game. I found myself playing it again and again on my Steamdeck, trying to improve on my highscore, and that made me think that I had indeed something fun here that I could build on.</p>















        
        

        
            
            
        

        
            <blockquote class="toot-blockquote" cite="https://chaos.social@foosel/status/110369145946028083">
                <div class="toot-header">
                    <a class="toot-profile" href="https://chaos.social/@foosel" rel="noopener">
                        <img
                            src="https://assets.chaos.social/accounts/avatars/000/235/099/original/a2e381e9aab4a693.png"
                            alt="Mastodon avatar for @foosel@chaos.social"
                            loading="lazy"
                        />
                    </a>
                    <div class="toot-author">
                        <a class="toot-author-name" href="https://chaos.social/@foosel" rel="noopener">Gina Häußge</a>
                        <a class="toot-author-handle" href="https://chaos.social/@foosel" rel="noopener">@foosel@chaos.social</a>
                    </div>
                </div>
                <p>Y&#39;all, that is still just such an amazing feeling...</p><p>And I really enjoy playing this game that I built, so much so that I&#39;m thinking to build up on this concept further and ideas are starting to float around in my head 🤔 </p><p>We&#39;ll see 😁</p><p>Btw, I&#39;ve put the Linux export up on the itch.io page, so if you want to play it on the deck too, download, in desktop mode add as non-steam game, return to game mode, enjoy ^^ Left analog stick to move, A to shoot, X to trigger the bomb.</p>
                
                    
                        
                            
                        
                    
                    <div class="toot-img-grid-1">
                    
                        
                            
                            <style>
                                .img-920c0a88c11c58fef8bf59f5ba745990 {
                                    aspect-ratio: 1663 / 1247;
                                }
                            </style>
                            <img
                                src="https://assets.chaos.social/media_attachments/files/110/369/136/717/327/637/original/f2c5a715125cd903.jpg"
                                alt="My game running on my Steamdeck "
                                class="toot-media-img img-920c0a88c11c58fef8bf59f5ba745990"
                                loading="lazy"
                            />
                        
                    
                    </div>
                    
                    
                        
                        
                    
                
                
                
                <div class="toot-footer">
                    <a href="https://chaos.social/@foosel/110369145946028083" class="toot-date" rel="noopener">May 14, 2023, 21:25</a>&nbsp;<span class="pokey">(UTC)</span>
                </div>
            </blockquote>
        
    
<p>So - I won&rsquo;t let myself get nailed down on &ldquo;when&rdquo; here (day job, balance, etc), but my plan is to take this concept and develop it further into a full game. I already have a couple of ideas on how to do that, and I&rsquo;m looking forward to working on them.</p>
<p>And what about future gamejam participations? I&rsquo;m hooked now and plan to participate next in the <a href="https://itch.io/jam/gmtk-2023">GMTK Game Jam 2023</a> in July. That will be probably be a solo effort again, and way more intense given that I&rsquo;ll have to take a game from idea to finished product in 48 hours, but I&rsquo;m looking forward to the challenge!</p>
<h2 id="play-the-game">Play the game!</h2>
<p>If you want to play the game, you can find it on itch.io here:</p>



<iframe style="margin: 1em auto" src="https://itch.io/embed/2063488?dark=true" width="552" height="167" frameborder="0"></iframe>

<p>And I&rsquo;ve also thrown up the sources on GitHub: <a href="https://github.com/foosel/pew-pew-pew-danger-zone">foosel/pew-pew-pew-danger-zone</a><sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>. Just a word of warning on those: I&rsquo;m by no means an expert in Godot Engine, and a gamedev newbiew, and I was developing under heavy time constraints. I might have done some horrible things, please don&rsquo;t hold them against me 😅</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Yes, indeed, it was an actual shower thought.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>I plan to attend <a href="https://entropia.de/GPN21">GPN21</a> next week and wanted to get another booster shot before that just in case - as much as everyone seems to pretend it is, no, COVID is not over, and the last thing that I need in my extremely stressful and busy life is to get sick, possibly even long term.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Admittedly, getting up really early to get an hour in at the bouldering gym before work like every Tuesday didn&rsquo;t help either 😬&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>I you see a pattern emerging here that involves me getting great ideas in the shower, you are not wrong. OctoPrint might also have been one, but ten years later I frankly can&rsquo;t remember for sure. At this point however I keep a stack of waterproof post-its and a pencil in the shower, in case something good pop ups in my head.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>If you are looking for some metal riffs for your game, take a look at <a href="https://davidkbd.itch.io">David&rsquo;s work</a>, it&rsquo;s really good!&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>You are welcome to dig around in the code and also of course to send in PRs, but I&rsquo;m currently still debating with myself if I want to merge anything from others, so please don&rsquo;t get offended if any PRs stay open and also uncommented for now 😅&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Some game design centric YouTube recommendations</title><link>https://foosel.net/blog/2023-04-20-some-game-design-centric-youtube-recommendations/</link><pubDate>Thu, 20 Apr 2023 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2023-04-20-some-game-design-centric-youtube-recommendations/</guid><description>A quick list of some channels on the topic of video game design that I really enjoy watching and can recommend!</description><content:encoded><![CDATA[<p><a href="../2023-04-16-the-path-to-super-bunny-hoppers/">In my last post</a> I told you that I&rsquo;ve been very much interested into video game development for a while now, and just never got around it until the personal Gamejam gift from my partner. Due to this interest I&rsquo;ve also been subscribed to a bunch of game design and documentary specific YouTube channels for a few years now, and since I consider their content pretty interesting &ndash; even if you are not interested in game development and just games in general! &ndash; I thought I might just share my list here. So let&rsquo;s go!</p>
<h2 id="adam-millard---the-architect-of-games">Adam Millard - The Architect of Games</h2>
<p><img alt="Screenshot of Adam Millard&rsquo;s YouTube channel" loading="lazy" src="/blog/2023-04-20-some-game-design-centric-youtube-recommendations/architectofgames.jpg"></p>
<p>Link: <a href="https://www.youtube.com/@ArchitectofGames">https://www.youtube.com/@ArchitectofGames</a></p>
<p>Video length: usually 20-30min</p>
<p>I stumbled over Adam Millard&rsquo;s channel thanks to his amazing video <a href="https://www.youtube.com/watch?v=Sz80210ipGc">&ldquo;How Subnautica Uses TERROR&rdquo;</a>. Each video usually centers on one specific topic of game design (recent examples include video game economies, metagaming and why some games that shouldn&rsquo;t be fun are in fact fun) and then discusses it with examples taken from well known and less well known games. Not only have I found the one or other gem this way, I&rsquo;ve learned a TON about what makes games fun, what makes them tick, and hopefully that will also allow me to make fun games myself, in the long run.</p>
<h2 id="design-doc">Design Doc</h2>
<p><img alt="Screenshot of the Design Doc YouTube channel" loading="lazy" src="/blog/2023-04-20-some-game-design-centric-youtube-recommendations/designdoc.jpg"></p>
<p>Link: <a href="https://www.youtube.com/@DesignDoc">https://www.youtube.com/@DesignDoc</a></p>
<p>Video length: usually 15-25min</p>
<p>Design Doc follows a similar approach: a dedicated topic (recent examples: scaling difficulty, winter levels, rhythm game UX), discussed by means of examples from a multitude of games.</p>
<h2 id="game-makers-toolkit">Game Maker&rsquo;s Toolkit</h2>
<p><img alt="Screenshot of the Game Maker&rsquo;s Toolkit YouTube channel" loading="lazy" src="/blog/2023-04-20-some-game-design-centric-youtube-recommendations/gmtk.jpg"></p>
<p>Link: <a href="https://www.youtube.com/@GMTK">https://www.youtube.com/@GMTK</a></p>
<p>Video length: usually 10-20min</p>
<p>Whenever there&rsquo;s a new GMTK video, I&rsquo;m sure to watch it ASAP. Mark Brown does an amazing job in disecting game design topics, and his recent reporting on his own gamedev experience with his &ldquo;Untitled Magnet Game&rdquo; has also been quite interesting to follow. Who knows, maybe I&rsquo;ll have the courage soon to participate in a <a href="https://itch.io/jam/gmtk-jam-2022">GMTK Jam</a>, too? 😅</p>
<h2 id="gdc">GDC</h2>
<p><img alt="Screenshot of the GDC YouTube channel" loading="lazy" src="/blog/2023-04-20-some-game-design-centric-youtube-recommendations/gdc.jpg"></p>
<p>Link: <a href="https://www.youtube.com/@Gdconf">https://www.youtube.com/@Gdconf</a></p>
<p>Video length: usually 30 or 60min</p>
<p>The yearly Game Developer&rsquo;s Conference (short: GDC) happens to have a quite interesting channel indeed, with tons of conference talks spanning across a multitude of topics, such as postmortems, programming, marketing, UX etc. I recently watched an amazing talk about <a href="https://www.youtube.com/watch?v=4RlpMhBKNr0">Celeste&rsquo;s level design</a> on there, and that was fascinating and certainly a video I&rsquo;ll have to come back to. Same goes for the one on <a href="https://www.youtube.com/watch?v=hG9SzQxaCm8">&ldquo;Building a Better Jump&rdquo;</a>. At the top of my &ldquo;Watch Later&rdquo; I also still have some talks sitting on creativity, map generation and open source in gamedev.</p>
<h2 id="noclip---video-game-documentaries">Noclip - Video Game Documentaries</h2>
<p><img alt="Screenshot of the Noclip YouTube channel" loading="lazy" src="/blog/2023-04-20-some-game-design-centric-youtube-recommendations/noclip.jpg"></p>
<p>Link: <a href="https://www.youtube.com/@NoclipDocs">https://www.youtube.com/@NoclipDocs</a></p>
<p>Video length: 30min and way more, but also some shorter ones in the 10min range</p>
<p>Noclip might not entirely fit the general game design focus of this list, but the gaming documentaries they put out are done amazingly well and offer an interesting look behind the scenes of a ton of AAA and indie games and how they came to be. That&rsquo;s less valuable in terms of game design and more in gaming history, but there&rsquo;s definitely something to learn from it as well.</p>
<h2 id="razbuten">Razbuten</h2>
<p><img alt="Screenshot of Razbuten&rsquo;s YouTube channel" loading="lazy" src="/blog/2023-04-20-some-game-design-centric-youtube-recommendations/razbuten.jpg"></p>
<p>Link: <a href="https://www.youtube.com/@razbuten/">https://www.youtube.com/@razbuten/</a></p>
<p>Video length: usually around 20min</p>
<p>Raz has a great series on what video games are like for people who don&rsquo;t usually play them (<a href="https://www.youtube.com/playlist?list=PLordXx8iNEyStcX_WzqM0JCpiJYgqhinc">&ldquo;Gaming For A Non-Gamer&rdquo;</a>), which in and of itself is a pretty great eye-opener. Apart from that they do what I&rsquo;d call opinion pieces on certain game mechanics and other aspects of game design, and why I don&rsquo;t always agree with their opinion, the topics always make me think.</p>
<hr>
<p>If you have any further tips along those lines, I&rsquo;d <em>love</em> to get some more recommendations! Feel free to ping me on Mastodon at <a href="https://chaos.social/@foosel">@foosel@chaos.social</a> 😊</p>
]]></content:encoded></item><item><title>The path to Super Bunny Hoppers</title><link>https://foosel.net/blog/2023-04-16-the-path-to-super-bunny-hoppers/</link><pubDate>Sun, 16 Apr 2023 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2023-04-16-the-path-to-super-bunny-hoppers/</guid><description>A report on an amazingly thoughtful gift and how it made me spent my Easter holiday with cute bunnies jumping on top of garden gnomes</description><content:encoded><![CDATA[<p>For my 40th birthday a few weeks ago, I got a pretty amazing gift from my partner: a coupon for a personal 4-day Gamejam/Gamedev experience, just the two of us.</p>
<p><img alt="A coupon saying &ldquo;Make and save your date for 4 days of Make Your Own Gamejam with Godot Game Engine&rdquo;" loading="lazy" src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/gamejam-coupon.jpg"></p>
<p>I&rsquo;ve been a gamer pretty much my whole life, I&rsquo;ve been a coder pretty much my whole life, but I never so far managed to combine these things. Apart from copying some Star Trek game code in BASIC from a book in my teens, the probably quite common tinkering around with the parameters in <a href="https://en.wikipedia.org/wiki/Gorillas_(video_game)"><code>gorilla.bas</code></a>, and a Snake clone in <a href="https://www.opengl.org/resources/libraries/glut/glut_downloads.php">GLUT</a> in preparation for a 3d graphics course in university, I never so far got into game development. It has been something high on my bucket list however, and I&rsquo;ve been fascinated by the concept of gamejams like <a href="https://ldjam.com/">Ludum Dare</a>, <a href="https://gmtk.itch.io/">GMTK Jam</a> etc., where you build a game matching a provided topic within a set time limit (usually between two to ten days) and within a set of rules (e.g. do you need to do everything yourself, including graphics and music, or are you allowed to use certain existing assets, do you need to use a specific game engine etc). Add to that the fact that these days I&rsquo;m way more into playing indie games than the AAA stuff from the big players<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, a love for learning new stuff and the release of the latest major version 4 of the fully open source <a href="https://godotengine.org/">Godot Engine</a> that has made me curious for a while now, and you might see why this really WAS an absolutely amazing gift by my partner.</p>
<p>We did this event from April 5th to 8th (and I kept a <a href="https://chaos.social/@foosel/110145537112426679">Mastodon thread</a> going throughout it). The first two days were a crash course in Godot Engine for me and in pixel art creation for him. The last two days were spent on creating a full (albeit short) platformer game from scratch.</p>
<h2 id="day-1">Day 1</h2>
<p>The first day was dedicated to getting to know the Godot IDE, going through the <a href="https://docs.godotengine.org/en/stable/getting_started/first_2d_game/index.html">2d game tutorial</a> and then further experimenting with whatever tickled our fancy.</p>
<p>I quickly went through the tutorial and soon had some first results to show for it. In the end, I even managed to get a &ldquo;Dodge the Creeps&rdquo; build exported for Linux and up and running on my Steamdeck, which was a very rewarding outcome indeed! I can&rsquo;t say that I ever found it THAT easy to get Homebrew to run on any of my consoles as it was with the Steamdeck - <code>scp</code> the binary over, add to Steam as external game, done 😊</p>
<p><img alt="Me, holding up my Steamdeck with a big grin and pointing to the screen, which is showing the &ldquo;Dodge the Creeps&rdquo; game I just got to run on it." loading="lazy" src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/happy-foosel.jpg"></p>
<p>Still, as you can see, I was quite happy about that!</p>
<p>I also added some very basic sound effects to the game, which was not very tricky to achieve but had a great effect on the overall polish of that simple first try.</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/dodge-the-creeps.webm" type="video/webm">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/dodge-the-creeps.mp4" type="video/mp4">
  <span></span>
</video>
<p>Next - while my partner was making a deep dive into some pixel art courses - I decided to play around a bit with the physics engine, particle system, sound effects etc by building a small Asteroid-like playground thingy that consisted of just one screen with a little player controlled <a href="https://www.kenney.nl/assets/pixel-shmup">space ship</a>, <a href="https://faktory.itch.io/pixel-planets">two small planets</a> that the spaceship could shoot at (doubtlessly a morally highly questionable mechanic) and some wrap-around behaviour.</p>
<p>At some point, my bullet spawning code was broken, making my ship lay eggs, which nicely fit the fact that we were doing this event over the Easter holidays 😉</p>
<video controls preload="auto" width="100%"  autoplay loop playsinline class="html-video">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/physics-experiments-bug.webm" type="video/webm">
  <span></span>
</video>
<p>Originally I also wanted to have the planets excert gravity on the ship and the bullets, and initially that did work, but at some point it stopped working. I still haven&rsquo;t figured out why 😅 I ended the first day with pew-pew-pew.</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/physics-experiments.webm" type="video/webm">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/physics-experiments.mp4" type="video/mp4">
  <span></span>
</video>
<h2 id="day-2">Day 2</h2>
<p>For the second day, we had planned creating two simple prototypes, one Pong like game and one basic platformer.</p>
<p>We started with the Pong like game and agreed on a slightly futuristic but pixel based graphics style and the name &ldquo;Neon Pong&rdquo;. As my partner was still working through some more pixel art courses I started with some basic placeholder graphics (white rectangles ftw). My idea was to use <a href="https://docs.godotengine.org/en/stable/tutorials/physics/index.html">Godot&rsquo;s physics engine</a>, and my first implementation attempt led to yet another hilarious bug:</p>
<video controls preload="auto" width="100%"  autoplay loop playsinline class="html-video">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/neon-pong-bug.webm" type="video/webm">
  <span></span>
</video>
<p>After ironing that out, I got some simple two player controls implemented, as well as a slightly randomised spawning angle for the ball, scoring and win and lose detection. That involved figuring out how to detect when the ball goes out of bounds (which I already had learned during the tutorial: <a href="https://docs.godotengine.org/en/4.0/classes/class_visibleonscreennotifier2d.html"><code>VisibleOnScreenNotifier2D</code></a>) and some other stuff. I also added some sound effects for the ball bouncing off of obstacles, courtesy of <a href="https://www.drpetter.se/project_sfxr.html">sfxr</a> and some light effects that turned out to be less visible than I had hoped for.</p>
<p>At some point my partner sent me some assets to use for the paddles, the ball, the walls and the background and I also picked out <a href="https://opengameart.org/content/flux-capacitor-no-marty">a nice CC0 synthwave song called &ldquo;Flux Capacitor&rdquo; by &ldquo;Frenchyboy&rdquo;</a>, combined everything, and we had our basic Pong prototype:</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/neon-pong.webm" type="video/webm">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/neon-pong.mp4" type="video/mp4">
  <span></span>
</video>
<p>At that point my partner communicated that he&rsquo;d be quite busy for yet a while to come with the pixel art course, so we decided on me just grabbing some more ready-made assets for the platformer prototype to experiment a bit with the mechanics we&rsquo;d need for the coming days. So I got <a href="https://egordorichev.itch.io/adve">a neat 8x8px dungeon tileset</a> and also treated myself to some <a href="https://egordorichev.itch.io/chare">8x8 animated characters by the same author</a> and started building. First of all I learned how to use Godot&rsquo;s <a href="https://docs.godotengine.org/en/stable/tutorials/2d/using_tilesets.html">tileset feature</a>, so I wouldn&rsquo;t have to manually place each individual tile but rather got just draw full rectangles and such. After that was done I created a very basic single-screen dungeon and a player character. I once again turned to the physics engine to do the heavy lifting, set up collisions, jumping, and also - since the tiles I used came with some wooden platforms - figured out how to make the character fall through those on a press on the down key (hint: manually increasing the y position by 1, negating the collision). Then I added some basic light to the torches I had placed and created some basic enemies and their pathing. For that I had to figure out how to keep them from falling off of platforms but instead switching directions on collisions with walls or cliffs (for the walls, the physics engine already helped, but for the cliff detection I had to learn how to use <a href="https://docs.godotengine.org/en/stable/classes/class_raycast2d.html"><code>Raycast2D</code> nodes</a>).</p>
<p>I didn&rsquo;t manage to implement a proper jump-on-top-the-enemy-to-kill-them mechanic as it was growing quite late already (and we had set ourselves fixed hours to not overdo it), but that led to yet another fun little bug with my character riding on top of a pathing enemy which gave me a good laugh at the end of day 2:</p>
<video controls preload="auto" width="100%"  autoplay loop playsinline class="html-video">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/yap-yap-yap.webm" type="video/webm">
  <span></span>
</video>
<h2 id="day-3">Day 3</h2>
<p>The third day started at the climbing gym, but right after that we got started on our opus magnum for this event: our little platformer. The idea was to build something heavily inspired by Super Mario, but with cute little bunnies hunting carrots and easter eggs - a wish by one of my partner&rsquo;s colleagues. For enemies, I had the idea to add some invading garden gnomes into the mix. We settled on a tilesize (16x16px), some basic mechanics (two selectable characters, jump on enemies, progress through level from left to right, have some predefined checkpoints that act as respawn points upon death, two hit points, &hellip;). While my partner was still working through the final parts of his pixel art course<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, after getting my hands on some <a href="https://v3x3d.itch.io/retro-lines">placeholder assets</a> I started coding.</p>
<p>This time I started with the player. In order to be able to make the code a bit cleaner and more modular, I decided on implementing a state machine for it, and defined states for &ldquo;idle&rdquo;, &ldquo;walking&rdquo;, &ldquo;jumping&rdquo; and &ldquo;falling&rdquo;, and later also added &ldquo;spawned&rdquo; and &ldquo;hit&rdquo;. The states took care of parsing the possible inputs, triggering animations and sound effects and so on, and having that nicely packaged up into each individual state turned out to make the logic WAY easier to implement. I also added a configurable sprite set slot, in order to support multiple player skins and thus characters.</p>
<p>For the enemies, I implemented a parent scene with physics and pathing (once again the wall and cliff detection with direction change), configurable sprites and score. I learned how to scene inheritence and created two enemy types.</p>
<p>Next came the biggest challenge. Since we wanted to have at least two levels (spoiler alert: we only made two levels), I needed a way to dynamically load a level, spawn enemies etc. I didn&rsquo;t want to hard code everything per level and have code repetition, so instead I build a modular level loader. Levels are individual scenes with a tilemap node as the root node that defines the level tiles. Below that node, a specially named <a href="https://docs.godotengine.org/en/stable/classes/class_marker2d.html"><code>Marker2D</code></a> node defines the player spawn, a flexible number of <code>Marker2D</code> nodes assigned to the <code>enemies</code> group act as enemy spawns. A special checkpoint scene was implemented with an <a href="https://docs.godotengine.org/en/stable/tutorials/physics/using_area_2d.html"><code>Area2D</code></a> and a custom <code>checkpoint_reached</code> signal, and some code was added to make sure the last reached checkpoint per level would act as spawnpoint. Instances of this checkpoint scene can then be placed in the level. Finally, a special level exit scene listens for collisions with the players and signals level completion, and another <code>Marker2D</code> level end marker sets the limits of the camera.</p>
<p><img alt="A screenshot from Godot Engine, showing a level scene with the aforementioned additional nodes below the tilemap" loading="lazy" src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/sbh-level-design.png"></p>
<p>To load a level now, the loader would get the name of the level scene to load, instantiate it and insert it into the tree, then fetch the player and enemy spawns and populate them, and also wire up all the required signals. That worked so well that I quickly created two basic test scenes, threw them into an array and wired up the level exit to unloading the current level and loading the next from the array.</p>
<p>The rest of the day was spent further refining the gameplay and fixing bugs in the quickly threwn together dummy level and then starting on the main menu and the character selection screen, and getting some glimpses here and there at the amazing assets my partner was busy working on<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> 😊</p>
<h2 id="day-4">Day 4</h2>
<p>The fourth and final day started with me continuing on the menu and getting it to work 🥳 I then also implemented a pause menu, credits (that would load and roll after reaching the final level exit, and loop back to the main menu), a game over screen and while doing all of that also got back again and again to the gameplay itself, ironing out bugs as I went.</p>
<p>Some time before noon, I started getting the first asset dumps from my partner and the integration started. The first assets I got where the character and enemy assets, and I created spritesets from all of them and wired them up correctly. At that point I also slightly changed the player character&rsquo;s animation behaviours, so that when the player would switch to falling after jumping, the animation would also switch from a jumping to a falling bunny. Ridiculously small effect, but it somehow tied everything a bit together in my humble opinion.</p>
<p>The game was still completely silent, so I sat down with sfxr again and created sound effects for jumping, the player getting hurt &amp; dying, an enemy getting killed, collecting a carrot and collecting an egg. That kept me busy until my partner dropped the tilesets into our shared folder.</p>
<p>I then figured out <a href="https://foosel.net/til/how-to-create-an-animated-tile-in-godot-4s-tilemaps/">how to animate tilemap items</a> for the collectable carrots and easter eggs, and then drew up and populated the actual levels from two templates my partner had created, heavily based on the first two levels of Super Mario Bros. Thanks to day 3&rsquo;s work on the dynamic level loading that was a <em>breeze</em> and my partner seemed quite amazed at how fast I got this done ^^.</p>
<p>We decided that there definitely was not enough time left to create music from scratch as well (it was already getting dark and our personal cut off time was drawing close), so instead I went hunting for some nice chiptunes and with <a href="https://tallbeard.itch.io/three-red-hearts-prepare-to-dev">&ldquo;Three Red Hearts&rdquo;</a> found some amazing ones courtesy of <a href="https://abstractionmusic.com">Abstraction</a>. We decided on four tracks (main menu, level 1, level 2, credits), I threw everything together and some final testing and debugging later we had our first game 😊</p>
<p>And this is it, <strong>Super Bunny Hoppers</strong>:</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/super-bunny-hoppers.webm" type="video/webm">
    <source src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/super-bunny-hoppers.mp4" type="video/mp4">
  <span></span>
</video>
<h2 id="the-days-after">The days after</h2>
<p>We had to take a break the next day since these four days were quite intense, but two days later after some pleas on Mastodon to put up the game up somewhere, I polished things up slightly (by e.g. making the game be controller and fully keyboard playable) and - thanks to Godot&rsquo;s HTML5 export - quite quickly threw it up on <a href="https://foosel.itch.io/super-bunny-hoppers">foosel.itch.io</a> where you can now play it yourself in all its glory!</p>
<p><img alt="Screenshot of the linked itch.io page, showing the embedded game" loading="lazy" src="/blog/2023-04-16-the-path-to-super-bunny-hoppers/itch-io.png"></p>
<p>All in all, I had an absolute blast during these four days (which I&rsquo;ve also told my partner repeatedly), and so did my partner. I see the one or other actual gamejam participation in mine and his future now - I&rsquo;m currently planning to attend the upcoming <a href="https://gogodotjam.com/">Go Godot Jam</a>, though he probably won&rsquo;t be able to thanks to a colliding work event - and am currently spending way too much time soaking up gamedev content on YouTube, am making my way through Scott Rogers&rsquo; &ldquo;Level Up! The Guide to great video game design&rdquo; (another amazing birthday gift by my partner), have started a backlog of game ideas and experiments I want to look into implementing and overall feel quite confident now that I <em>can</em> in fact create games - I just have to do it 😊</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I prefer creative game mechanics and new ideas over the 24th installation of &ldquo;shoot the bad guys with ultra realistic graphics and a licensed soundtrack&rdquo; or any such franchise - especially since said graphics often give me severe motion sickness.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>It was a long one, but it definitely paid off in my opinion 😊&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>And which I&rsquo;ve since <a href="https://chaos.social/@foosel/110198016865272377">turned into custom coasters for him</a>.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>(Almost) one year with the Steamdeck</title><link>https://foosel.net/blog/2023-02-26-one-year-with-the-steamdeck/</link><pubDate>Sun, 26 Feb 2023 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2023-02-26-one-year-with-the-steamdeck/</guid><description>Yes, it was totally worth it!</description><content:encoded><![CDATA[<p>When Valve announced the Steamdeck back in summer of 2021, I was immediately sold. At that point my primary gaming device - despite owning a quite capable PC with enough computing and graphics power to run even the latest AAA games at a decent enough quality - was my Nintendo Switch, simply because I was not particularly happy about spending my after hours in front of the same PC that I already spend my working hours on. Sitting on the couch and playing something in handheld mode while my partner was playing something on his gaming laptop or the PS4 turned out to be an &ldquo;alone time together&rdquo; scenario we both enjoy very much, and was an additional reason I didn&rsquo;t want to spend hours alone in front of my PC. So, when the reservations opened on July 16th 2021 at 19:00 CEST, I was prepared and spent the next 22min frantically trying and finally succeeding to reserve my spot in the EU 256GB queue. And then the waiting began.</p>
<p>As late February of 2022 rolled around, Valve finally started to work through the queue in weekly batches, and I was eyeing my inbox quite nervously in constant fear of missing my order window. I finally got my mail as part of the third batch on March 14th at 17:36 and ordered the deck minutes later. Then the second phase of waiting started, first for the shipment notification which came on March 16th, and then for the actual delivery. Some delays in shipping made my deck just miss a Friday delivery window and instead I got it into my hands only on the coming Monday, which happened to be March 21st - my birthday. And thus the Steamdeck turned into an unintended birthday present to myself 😅</p>
<p>Now almost one year later I can confirm what I hoped when I reserved mine and what I suspected when the first reviews came in: <strong>Yes, this was one of my best acquisitions of 2022!</strong><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>I may not use it daily, there are still days and sometimes weeks during which I don&rsquo;t play due to the one or other reason, but when I play something it&rsquo;s been pretty much exclusively on my deck for the past year. Pretty much anything I have so far thrown at it has worked just fine and I&rsquo;ve spent some wonderful hours on it, playing things like Death Stranding, In Other Waters, Need for Speed: Heat, Gears: Tactics, Return to Monkey Island and much more, and also the one or other multiplayer session of the The Ascent with my partner.</p>
<p><img alt="foosel&rsquo;s Steam Replay 2022. 79 Games Played, top 2% of players. 266 Achievements, 383 Sessions, 63 New Games" loading="lazy" src="/blog/2023-02-26-one-year-with-the-steamdeck/steam_2022.png"></p>
<p>Not only did I game on it however, it also fuelled my tinkering and making hobby. Right at the start of this year on January 1st I swapped its noisy Delta with a much more silent Huaying fan that I bought from iFixit, and also replaced the 256GB SSD with a 1TB one. The <a href="https://www.ifixit.com/Device/Steam_Deck">iFixit guides</a> where spot on and the deck turned out to be even more self repair compatible than the iFixit repairability score of 7/10 suggested. Only a few days later I opened up my deck again on my quest to create <a href="/blog/2023-01-19-custom-steamdeck-buttons/">custom action buttons</a> for my partner&rsquo;s deck<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> for our anniversary, which were a huge success not only with him - I made it on <a href="https://hackaday.com/2023/01/26/casting-custom-resin-buttons-for-the-steam-deck/">Hackaday</a> for the second time in my life <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> 🤭 And now I already have two third party hall effect joysticks lying around here that I plan to swap in ASAP, and of course I still have plans for even more custom buttons.</p>
<p><img alt="Finished custom coloured buttons in a Steamdeck" loading="lazy" src="../2023-01-19-custom-steamdeck-buttons/poster.jpg"></p>
<p>Recently I also set up <a href="https://www.emudeck.com/">Emudeck</a> on it and immediately played through Simon the Sorcerer on ScummVM. Of course there&rsquo;s now also some Zelda ROMs on there that are just waiting for me to give Hyrule another visit. And a gift of <a href="http://cleogame.com/">Cleo</a> on GOG also made me set up <a href="https://heroicgameslauncher.com/">Heroic Launcher</a> and <a href="/til/how-to-add-itchio-games-to-the-steamdeck/">itch.io</a> for more store options. Of course at some point I also ensured I can use the deck as a development system and installed VS Code on it plus a full OctoPrint dev environment. I installed <a href="https://deckbrew.xyz/">Decky</a> and am very much enjoying plugins like <a href="https://github.com/hulkrelax/hltb-for-deck">HLTB</a> and <a href="https://github.com/SteamGridDB/decky-steamgriddb">SteamGridDB</a>. I&rsquo;ve made sure <a href="/til/how-to-automatically-sync-screenshots-from-the-steamdeck-to-google-photos/">my screenshots get synced to a special album in Google Photos</a> so sharing stuff is ridiculously easy. And I printed the one or other accessory for myself, my partner and friends.</p>
<p><img alt="Visual Studio Code with OctoPrint&rsquo;s code running on a Steamdeck in desktop mode. In front of the deck there&rsquo;s a foldable Bluetooth keyboard." loading="lazy" src="/blog/2023-02-26-one-year-with-the-steamdeck/octoprint_ide.jpg"></p>
<p>Finally, I should also say that it has changed my perspective on PC gaming. Before I got the deck, there were regular investments in a faster GPU, more RAM, a faster CPU, a better power supply, to keep a capable gaming system on hand and not lock myself out from the wonderful world that is PC games. But now? I rarely power up my PC these days, after also switching to working from my laptop in late 2022, for energy saving reasons. I&rsquo;m still happy to have it available, for streaming, video cutting, Blender and the one or other Tabletop Simulator session, but overall I&rsquo;m going to save a ton of money in the long-term now I think. The 1080Ti I have in there is still good for all the above for a long time to come, and with the deck being able to play what I tend to play so far, and in a way better way for me - handheld on the couch - I see myself rather invest in a Steamdeck 2.0 than regularly throwing money at more and more ridiculous GPUs.</p>
<p>So, all in all, even one year later I&rsquo;m absolutely happy with my deck as you can see. It turned out to be the <em>perfect</em> device for me and has finally made me tackle my gaming backlog<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>. I&rsquo;m a happy gamer 😊</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>The other was my Ebike.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>He ordered his a day after I received mine and got it half a year later in mid September. Shortly after that the queue was done and since then it&rsquo;s been way faster to get your hands on a deck in EU, US or UK.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>The first time was OctoPrint 😊&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Admittedly it has also contributed to its growth at the same time due to me now buying more stuff on sales and even having subscribed to Humble Choice (<a href="https://www.humblebundle.com/membership?refc=WhoXKx">referral link</a>) 😅&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>On success</title><link>https://foosel.net/blog/2023-02-21-on-success/</link><pubDate>Tue, 21 Feb 2023 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2023-02-21-on-success/</guid><description>Everything has a price, nothing in life is free</description><content:encoded><![CDATA[<p><em>I originally published this in October 2020 as a Twitter thread. Even though it&rsquo;s been a couple of years, the points still stand, so I decided to preserve it here as a short blog post.</em></p>
<p>It&rsquo;s easy to only see the success and also to only <em>share</em> the success in our journeys. But success is usually just the end of a long path of struggle, compromises, setbacks, failure.</p>
<p>Over the years, <a href="/talks/">I&rsquo;ve talked about my journey a lot</a>. About the kind of measures I took and continue to take to protect my physical and mental health from the effects of running a project like OctoPrint.</p>
<p>Sometimes you might find me posting a GIF on social media of me using a heavy bag in my office:</p>
<p><img alt="A perfectly looping GIF of me punching my heavy bag" loading="lazy" src="/blog/2023-02-21-on-success/gina_angry.gif#center"></p>
<p>That GIF and the bag is a big part of my coping strategy and has actually spawned a whole talk (&ldquo;How to deal with toxic people&rdquo;) that I&rsquo;ve now had the pleasure of giving a bunch of times.</p>
<p>I have been running OctoPrint for a decade now. It&rsquo;s my baby, it&rsquo;s a story of success for me. But it has a cost not many see.</p>
<p>Stress. A sheer <strong>ton</strong> of pressure on my shoulders. Sleepless nights here and there. Worry about funding, about retirement, about security, about the future as a whole. A <strong>strong</strong> imposter syndrome I have to combat daily (&ldquo;this was all just luck and I don&rsquo;t belong here&rdquo;). Lots of set backs. Aggressive people. Burnout. A lot of &ldquo;I&rsquo;m not good enough&rdquo; and &ldquo;I&rsquo;m not doing enough&rdquo; and &ldquo;I&rsquo;m not doing it right&rdquo;. And of course a lot of &ldquo;I&rsquo;m not doing enough to protect myself from all of this&rdquo;.</p>
<p>It&rsquo;s easy to put a smile on your face and radiate success and security and all that stuff we get drilled into us that we need to be. This is what you are taught to show the world. But this is just the surface. <strong>No</strong> successful project I know of didn&rsquo;t have a price.</p>
<p>I would be lying if I claimed I have never just sat there and wondered if I should just stop doing this to myself. So far the good outweighs <a href="https://youtu.be/6ILoSjQ94HY">the bad and the ugly</a>. I sincerely hope it stays that way. But never assume someone &ldquo;just has success&rdquo;. Everything has a price, nothing in life is free.</p>
<p>With that being said, I feel obligated to confirm that I am in fact ok, and you all don&rsquo;t have to worry about me 🙂 (at least not more than usual 😉). I&rsquo;ve posted this because I think it is important to talk about these things a bit more publicly, since it&rsquo;s indeed way too often we only see the success and not what lead to it, what it cost or what it continues to cost.</p>
]]></content:encoded></item><item><title>Review: Onyx Boox Nova 3 Color</title><link>https://foosel.net/blog/2023-01-27-review-onyx-boox-nova-3-color/</link><pubDate>Fri, 27 Jan 2023 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2023-01-27-review-onyx-boox-nova-3-color/</guid><description>A long overdue e-reader review, after 1.5 years of use</description><content:encoded><![CDATA[<p>I&rsquo;ve always been a bookworm. As a child, my favourite past time was reading. I usually dragged my current book with me <em>everywhere</em> and would read at any opportunity<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. So, when e-readers became a thing, I was very excited to save on a ton of shelf space in the future and got myself an Amazon Kindle at the first chance I got. Back then in 2010 I actually had to import my Kindle 3 Keyboard from the US since it wasn&rsquo;t available in Germany yet. And since then I&rsquo;ve gone through a couple of e-readers, all of them Kindles. But all the time I was a bit annoyed at two things:</p>
<ol>
<li>Vendor lock-in. Yes, you <em>can</em> send books from other sources than Amazon itself to your Kindle, can convert PDF and EPUB and whatnot, but in my experience it was always a bit of a hassle and especially in the case of PDFs a mess. Even with <a href="https://calibre-ebook.com/">Calibre</a> in my toolbelt I didn&rsquo;t feel all too happy and most of the books I got through <a href="https://www.humblebundle.com/">Humble Bundle</a> and the like - which tend to be EPUB or PDF - stayed unread in my collection while I kept throwing money at Amazon.</li>
<li>Black and white only. That&rsquo;s still an issue with pretty much all e-readers out there, as color displays are only now slowly becoming a thing. But the lack of color means that things that very much profit from color, like coding related books (syntax highlighting),  comics, RPG source books, etc. so far were something I had to read on my phone or tablet.</li>
</ol>
<p>Then I came across <a href="https://www.hanselman.com/blog/the-quiet-rise-of-e-ink-tablets-and-infinite-paper-note-takers-remarkable-2-vs-onyx-boox-note-air">Scott Hanselman&rsquo;s post &ldquo;The quiet rise of E Ink Tablets and Infinite Paper Note Takers - reMarkable 2 vs Onyx Boox Note Air
&ldquo;</a> back in June of 2021, and immediately was intrigued. I had heard of the Remarkable 2 before,
but decided against it due to yet another case of vendor lock-in. But through Scott&rsquo;s post I learned about Onyx&rsquo; e-reader line-up. The fact that they run Android, have Google Play store integration and you can just install your own stuff on them out of the box was very much intriguing, and the Wacom digitizer was an additional point for that model range<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. And after perusing the Onyx website for a while, I decided to pull the trigger on a
<a href="https://onyxboox.com/boox_nova3color">Nova 3 Color</a> - the color e-ink intrigued me and the 7.8&rdquo; size was right on the sweet spot. I ordered it on June 14th 2021 directly from the Boox EU store, and it arrived on June 16th<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. All in all I paid 399€ for a bundle of the e-reader itself, a case, some screen protectors (that I don&rsquo;t use) and of course a stylus. Not too shabby.</p>
<p>So now, 1.5 years later, how do I like it? Let&rsquo;s find out!</p>
<h2 id="visuals">Visuals</h2>
<p>To just address the elephant in the room right away: How does the color screen perform? Well, it&rsquo;s obviously not something you can compare to a tablet OLED. The colors are way more muted and the contrast is not as high. If you&rsquo;ve ever seen a comic printed on newspaper paper, that&rsquo;s pretty much the same kind of color reproduction you can expect here. But for what I got it for, it&rsquo;s absolutely fine.</p>
<p>Syntax highlighting in code snippets is now visible beyond grayscale, and for comics and similar it also works. Given, if I want to really enjoy the colors, I&rsquo;m still getting a hold of my tablet, but for the use case of actually reading long form books with the occasional code snippet, illustration, map or even short comic strip, it&rsquo;s absolutely fine. And for highlighting text, it&rsquo;s also a great feature to have.</p>
<p>To give you an idea here are a couple of pictures of the screen, each with a shot of how the same thing looks like on a regular screen added to the right<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>. First we have a code snippet in the PDF version of &ldquo;Fluent Python 2nd edition&rdquo;:</p>
<p><img alt="Side by side comparison of a page from a coding book on the Nova and a screenshot of the PDF." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/code_comparison.jpg"></p>
<p><img alt="Detail view of the coding book on the Nova." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/code_detail.jpg"></p>
<p>Then a page from the &ldquo;Attack on Titan Anthology&rdquo;:</p>
<p><img alt="Side by side comparison of a page from a comic on the Nova and a screenshot of the CBZ." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/comic_comparison.jpg"></p>
<p><img alt="Detail view of the comic on the Nova." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/comic_detail.jpg"></p>
<p>The third one is a page from the &ldquo;Tales from the Loop&rdquo; RPG source book:</p>
<p><img alt="Side by side comparison of a page from an RPG book on the Nova and a screenshot of the PDF." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/rpg_comparison.jpg"></p>
<p><img alt="Detail view of the RPG book on the Nova." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/rpg_detail.jpg"></p>
<p>And the final one shows a page from the rules PDF of the boardgame &ldquo;Nemesis&rdquo;:</p>
<p><img alt="Side by side comparison of a page from boardgame rules on the Nova and a screenshot of the PDF." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/boardgame_comparison.jpg"></p>
<p><img alt="Detail view of the boardgame rules on the Nova." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/boardgame_detail.jpg"></p>
<p>So, if you expect vibrant colors like on OLED from a color e-ink, I have to disappoint you. At least with the current technology we aren&rsquo;t there yet. But it does add a needed touch of color to books like the above examples that I sorely missed before, and I think I wouldn&rsquo;t want to go back to a black-and-white only e-ink display at this point anymore.</p>
<p>Now, what makes the display a bit more hit and miss when it comes to things like the shown boardgame rules is its size. If this was a 10&rdquo; screen, the rules PDF would be far easier on the eyes. As things are, the pixels wash a bit into each other. But truth be told, that particular PDF is something that even on my 10&quot; tablet I only view zoomed in, and I have some other examples like this - mostly A4 sized RPG books - that simply become too small on the 7.8&quot; display here.</p>
<p>When reading e-reader optimized formats like EPUB or MOBI, or in the Amazon Kindle app, and also with PDFs that are more suited for the form factor, the text is great to read. No eye strain, no blurry text. There is however always a bit of a grainy texture to the screen, and that is due to the lower resolution color layer that&rsquo;s on top of the grayscale one. It&rsquo;s not something I notice while reading however. Overall, I&rsquo;m totally happy with the text quality!</p>
<p><strong>Update:</strong> <a href="https://mastodon.social/@Mihir/109761667962680477">Mihir Joshi asked me on Mastodon how fast  screen refreshes perform on the Nova</a>, and I made a quick video to demonstrate:</p>
<video controls preload="auto" width="100%"  playsinline class="html-video">
    <source src="/blog/2023-01-27-review-onyx-boox-nova-3-color/page_change_video.mp4" type="video/mp4">
  <span></span>
</video>
<p>Imho, the performance is on par with a classic e-ink reader, it certainly doesn&rsquo;t feel slower than my Kindle did.</p>
<h2 id="touch--feel">Touch &amp; feel</h2>
<p>So, we&rsquo;ve covered how it looks, but how does it feel?</p>
<p>The reader&rsquo;s shell is all plastic, but it feels solid. No sharp edges, all just nice to the touch. It certainly feels cheaper than my tablet or phone, but honestly about the same as my various Kindles. The case that came with it snaps to it and has a magnetic cover, and the reader wakes up when I open it - just like I&rsquo;m used to from my Kindles and the tablet. The stylus fits into a small loop on the cover flap; it feels a bit on the cheap side, but it works just fine and is pressure sentitive as expected.</p>
<p>The reader only has two hardware buttons, a power button on the top edge and a button centered beneath the display that acts as back button and backlight toggle (on long press). Everything else is done through configurable gestures and a little hover menu. The top edge has two drag zones, left opens the Android notification area, right the reader&rsquo;s quick settings menu.</p>
<p>The left and right side can be configured as touch sliders, and I&rsquo;ve set mine to have brightness control on the left and nothing on the right.</p>
<p>The bottom edge supports three zones for dragging upwards from as gestures, and I had them mapped to the standard Android buttons back, home, recent.</p>
<p><img alt="Configuration menu for the gestures. Upper half shows config for the gestures that swipe up from the bottom, left, center and right of the screen. Lower half shows config for the side scroll areas." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/gesture_config.png"></p>
<p>However, while writing this post and verifying some things, I noticed the latest firmware update added an optional dedicated navigation bar at the bottom, so I&rsquo;m going to test this out now for a while 😁</p>
<p>What about page turning? Well, there&rsquo;s nothing predefined here - it&rsquo;s app specific. But I&rsquo;ve found that everything I&rsquo;ve thrown at it in terms of reader software either supported &ldquo;tap to turn&rdquo; out of the box, or could be configured this way. You probably won&rsquo;t get happy with an app that demands &ldquo;drag to turn&rdquo; - with the refresh rate of an e-ink screen that is just too laggy.</p>
<h2 id="software">Software</h2>
<p>The fact that the Nova 3 Color runs Android is a huge plus for me. I&rsquo;ve been using Android for years now (funnily enough as long as I&rsquo;ve been an e-reader owner: 2010), and therefore I felt right at home when it came to customizing my Nova.</p>
<p><img alt="Homescreen with installed apps. From left to right and top to bottom: A folder called &ldquo;Stock&rdquo; with 14 items, Audible, Drive, DriveSync, Ebook Reader, Firefox, Gumroad, Kindle, NetGuard, Play Store, Raindrop, ReadEra Premium and Solid Explorer." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/apps.png"></p>
<p>Now, the first thing I actually installed after <a href="https://help.boox.com/hc/en-us/articles/8569260963732-Google-Play-Store">enabling the Play Store</a> was <a href="https://play.google.com/store/apps/details?id=eu.faircode.netguard">NetGuard</a>. I had read online that Onyx devices tend to phone home to China a lot, and that is not something I like very much. So, I threw NetGuard on there, denied everything by default, and from then on only allowed the additional stuff I put on there through to the internet (and occasionally the whole device when I let it check for updates). Rooting it would probably have been even better, but frankly after some network traffic sniffing it looked like NetGuard was enough.</p>
<p>The second thing I installed was the official Kindle app, as that is where I have most of my fiction and also the one or other non fiction books. It&rsquo;s probably what I&rsquo;ve used the most on the device, and it works great. Until a recent update it sometimes crashed and I had to restart it (sometimes twice or thrice before it worked) and scroll to the last page I was on, but with the last OS update I installed, 2022-11-24, this has so far not happened again. In any case it wasn&rsquo;t something that happened on a daily basis, more like once or twice per month, and while definitely annoying never became bad enough to make me start debugging this.</p>
<p>The third app was <a href="https://play.google.com/store/apps/details?id=org.readera.premium">ReadEra Premium</a>. I tested many PDF/EPUB readers throughout the years, and currently that is the one that works best for me. On top of PDF and EPUB it also supports CBR/CBZ, which is commonly used for comics, and a whole bunch of other formats. On the Nova, I had to fiddle around a bit with the settings to enable page switch by tap, optimize the display and such, but I sadly cannot remember what exactly I did. In any case, it works well with almost anything I throw at it now (large format PDFs being hit and miss).</p>
<p>I have my book collection stored in my Google Drive, and so I installed DriveSync to be able to keep it in sync with that and mirrored on the device. So far, every time that I&rsquo;ve opened up the Nova to check out a new book I had just pushed into Drive earlier, it was usually already there, so that&rsquo;s a nice workflow.</p>
<p>In theory there&rsquo;s also a full featured e-reader app integrated and I briefly played around with it, but I was already used to ReadEra from my tablet and so stuck with it.</p>
<p>So far, pretty much everything that I threw at it worked, albeit with some visual glitches here and there (most apps really don&rsquo;t expect to be run on an e-ink display).</p>
<p>There are also a bunch of stock apps installed on the reader, apart from stock options for e-reading and note taking that have their own buttons in the navbar on the left.</p>
<p><img alt="View of the Stock folder, 14 items. From left to right and top to bottom: App Store, Calculator, Calendar Memo, Clock, Dictionary, Email, Gallery, Music, Navigation Ball, NeoBrowser, PushRead, Recorder, Screensaver, BooxDrop and a button to add more." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/stock_apps.png"></p>
<p>Everything else is just pretty much the usual suspects, with two exceptions. The navball app that allows you to configure the menu behind the little button always hovering on your display (I have things in there like taking a screenshot, triggering a manual refresh and similar), and the screensaver app that allows you to configure the cover displayed whole the reader is sleeping. I&rsquo;ve put a little fake book cover on there that always makes me laugh 😅</p>
<p>But apart from these two, the only stock app I actually <em>did</em> use for a while was the app for note taking.</p>
<h2 id="note-taking">Note taking</h2>
<p>The original idea when I got this device to use it as both my e-reader and my notebook. And that&rsquo;s what I tried for the first week or so. But there were two reasons why I stopped doing that and went back to first paper and now my tablet again.</p>
<p>One was that I could only use the stock app for note taking. While every other app did in fact get the stylus input, anything but the (probably heavily optimized) stock note taking app lagged severely, to the point of being not only frustrating but actually impossible to use. And I didn&rsquo;t find any way to sync my notes with any standardized format without Onyx&rsquo; own cloud (and I&rsquo;m unclear what would have been possible there) - I simply don&rsquo;t want to require yet another account on someone else&rsquo;s server farm for that, I have enough of these already. Also, the app felt very basic functionality wise.</p>
<p>The other issue was the display size - perfect for reading, definitely too small for my handwriting in combination with a Wacom digitiser. I had thought that it would be fine for me since I also used to be quite happy with A5 sized Moleskine notebooks, but I seem to write slightly bigger with a stylus than with the Uniball Signo 307 that is my usual go to pen, and so closer to A4 like 10&quot; as found on my tablet definitely works way better.</p>
<p><img alt="Comparison of a full page note on the Nova and a full page note on the Galaxy Tab S4. There is way more space for notetaking on the larger device." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/note_comparison.jpg"></p>
<p><img alt="Detail view of the note on the Nova." loading="lazy" src="/blog/2023-01-27-review-onyx-boox-nova-3-color/note_detail.jpg"></p>
<p>So, I guess if note taking is your goal, go with something bigger than the Nova.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Would I buy it again? Yes, as an e-reader, but not as a note taking device.</p>
<p>For reading, it has the right size, with even most PDFs working just fine. The color display adds just the right dusting of color to make some things previously quite annoying to read on grayscale e-ink fine, and having it run stock unlocked Android means I can use whatever app I want to do the reading in. It has fully replaced the Kindle Paperwhite I used before - I frankly don&rsquo;t even know where that is at the moment 😅 - and I&rsquo;ve read many a book on it now.</p>
<p>For note taking however I found 7.8&quot; to be just too small to be useful. And the fact that only the stock app works well and doesn&rsquo;t seem to have some well supported way to get the notes out of it makes it a bit of a suboptimal experience as well.</p>
<p>If note taking was my focus, I&rsquo;d look at something larger, 10&quot;, and pay close attention to the sync options of the notebooks. Something like OCR enabled PDFs synced into the file system would already be nice (then DriveSync or Syncthing could take care of the rest). From what I&rsquo;ve read online however, something like that doesn&rsquo;t seem to really be available yet.</p>
<p>For either though I think I&rsquo;ll really want color 🌈 from now on 😁</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Just not in the car thanks to this day suffering from severe motion
sickness <em>sigh</em>. I very much envy people who can read in the car.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>My tablet - a Samsung Galaxy Tab S4 that I use for handwritten note taking - has a Wacom digitizer, as does my Wacom Intuous S writing tablet. I&rsquo;ve found the
range of third party stylus options quite amazing, and as a Lamy AL-star fan am the proud owner of both a
<a href="https://www.lamy.com/en/lamy-al-star/">Lamy AL-star EMR stylus</a> and a <a href="https://www.staedtler.com/intl/en/discover/noris-digital/">Staedtler Noris Digital Jumbo</a>.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>This even includes a short delay due to a mail exchange on June 15th - it turns out they couldn&rsquo;t handle the umlauts in my name and needed something ASCII only for the shipping label 😬&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>I adjusted the contrast slightly on the photos of the Nova&rsquo;s screen to better reflect how it looks in real life.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Hugo, meet Android</title><link>https://foosel.net/blog/2023-01-21-hugo-meet-android/</link><pubDate>Sat, 21 Jan 2023 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2023-01-21-hugo-meet-android/</guid><description>Setting up a mobile blogging workflow</description><content:encoded><![CDATA[<p>One thing that kept me from blogging more so far was the difficulty in working on posts on my phone. So after switching this blog over to Hugo I decided to see if I couldn&rsquo;t improve on this situation.</p>
<p>I needed a solution that would allow me to</p>
<ol>
<li>Checkout my page&rsquo;s git repository from GitHub</li>
<li>Quickly create a new post, consisting of a new folder inside <code>content/blog</code> matching my chosen <code>&lt;year&gt;-&lt;month&gt;-&lt;day&gt;-&lt;title slug&gt;/index.md</code> folder structure, based on just a title</li>
<li>Allow me to edit the post, preferably in a text editor focused on Markdown (and ideally allow me to preview the post as well)</li>
<li>Optional: Run the Hugo build on my phone as well for final checks</li>
<li>Finally, commit the new post and push it so that my GitHub Action workflow can take care of the rest</li>
</ol>
<p>I started hunting for options, and I&rsquo;m happy to report that for now I seem to have found a - quite geeky - solution that involves the use of <a href="https://termux.dev/en">Termux</a> (Linux terminal environment for Android), <a href="https://gsantner.net/project/markor.html">Markor</a> (Markdown editor) and <a href="https://tasker.joaoapps.com/">Tasker</a> (Automation tool)<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>I installed Termux, Termux:Tasker, Termux:Widget and Markor via <a href="https://f-droid.org/">F-Droid</a> - the versions available on Google Play are outdated and no longer supported. I already had Tasker installed, but I made sure to give it the additional permission to send commands to Termux. For Termux, I also made sure to allow it to draw over other apps.</p>
<p>I then fired up Termux and took care of storage access and some packages first:</p>
<pre tabindex="0"><code>termux-setup-storage
pkg upgrade
pkg install git gh hugo iconv vim
</code></pre><p>Markor&rsquo;s default folder is located at <code>Documents/markor</code> and so this is where I decided to checkout my page&rsquo;s repository to. I also made sure to set some config settings needed for stuff to work<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>:</p>
<pre tabindex="0"><code>gh auth login
cd storage/shared/Documents/markor
git clone https://github.com/foosel/foosel.github.io
git config --global --add safe.directory /storage/emulated/0/Documents/markor/foosel.github.io
git config --global user.email &#34;you@example.com&#34;
git config --global user.name &#34;Your Name&#34;
</code></pre><p>Next I took care of some helper scripts for Termux:Widget and Tasker. I first created some folders:</p>
<pre tabindex="0"><code>mkdir -p ~/.shortcuts
chmod 700 -R ~/.shortcuts
mkdir -p ~/.termux/tasker
chmod 700 -R ~/.termux/tasker
</code></pre><p>Then I added some helper scripts to them:</p>
<p><code>~/.shortcuts/pull_blog</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/sh
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>cd ~/storage/shared/Documents/markor/foosel.github.io
</span></span><span style="display:flex;"><span>git pull
</span></span></code></pre></div><p><code>~/.shortcuts/push_blog</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/sh
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>cd ~/storage/shared/Documents/markor/foosel.github.io
</span></span><span style="display:flex;"><span>git push
</span></span></code></pre></div><p><code>~/.termux/tasker/serve_blog</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/sh
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>cd ~/storage/shared/Documents/markor/foosel.github.io
</span></span><span style="display:flex;"><span>hugo server -D -F --noBuildLock
</span></span></code></pre></div><p><code>~/.termux/tasker/new_blog_post</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>checkout<span style="color:#f92672">=</span>~/storage/shared/Documents/markor/foosel.github.io
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>slugify <span style="color:#f92672">()</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>     echo <span style="color:#e6db74">&#34;</span>$1<span style="color:#e6db74">&#34;</span> | iconv -t ascii//TRANSLIT | sed -r s/<span style="color:#f92672">[</span>~<span style="color:#ae81ff">\^</span><span style="color:#f92672">]</span>+//g | sed -r s/<span style="color:#f92672">[</span>^a-zA-Z0-9<span style="color:#f92672">]</span>+/-/g | sed -r s/^-+<span style="color:#ae81ff">\|</span>-+$//g | tr A-Z a-z
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>title<span style="color:#f92672">=</span>$1
</span></span><span style="display:flex;"><span>date<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>date +%Y-%m-%d<span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>slug<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>slugify <span style="color:#e6db74">&#34;</span>$title<span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>cd $checkout
</span></span><span style="display:flex;"><span>mkdir -p content/blog/$date-$slug
</span></span><span style="display:flex;"><span>cat &gt; content/blog/$date-$slug/index.md <span style="color:#e6db74">&lt;&lt;EOF
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">---
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">title: &#34;$title&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">date: $date
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">draft: true
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">---
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">EOF</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>echo $date-$slug/index.md
</span></span></code></pre></div><p><code>~/.termux/tasker/commit_blog</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/sh
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>message<span style="color:#f92672">=</span>$1
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>cd ~/storage/shared/Documents/markor/foosel.github.io
</span></span><span style="display:flex;"><span>git add .
</span></span><span style="display:flex;"><span>git commit -m <span style="color:#e6db74">&#34;</span>$message<span style="color:#e6db74">&#34;</span>
</span></span></code></pre></div><p><code>pull_blog</code> and <code>push_blog</code> take care of git synchronization.</p>
<p><code>serve_blog</code> runs Hugo with draft and future posts visible. The page can be viewed in the browser on the phone at <code>http://localhost:1313</code>.</p>
<p><code>new_blog_post</code> takes a post title as its first argument and from that creates the aforementioned folder structure within the <code>content/blog</code> folder, including a prefilled <code>index.md</code>.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<p>And finally <code>commit_blog</code> takes a commit message as its first argument, stages all changes in the checkout and commits them with the supplied message.</p>
<p>Next, I created Termux:Widget widgets on my desktop for <code>pull_blog</code>, <code>push_blog</code> and <code>run_hugo</code>.</p>
<p>Then I opened Tasker and created two new tasks:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>    Task: New Post
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    A1: Input Dialog [
</span></span><span style="display:flex;"><span>         Title: New post
</span></span><span style="display:flex;"><span>         Text: Enter title
</span></span><span style="display:flex;"><span>         Close After (Seconds): 30
</span></span><span style="display:flex;"><span>         Input Type: 540673 ]
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    A2: Termux [
</span></span><span style="display:flex;"><span>         Configuration: new_blog_post &#34;%input&#34;
</span></span><span style="display:flex;"><span>         
</span></span><span style="display:flex;"><span>         Working Directory ✕
</span></span><span style="display:flex;"><span>         Stdin ✕
</span></span><span style="display:flex;"><span>         Custom Log Level null
</span></span><span style="display:flex;"><span>         Terminal Session ✕
</span></span><span style="display:flex;"><span>         Wait For Result ✓
</span></span><span style="display:flex;"><span>         Timeout (Seconds): 10
</span></span><span style="display:flex;"><span>         Structure Output (JSON, etc): On ]
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    A3: JavaScriptlet [
</span></span><span style="display:flex;"><span>         Code: var uri = &#34;content://net.dinglisch.android.taskerm.fileprovider/external_files/storage/emulated/0/Documents/markor/foosel.github.io/content/blog/&#34; + stdout.trim();
</span></span><span style="display:flex;"><span>         Auto Exit: On
</span></span><span style="display:flex;"><span>         Timeout (Seconds): 45 ]
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    A4: Send Intent [
</span></span><span style="display:flex;"><span>         Action: android.intent.action.SEND
</span></span><span style="display:flex;"><span>         Cat: None
</span></span><span style="display:flex;"><span>         Mime Type: text/markdown
</span></span><span style="display:flex;"><span>         Data: %uri
</span></span><span style="display:flex;"><span>         Package: net.gsantner.markor
</span></span><span style="display:flex;"><span>         Class: net.gsantner.markor.activity.DocumentActivity
</span></span><span style="display:flex;"><span>         Target: Activity ]
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-plain" data-lang="plain"><span style="display:flex;"><span>    Task: Commit Blog
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    A1: Input Dialog [
</span></span><span style="display:flex;"><span>         Title: Commit Blog
</span></span><span style="display:flex;"><span>         Text: Enter commit message
</span></span><span style="display:flex;"><span>         Close After (Seconds): 30 ]
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    A2: Termux [
</span></span><span style="display:flex;"><span>         Configuration: commit_blog &#34;%input&#34;
</span></span><span style="display:flex;"><span>         
</span></span><span style="display:flex;"><span>         Working Directory ✕
</span></span><span style="display:flex;"><span>         Stdin ✕
</span></span><span style="display:flex;"><span>         Custom Log Level null
</span></span><span style="display:flex;"><span>         Terminal Session ✕
</span></span><span style="display:flex;"><span>         Wait For Result ✓
</span></span><span style="display:flex;"><span>         Timeout (Seconds): 10
</span></span><span style="display:flex;"><span>         Structure Output (JSON, etc): On ]
</span></span></code></pre></div><p>&ldquo;New Post&rdquo; queries a post title from the user, calls <code>new_post</code> with that and then opens the new post in Markor.</p>
<p>&ldquo;Commit Blog&rdquo; queries a commit message from the user and calls <code>commit_blog</code> with that.</p>
<p>I created desktop shortcuts for these too and placed all of them, together with Markor, Termux and a browser shortcut, in a new folder &ldquo;Blog&rdquo;.</p>
<p><img alt="Screenshot of the shortcut folder dedicated to my blog." loading="lazy" src="/blog/2023-01-21-hugo-meet-android/shortcuts.jpg"></p>
<p>So, my workflow now consists of pulling, creating a new post, editing it, optionally firing up Hugo to check on the whole thing locally, committing and pushing, all at least without <em>needing</em> to touch the terminal, but always <em>able</em> to if so desired.</p>
<p>It&rsquo;s not perfect, and some app that takes care of all of this from a nice UI would certainly be better (<em>hint hint</em>). But - as this post created entirely from my phone proves - it works for now 😁</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Quick shoutout to <a href="https://pipe.how/write-androidblog/">this post by Emanuel Palm</a> who found himself in a similar situation (prior to boarding a plane to boot) and showed me the path on which I was then able to set up a neat workflow.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>You&rsquo;ll obviously have to adjust that and the following bits with your own repo, name and email.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Note that I&rsquo;m aware of the existence of <code>hugo new</code>, however it insisted on prefilling the title with the date included and otherwise also felt a bit too inflexible, hence I decided to implement what I wanted directly in bash.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Hello Hugo!</title><link>https://foosel.net/blog/2023-01-20-hello-hugo/</link><pubDate>Fri, 20 Jan 2023 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2023-01-20-hello-hugo/</guid><description>Trying another static site generator in 2023</description><content:encoded><![CDATA[<p>Two years ago I was into learning <a href="https://reactjs.org/">React</a>, since that is what I&rsquo;m planning to use for a future
OctoPrint UI. And when I decided to reboot this webpage, I also figured I would use that
as a reason for experimenting with new build tools and techstacks. So I built this site
with <a href="https://nextjs.org/">next.js</a>, <a href="https://tailwindcss.com/">Tailwind CSS</a> and a bunch of other stuff, and spent a lot
of time implementing basic content management tooling and rendering.</p>
<p>However, once that was done, I realized that while I had learned a lot about React and next.js
in the process, I had not really created something that is fun to use, which reflected in my
reluctance to actually use it. Writing the post about <a href="/blog/2023-01-19-custom-steamdeck-buttons/">my custom SteamDeck buttons</a>,
yesterday really drove that point home again, and in fact kinda broke the camel&rsquo;s back for good 😅</p>
<p>So I decided to do what I&rsquo;d been meaning to do for a long time and finally took a look at <a href="https://gohugo.io/">Hugo</a>,
which I had seen used a lot by others for their blogs over the past years, and also its
<a href="https://github.com/adityatelange/hugo-PaperMod/">PaperMod theme</a> that I had seen on <a href="https://jugmac00.github.io/">Jürgen Gmach&rsquo;s website</a> (👋).</p>
<p>Color me extremely surprised when I had my page rebuilt within a couple of hours, with all the features I wanted and more, and a way nicer
experience for me as the content creator. I didn&rsquo;t even have to touch my posts that much, mostly some small changes on the frontmatter and boom, done.</p>
<p>So I went down the rabbit hole further, fine tuned some things, customized some others, and now I&rsquo;m really happy with the result.</p>
<p>And thus, please say hello to a new version of  <code>foosel.net</code>, now powered by Hugo and PaperMod.</p>
]]></content:encoded></item><item><title>Custom SteamDeck Buttons</title><link>https://foosel.net/blog/2023-01-19-custom-steamdeck-buttons/</link><pubDate>Thu, 19 Jan 2023 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2023-01-19-custom-steamdeck-buttons/</guid><description>Color coded for your convenience</description><content:encoded><![CDATA[<p><em><strong>Update from 2023-02-02</strong> To answer the most common question I&rsquo;ve gotten after publishing this right away: No, I do not plan on selling these. This is something I did for fun and out of love, I&rsquo;m not interested in making money off of it, and I frankly already have my hands full enough as is without adding a custom button business to the mix as well. I&rsquo;ve provided this write-up to give you an idea of how to do it yourself, and I hope you&rsquo;ll enjoy it.</em></p>
<p>My partner and I both got ourselves SteamDecks in 2022. Since then he&rsquo;s repeatedly mentioned that he&rsquo;d love to have
colored buttons on his, matching the XBox controller layout, as many PC games use these colors for their
button hints during quick time events and similar. But sadly, nothing like that is available yet.</p>
<p>With that in mind, and after losing my initial fear about opening up the deck thanks to swapping my fan and upgrading
my SSD on January 1st of this year, an idea for a surprise started to form in my head. I had watched a ton of videos
on silicone molding and resin casting, I have several 3d printers at my disposal, and there was just enough time left
in my vacation and until our anniversary to pull this off. So I went to work. In total secrecy.</p>
<h2 id="research--material-collection">Research &amp; material collection</h2>
<p>The first thing I jumped into was some research in order to be able to make a plan and know what to get.</p>
<p>I ran across <a href="https://bitbuilt.net/forums/index.php?threads/resin-casting-molding-buttons.2316/">this interesting thread</a>
on button casting which gave me a good idea of what I&rsquo;d need in terms of materials. It also taught me that I needed to
figure out what kind of mold I&rsquo;d even need to create for the buttons. Were they flat on the bottom in which case a single part
mold would suffice, or were they curved or otherwise featured, in which case I&rsquo;d need to create a two part mold? Instead of
disassembling my deck right away (too obvious with my partner being around) I decided to instead checkout
<a href="https://www.ifixit.com/Guide/Steam+Deck+Action+Buttons+(ABXY)+Replacement/148950">this excellent disassembly guide on iFixit</a>
which showed me that the buttons are indeed inset on the bottom, and so I&rsquo;d need a two part mold.</p>
<p>That in turn meant I needed to look into mold release for multi part silicone molds in addition to silicone and resin. The
material list in the thread sadly didn&rsquo;t help me - I couldn&rsquo;t get half of this stuff in Germany - but here&rsquo;s what I finally settled on:</p>
<ul>
<li><strong>Reschimica Silicone RPRO 30</strong> (silicone)</li>
<li><strong>Trollfactory Silicone Mold Separation Cream</strong> (two part mold release)</li>
<li><strong>clear two part epoxy resin</strong> (I got this from a friend who happened to have some collecting dust for several months, still sealed)</li>
<li><strong>food vacuumizer pump and container</strong> (to degass silicone and resin, based on an idea from <a href="https://hackaday.com/2019/12/19/degassing-epoxy-resin-on-the-very-cheap/">this hackaday article</a> - a real vaccum chamber and also a pressure pot would have been nice, but I didn&rsquo;t want to break the bank over a bunch of buttons here 😅)</li>
<li><strong>Mica powder</strong> (to color the resin)</li>
<li><strong>white 4mm rub on letters</strong> (to put the lettering on the buttons)</li>
<li><strong>clear UV resin</strong> (to seal the lettering in)</li>
<li><strong>wooden stir sticks</strong></li>
<li><strong>plastic mixing cups</strong></li>
<li><strong>small paper mixing cups</strong></li>
<li><strong>10ml syringes</strong> and <strong>14g blunt needles</strong> (for injecting the resin into the mold)</li>
<li><strong>plastillina clay</strong> (to fix the buttons during the silicone pour)</li>
</ul>
<p>Thanks to owning a resin printer, I already had <strong>a UV flashlight</strong>, <strong>nitrile gloves</strong> and a <strong>respirator</strong> on hand.</p>
<p>And at least one ready to go <strong>FDM 3d printer</strong> for helping me in the mold creation process.</p>
<p><img alt="Most of the materials and tools that I used for this project, as mentioned above." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/materials.jpg"></p>
<h2 id="creating-a-two-part-silicone-mold">Creating a two part silicone mold</h2>
<p>Next step was to create my two part silicone mold and for that I first needed something to fix the buttons to, do the pour for the first
part of the mold, flip that over and create the second part of the mold. I did some more research and came across two
interesting videos, <a href="https://www.youtube.com/watch?v=mjKAkul-VDQ">&ldquo;How To Make Custom PS5 Controller Buttons&rdquo;</a> and
<a href="https://www.youtube.com/watch?v=DfbIYH3xauc">&ldquo;Upgrade Your PS5 Controller with DIY Resin Buttons - Better than the Original!&rdquo;</a>.
In both, EJ uses a 3d printed box with custom bottom to hold the buttons in place and create a keyed two part mold. So, I did
create just that as well. My mold box consists of several parts: two halves forming the box, a bottom for the first part (creating the
keying), a smooth bottom and a top brace for the second part. The bottoms slot into the box halves, the top brace is just friction
fit. Why the top brace? To hold some toothpick halves in place that create channels for resin to go in and air to go out when the
mold is closed.</p>
<p>I designed all this in FreeCAD<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> and this is how it looks:</p>
<p><img alt="The mold box configuration for the first pour. Both halves and the keyed bottom." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/mold_case_part1.png"></p>
<p><img alt="The mold box configuration for the second pour. Both halves, the smooth bottom and the cross brace." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/mold_case_part2.png"></p>
<p>You can find the STLs <a href="https://www.printables.com/model/374098-steamdeck-button-mold-case">here</a>. All of the parts were printed
on my heavily modified Prusa MK3 with a 0.6mm nozzle and a 0.3mm layer height in black extrudr PLA NX2 - you might have to adjust
the tolerances on other printers or with other filaments, which is why I also included the FreeCAD file (which could be cleaner,
but it worked for me).</p>
<p>Once I had the mold box ready it was time to disassemble the deck and get the buttons in my hand. So I waited until my partner
was out of the house and then got going.</p>
<p>First, I disassembled everything based on the <a href="https://www.ifixit.com/Guide/Steam+Deck+Action+Buttons+(ABXY)+Replacement/148950">aforementioned iFixit guide</a>. I attached the buttons to their spots on the keyed bottom plate of the mold box with some thin, rolled clay wormy
dealies and then thoroughly cleaned them with some q-tips and isopropyl alcohol. It is important to be <em>very</em> thorough here - any
dirt or even just a fingerprint <em>will</em> show up in the silicone mold and thus in the resin casting as well. I actually found that
the outlines of the letters molded into the original buttons left an impression. The level of details you can get from silicone
molds is astonishing!</p>
<p>Also make sure that you keep the lettering of the buttons oriented the same way, that way you will also
be able to re-use the mold later for buttons with inlayed lettering (which is my plan for version 2.0 of this project).</p>
<p><img alt="The four action buttons mounted to the keyed mold case bottom. My hand hovering over them with a q-tip, a bottle of isopropyl alcohol in reach. In the background the disassembled deck." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/silicone_mold_step1.jpg"></p>
<p>I then slid the bottom plate into the grooves of the mold box halves, sealed the seam with some blue painters tape and just to be
safe also wrapped two rubber bands around it.</p>
<p><img alt="The assembled mold box for the first pour. The buttons are mounted to the bottom. The seems seasled with tape. Two rubber bands go around." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/silicone_mold_step2.jpg"></p>
<p>Now came the time for the first pour. I weighed out 35g each of part A and B into a plastic mixing cup (my silicone gave instructions for mixing 1:1 by weight, stick to your instructions!) and then thoroughly mixed
it with a stir stick. Then I poured that into a <em>second</em> cup, from high above, in a thin stream - this is first to get some of
the bubbles out but more importantly to prevent any unmixed silicone from getting into the mold. This cup I then degassed. For my
first pour I actually used a power sander to vibrate the bubbles out, but for the second pour I went with the above mentioned
food vacuumizer - it&rsquo;s easier, you get way less shaky hands out of it, and the results also look better. So, into the food container,
lid on, pump on. I degassed until bubbles stop coming out. Then I slowly poured the silicone into a corner of the mold
box, once again in a thin stream from up high. Take your time here, the slower, the less risk of errant bubbles making it into
the mold. Then I degassed the mold again for a couple minutes and let it cure based on the instructions.</p>
<p><img alt="The box filled with silicone after the first pour." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/silicone_mold_step3.jpg"></p>
<p>Next, I demolded the first part by removing rubber bands and the tape around the box and then carefully pulling the two halves
apart. I then slowly removed the bottom plate from the silicone part as well, being careful to keep the buttons inside<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.
I then cleaned them off of any leftover plastillina clay and any small bits of silicone.</p>
<p><img alt="The cured first part of the silicone mold, with the buttons still inside. The keying created by the bottom plate is visible." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/silicone_mold_step4.jpg"></p>
<p>After that I placed the first part of the mold on the smooth bottom plate and slid that back into the mold box. I then applied a
generous coating of two part mold release. I used an old drybrush for that and liberately spread it all across the silicone and
box surfaces, making extra sure to get into all the corners and creases. I taped the box seams again and then put the top brace
in place. I broke four toothpicks in half, also broke off most of their tips, and then inserted one into each of the brace holds,
pushing into opposite ends of the buttons underneath. This was to create channels for the resin to flow into and air to push
out of the mold.</p>
<p><img alt="The first part of the silicone mold placed back into the mold box. The cross brace is installed and two toothpick halves lead to each button." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/silicone_mold_step5.jpg"></p>
<p>I once again mixed 70g of silicone from 35g of each part A and B, moved into a second cup, degassed it and slowly poured it into
the mold. Then that was degassed as well and left to cure.</p>
<p><img alt="The mold box, once again filled with silicone, and placed in the vacuum container." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/silicone_mold_step6.jpg"></p>
<p>Another 5h later I carefully demolded my two part mold. I once again removed tape, rubber bands and the top brace, pulling out
the toothpick halves in the process. I then carefully pulled the two halves of the box apart again and equally carefully peeled
the two parts of the mold apart from each other.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> I could now remove the buttons, clean them, place them back into the deck and
reassemble it. Then I cut off some of the silicone bits that had been sucked into the internal hollow structure of the buttons
which I <em>did</em> not want to replicate. I was very diligent here to not cut away too much. And then I was the proud owner of a two
part silicone mold for SteamDeck action buttons.</p>
<p><img alt="The finished two part mold, visibly keyed and interlockable." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/silicone_mold_step7.jpg"></p>
<h2 id="resin-time-resin-time-do-do-do-do-resin-time">Resin time, resin time, do do do do, resin time</h2>
<p><em>Wear gloves and a respirator during this!</em></p>
<p>With the mold now ready for action, it was time to try my hand at resin casting. I first assembled the mold, securing the two
halves with four rubber bands. I also attached the mold to a piece of cardboard in the process on which I noted down the location
of each of the buttons inside the mold. This is really important to keep track of which button goes where. With everything being
mirrored thanks to the buttons basically lying on their faces in the mold you otherwise get terribly puzzled and end up with
buttons of the wrong color. Ask me how I know 😅 If you get confused on which button is which, take a close look at the
spaces they left in the mold. The B button of the deck is slightly curved on its outer side due to following the deck&rsquo;s case
curving, and that has helped me a ton to keep track of it and everything else in relation to it.</p>
<p>Next, I mixed up 40ml of resin, so 20ml of each part A and B (my resin gave instructions for mixing 1:1 by volume, check your
instructions!). I degassed it in the vacuum container and then spread it across
four small paper cups, roughly 10ml each. I then added red, greed, blue and yellow mica powder to each of the cups, mixing that
in thoroughly, before placing the cups into the vacuum container and degassing them again. Next, four syringes with blunt 14g
needles were filled with the four colors of resin and then the buttons were filled with the respective color. After getting
confused with the colors on my first try, I double and triple checked each color before filling it in on the second. I carefully inserted
the needle into the inner channel and then slowly pressed the resin in until it came out of the outer channel. On my first
try I made the mistake to overfill, which caused some unintentional color mixing, so be sure to really stop right when the
resin comes out of the air channel.</p>
<p><img alt="The button mold filled with the colored resin, the four small paper cups holding the unused resin sitting next to it in an aluminium tray." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/resin_cast_step1.jpg"></p>
<p>I then let the buttons cure for 24h before taking a first peek.</p>
<p><img alt="The buttons after 24h of curing." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/resin_cast_step2.jpg"></p>
<p>They looked great, but a quick fingernail test on one of the resin pots showed the stuff was not fully hardened yet. It turned
out to take 72h until I could proceed with the finishing steps.</p>
<h2 id="finishing-the-buttons">Finishing the buttons</h2>
<p>I kept the buttons attached to the mold for the final steps, as that helped a lot with keeping everything aligned and
less fiddly (it was fiddly enough as is). I carefully placed the sheet with rub on lettering I had bought over each button,
making sure to center the corresponding letter. Then I rubbed the letter on using the blunt tip of my letter opener. The stuff
didn&rsquo;t want to stick to the smooth top surface very well, which had the upside of allowing me to redo something if I messed up, but also
the downside of me having to be <em>very</em> careful to not mess things up that were already fine. In the end, it took me some tries
but I prevailed.</p>
<p>Then I got out the UV resin, put on the respirator and gloves, and with an old brush softly brushed on a thin layer of
resin on each button, careful not get any drops on the side or pooling, but sealing in the letter. I then cured that for several minutes
with the UV flashlight.</p>
<p>Once the resin was cured I carefully pulled out the buttons from the mold and then cut off the sprue with a flush cutter.</p>
<p><img alt="The four custom buttons sitting on a post-it note." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/finished_buttons1.jpg"></p>
<p>A quick test fit in my deck showed that I needed some light sanding on one side of X, but that was quickly taken care of and
then I had a working set of custom SteamDeck buttons 👍</p>
<p><img alt="Colorful custom action buttons on the right side of a SteamDeck held up to the camera." loading="lazy" src="/blog/2023-01-19-custom-steamdeck-buttons/finished_buttons2.jpg"></p>
<h2 id="where-do-we-go-from-here">Where do we go from here?</h2>
<p>Considering that until Monday January 9th 2023 I had never before touched silicone or epoxy resin, and that by Monday January 16th 2023 I had four self-cast SteamDeck buttons in my hand that while far from perfect looked <em>great</em>, I&rsquo;m <em>very</em>
happy with the result. And the same goes for my partner, who really had absolutely no idea of this until I presented him the
finished buttons on our anniversary. He was and is in awe 😊</p>
<p>However, single colored buttons with rubbed on letters sealed in with UV resin is not my end goal here. After seeing the amazing results one can
achieve with inlaying in EJ&rsquo;s videos, I&rsquo;m really looking forward to trying that out. So the next step will be to cast some inlayed buttons
with the same mold. And I have already printed out the letters on my resin printer 😁</p>
<p><em><strong>Update from 2024-02-14</strong>: The buttons have now been in <strong>very heavy</strong> use by my partner for over a year, and they still look the same as on day 1! No changes on the letters that I rubbed on and sealed with UV resin, and no changes on the buttons themselves either. 👍</em></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>To be more precise, FreeCAD Link Branch version 2022.09.07&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>If one of the buttons slips out of the mold, you can just press it back in. Just make sure it really slots right back in
where it was, same orientation, full depth and everything. I actually had to do this a bunch of times due to the mold making
stretching over several days due to some issues (see next footnote), and having to reassemble the deck in between to keep
the project a secret from my partner. As a consequence, I can now disassemble and reassemble the deck down to the buttons in
around 20min without the guide 😄&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I actually had to do the second pour thrice: The first time I didn&rsquo;t create the channels with toothpicks, thinking I could
punch them out afterwards - I couldn&rsquo;t. That led to the creation of the top brace. I then made the mistake to further secure the
toothpicks with superglue, which seems to have interacted with the curing process and caused the top layer of the silicone pour
to stay soft, smeary and sticky. So I did it a third time, exactly as described above, just relying on the friction fit of the
toothpicks, and this time everything cured as expected and I had usable channels 😅&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>TFA Dostmann meets ESPHome</title><link>https://foosel.net/blog/2022-01-03-tfa-dostmann-meets-esphome/</link><pubDate>Mon, 03 Jan 2022 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2022-01-03-tfa-dostmann-meets-esphome/</guid><description>Integrating a CO2 sensor into my HA setup</description><content:encoded><![CDATA[<p>I attended RC3 from December 27th until December 30th. While it was (once again)
only a virtual edition of the Chaos Communication Congress, at least this time
around I managed to have a similar experience to 36c3, as in, I spent the last two days
mostly hanging out with a bunch of fellow geeks in a fun location (a jitsi conference
that also included a camera pointing at an aquarium full of fish) and nerding out
while tinkering around with electronics.</p>
<p>And thus I finally integrated the CO2 sensor unit I bought a couple weeks ago into
my Home Automation setup, with the help of a Wemos D1 Mini and <a href="https://esphome.io">ESPHome</a>. At first
I went with an ESP12, a voltage regulator and a <a href="https://github.com/schinken/esp8266-co2monitor">different firmware</a>,
but that didn&rsquo;t work out due to the ESP not wanting to behave (my guess is I didn&rsquo;t wire the barebone module
up correctly or the voltage regulator was causing issues) and I also got some weird readings
reported by the firmware (20k ppm CO2 - I know the air in my office can get bad after a couple of hours of
coding, but not THAT bad).</p>
<p>The CO2 sensor is an &ldquo;AIRCO2NTROL MINI&rdquo; from TFA Dostmann, but it is also available under other names
with a very similar case and more or less the same internals, as I learned from the
<a href="https://esphome.io/components/sensor/zyaura.html">ESPHome docs</a>. Where my Dostmann edition seems to differ from the majority is the
pin order of the internal debug port, which turned out to have CLK and DATA swapped
in my case, which caused me quite the headache and a bit of frustration. So just for future reference,
the pin order I found in my device is 5V - Data - CLK - Gnd from left to right with the hose to the left:</p>
<p><img alt="The pinout of the sensor&rsquo;s debug port, 5V - Data - CLK - Gnd" loading="lazy" src="/blog/2022-01-03-tfa-dostmann-meets-esphome/tfa-dostmann-pinout.jpg"></p>
<p>I hooked these up to the Wemos D1 Mini (clone) like this:</p>
<p><img alt="A wiring diagram of how to hookup the Wemos D1 mini to the debug port, 5V to 5V, Gnd to Gnd, Data to D1 and CLK to D2" loading="lazy" src="/blog/2022-01-03-tfa-dostmann-meets-esphome/tfa-dostmann-wemos-d1-wiring.png"></p>
<p>So 5V to 5V, Gnd to Gnd, Data to D1 and CLK to D2.</p>
<p>The ESPHome config I then flashed to the D1 is the following:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">esphome</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">name</span>: <span style="color:#ae81ff">dostmann-office</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">platform</span>: <span style="color:#ae81ff">ESP8266</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">board</span>: <span style="color:#ae81ff">d1_mini</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">logger</span>:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">mqtt</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">broker</span>: !<span style="color:#ae81ff">secret mqtt_iot_broker</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">ota</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">password</span>: !<span style="color:#ae81ff">secret ota_pass</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">wifi</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">ssid</span>: !<span style="color:#ae81ff">secret wifi_iot_ssid</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">password</span>: !<span style="color:#ae81ff">secret wifi_iot_pass</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">ap</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">ssid</span>: <span style="color:#e6db74">&#34;Dostmann Office Fallback&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">password</span>: !<span style="color:#ae81ff">secret fallback_pass</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">power_save_mode</span>: <span style="color:#ae81ff">high</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">captive_portal</span>:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">sensor</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">platform</span>: <span style="color:#ae81ff">zyaura</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">clock_pin</span>: <span style="color:#ae81ff">D2</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">data_pin</span>: <span style="color:#ae81ff">D1</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">co2</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">name</span>: <span style="color:#e6db74">&#34;Office Dostmann CO2&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">temperature</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">name</span>: <span style="color:#e6db74">&#34;Office Dostmann Temperature&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">platform</span>: <span style="color:#ae81ff">wifi_signal</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">name</span>: <span style="color:#e6db74">&#34;Office Dostmann WiFi Signal&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">update_interval</span>: <span style="color:#ae81ff">60s</span>
</span></span></code></pre></div><p>(If you are wondering about the <code>!secret</code> stuff, those values are contained in
a <code>secret.yaml</code> file in my esphome folder, and you can read all about that
<a href="https://esphome.io/guides/faq.html#tips-for-using-esphome">in the ESPHome docs here</a>.)</p>
<p>And with that I could now see the sensor in my Home Assistant instance and forward the data
easily to my InfluxDB &amp; Grafana monitoring stack.</p>
<p>To put everything together physically, fully contained, I used <a href="https://www.thingiverse.com/thing:4225732">this alternative backplate</a>
by Stefan Kern.</p>
<p><img alt="The alternative backplate in place, closing up the sensor and containing the Wemos D1 Mini as well" loading="lazy" src="/blog/2022-01-03-tfa-dostmann-meets-esphome/tfa-dostmann-back.jpg"></p>
<p>However, I&rsquo;ve noticed a temperature increase of around 3°C with it and the ESP
in place, and I fear this might be screwing with the CO2 sensor&rsquo;s calibration (as the measurement
is temperature sensitive). I already mitigated this a bit by setting the chip to power save and adding some strategically placed aluminium tape,
but that&rsquo;s only improved things slightly. Due to that I plan to redesign the
backplate to have the ESP outside the sensor case, in its own compartment. I
hope that will solve the &ldquo;running hot&rdquo; issue for good then, but we&rsquo;ll see.</p>
<p><em>Update from January 27th 2022</em> I redesigned the backplate and now have a solution that seems to work better, based on the reported temperature and CO2. <a href="https://www.prusaprinters.org/prints/119968-airco2ntrol-mini-backplate-with-wemos-d1-mini">I&rsquo;ve published it here</a>.</p>
<p>In any case, for now I at least got a reliable indicator of my office&rsquo;s CO2 levels that also now
are trackable long term, and I have also forwarded the current values to my <a href="https://awtrixdocs.blueforcer.de/">AWTRIX mini</a>
via some NodeRED flow that also takes care of color coding. Further possibilities include
flashing the office lights or some audio cues, should just the visual warning turn out
to be insufficient in the long term 😉</p>
<p><img alt="CO2 sensor data graphed over two days" loading="lazy" src="/blog/2022-01-03-tfa-dostmann-meets-esphome/grafana-co2.png"></p>
]]></content:encoded></item><item><title>Being patient with yourself is hard</title><link>https://foosel.net/blog/2021-09-28-being-patient-with-yourself-is-hard/</link><pubDate>Tue, 28 Sep 2021 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2021-09-28-being-patient-with-yourself-is-hard/</guid><description>What a knee surgery taught me about myself</description><content:encoded><![CDATA[<p>I&rsquo;ve been having knee issues all my life. I can&rsquo;t remember a time when the occasional pain, stiffness and crunchy noises in both knees weren&rsquo;t part of my regular experience. The past three years however the left knee got a ton worse, frequently hurting for days on end, getting hot, and overall just being a literal pain. That is why earlier this year I finally decided, enough is enough, got another opinion from my orthopedist and we scheduled a key hole surgery to fix what was suspected to be a very active plica syndrome. This surgery happened on September 20th and it made me learn a LOT about myself.</p>
<p>I went into this knowing that I&rsquo;d be immobilised for a few days, that I&rsquo;d need crutches, that there&rsquo;d be pain and also several weeks of physical therapy following the surgery. What I did not expect was how <em>utterly</em> impatient I would be with myself.</p>
<p>See, this was the first surgery I ever had as a conscious person. I did have two minor ear surgeries as a toddler, at two and four years of age, and while both of them make for my earliest (and quite scary) memories, I don&rsquo;t have any feeling on how long recovery took, what it entailed and so on. And in any case, that wouldn&rsquo;t have allowed me to judge what I was looking at with a knee surgery anyhow. I had read up on this of course. How I could expect full weight bearing of my leg by day two or three, and how I was even encouraged to try to really use it again right after. That there would be some swelling for a few days. In my mind this resulted in &ldquo;I&rsquo;ll be back on my feet with everything working in no time&rdquo;.</p>
<p>Colour me surprised when I woke up from anesthesia to a ridiculous amount of pain, the inability to lift the leg, swelling beyond expectation and the information that there had been a so far undetected meniscus tear that had since scarred over. And thus began a journey of self discovery 😅</p>
<p>What this experience taught me has been eye opening. It turns out I have next to no patience with myself. Consciously I understood that the knee would need time to recover, that the swelling would not come down one day to the next and that I&rsquo;d have to give myself time to heal. But at the back of my head almost immediately I started judging myself and falling short of my expectations. Here I am, a week post surgery, and feeling bad for still preferring to have my crutches in reach even though the leg is fully weight bearing again simply because walking without them feels utterly unstable and outright hurts too after one too many attempts at pushing myself. Here I am fretting over the inability to achieve full motion in the leg again even though it has gotten better day after day and I have been taking small milestones all the time. And here I am growing increasingly annoyed by my general reliance on help.</p>
<p>This surgery made me discover a new flaw for good that I had suspected to be there for a long time. I&rsquo;m utterly impatient with myself. I have absolutely no problem with other people taking all the time they need to recover, to heal, to work through a problem, but when it comes to myself I have such high expectations that I&rsquo;m absolutely bound to fail them and get frustrated by that. I&rsquo;ve pushed myself through bad times before - my mental health did not thank me but yielded and I made it work somehow. My body however is <strong>not</strong> taking this kind of crap from me and showing me some <em>strong</em> boundaries right now, and that is an utterly humbling learning experience.</p>
<p>I wouldn&rsquo;t say you should get yourself a knee surgery, because frankly this experience so far sucks a lot. But if you do, take it as a chance to practice patience with yourself. It&rsquo;s what I&rsquo;m now seeing myself forced to do and it was long overdue.</p>
]]></content:encoded></item><item><title>Hydroponics the Kratky way</title><link>https://foosel.net/blog/2021-09-12-hydroponics-the-kratky-way/</link><pubDate>Sun, 12 Sep 2021 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2021-09-12-hydroponics-the-kratky-way/</guid><description>How I found myself with way too much Basil on my hands</description><content:encoded><![CDATA[<p>Since my partner loves spicy food, earlier this year I got us a chili growing kit. What was meant as an experiment has since become a full blown pepper growing operation that has taken over my livingroom window sills and half the balcony and already yielded its first fruits. And because whenever I try something new I also tend to do way too much research on it, while getting the plants started the normal way in soil (and then promptly running into the first issues with fungus gnats) I started to look deeper into <a href="https://en.wikipedia.org/wiki/Hydroponics">hydroponics</a>.</p>
<p>I had heard of this approach before: growing plants in an inert grow medium instead of soil and feeding them with controlled nutrient solutions pumped around the roots. It&rsquo;s a fascinating rabbit hole to go down and it always tickled my interest (especially given the automation and sensoric evaluation possibilities), however it also felt way too involved to get started with unless I had some more actual space and some actual need to grow plants, what with all the lights and pumps and pipe systems that I saw associated with it. That is, until I came across the <a href="https://en.wikipedia.org/wiki/Kratky_method">Kratky method</a>.</p>
<p>The Kratky method is a pretty much passive approach to hydroponics. The idea is simple: you take an opaque container for your nutrient solution, cut a bunch of holes in the lid and then place your plants into netpots or similar in those holes so their roots reach into the solution. So far, so similar to the <a href="https://en.wikipedia.org/wiki/Deep_water_culture">Deep Water Culture</a> approach. But instead of now aerating the solution with an aquarium air stone or similar to give your roots the oxygen they need, you instead simply allow the level of your nutrient solution to drop, creating an air gap and leaving parts of the roots hanging in the air. That way the roots can get nutrients but can also breathe (which is important so they don&rsquo;t rot). You&rsquo;ll have to fill up the solution a bit if needed (always leaving an airgap), but apart from that the whole setup is completely self managed. No power needed, no moving parts. And easily set up in something as small as a mason jar.</p>
<p>This was intriguing to me, and I had wanted to try my luck with growing some basil and oregano for pizza and such anyhow, so I decided to give this approach a shot. I ordered a kitchen herb seed kit, some 1l mason jars, some rock wool cubes (as growing substrate) and some hydroponic fertilizer. Then I fired up FreeCAD and designed a small lid with integrated rock wool cube holder (STL <a href="quattro_stagioni_kratky_1l_36mm.v2.stl">here</a>, FreeCAD file <a href="quattro_stagioni_kratky_1l.FCStd">here</a>), printed a bunch of them and then went to work.</p>
<p><img alt="The lid design with rock wool cube holder in FreeCAD" loading="lazy" src="/blog/2021-09-12-hydroponics-the-kratky-way/lid-design.png"></p>
<p>The seeds were planted in the rock wool cubes, watered and then I waited. The first green soon showed up and thus I transferred the cubes into their holders, filled the jars with 1l water plus the recommended fertilizer amount (thus creating a nutrient solution) and then put the lids on. The cubes sat right in the solution and thus were kept watered. To keep light out of the container (to prevent algae growth and also to not have everything heat up so much) I simply wrapped some aluminium foil around the jars. If I&rsquo;m honest this was just meant as a temporary solution until I got around to sewing a little cover out of some light blocking fabric I have on hand, but I still haven&rsquo;t gotten around to do that and the foil works just fine 🤷‍♀️</p>
<p><img alt="The two baby Basil plants at the start of their Krakty journey" loading="lazy" src="/blog/2021-09-12-hydroponics-the-kratky-way/start.jpg"></p>
<p>That was on July 18th and since then I&rsquo;ve been able to witness some astonishing growth, especially on the Basil. Have a look at the progress:</p>
<p><img alt="Progress on July 27th, the two plants are around 5cm high." loading="lazy" src="/blog/2021-09-12-hydroponics-the-kratky-way/progress-07-27.jpg"></p>
<p><img alt="Progress on August 4th, around 12-15cm high." loading="lazy" src="/blog/2021-09-12-hydroponics-the-kratky-way/progress-08-04.jpg"></p>
<p><img alt="Progress on August 14th, around 20-25cm in height." loading="lazy" src="/blog/2021-09-12-hydroponics-the-kratky-way/progress-08-14.jpg"></p>
<p><img alt="Progress on August 27th, more than 30cm high." loading="lazy" src="/blog/2021-09-12-hydroponics-the-kratky-way/progress-08-27.jpg"></p>
<p><img alt="Progress on September 10th, the plants are now around 50cm height each." loading="lazy" src="/blog/2021-09-12-hydroponics-the-kratky-way/progress-09-10.jpg"></p>
<p>As of today, both Basil plants had reached a plant height of around 50cm. The Oregano also looks healthy, but sadly I accidentally got hold of a hanging variant, making everything a bit tricky in this setup 😅</p>
<p>Sadly, I had to emergency-harvest one of the Basil&rsquo;s today. While topping up the nutrient solution the other day I noticed the roots to be way darker than they should be. They didn&rsquo;t look particularly healthy. Some of the leaves also started to look a tad unhappy. I came to the conclusion that I might have caught myself some root rot on this plant. Doing some research I learned that with the Kratky method, if you grow for longer than 4-6 weeks you really should occasionally replace the nutrient solution completely and clean the container to keep bacteria from taking root in your roots (pun not intended). I guess this is what happened here. I tried to save the plant with a 2:1 water and 3% hydrogen peroxide bath yesterday, but either it was already too late or that was too much stress. This morning the leaves were hanging and the whole plant looked quite sorry so I decided it was time to harvest and now I have a jar of fresh pesto verde.</p>
<p><img alt="One small jar of freshly made pesto" loading="lazy" src="/blog/2021-09-12-hydroponics-the-kratky-way/pesto.jpg"></p>
<p>Further reading revealed that it&rsquo;s apparently an option to add a teeny tiny amount of 3% hydrogen peroxide to the nutrient solution itself to help keep any unwelcome guests away (and also help with aeration), so I&rsquo;ve now added 0.5ml to my freshly topped off jar of the other Basil and hope that won&rsquo;t do harm but rather good. Wish me luck 😉</p>
<p>All in all, I call this whole first dabbling with hydroponics a great success. The Kratky method allowed me to get up and running quickly without huge investments and space requirements, and the results were amazing. I&rsquo;ve also now planted some peppermint seeds and they are already sprouting, so my hopes are high for some amazing fresh teas later this fall! If you&rsquo;ve always wanted to experiment with hydroponics but it always felt way too involved, maybe take a look at the Kratky method 😊</p>
]]></content:encoded></item><item><title>A debugging story</title><link>https://foosel.net/blog/2021-05-09-a-debugging-story/</link><pubDate>Sun, 09 May 2021 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2021-05-09-a-debugging-story/</guid><description>Could this bug for once not be my fault?</description><content:encoded><![CDATA[<p>About a week ago I got a new <a href="https://github.com/OctoPrint/OctoPrint/issues/4117">bug report</a> on <a href="https://octoprint.org">OctoPrint&rsquo;s</a> issue tracker:</p>
<blockquote>
<p><strong>GCode Viewer Visualisation Problem</strong></p>
<p><em>The problem</em></p>
<p>The visualisation in GCode viewer ist not correct. The print is OK.
See gcode file (zip) on Layer 43 to 47 and 49</p>
<p>And screenshot</p></blockquote>
<p>You already saw the included screenshot, and it shows that there was a spike being visualized in the GCode Viewer that
wasn&rsquo;t actually there. My first attempt at reproduction failed spectacularly &ndash; the file looked exactly like
it was supposed to. Then I noticed that the OP was using Google Chrome however (adding the detected user agent
to the system information contained in OctoPrint&rsquo;s new System Info Bundles already paid off!) and tried with that
instead of my usual Firefox, and lo and behold, I saw the issue.</p>
<p>Scrolling a bit through the file revealed further defects, as also mentioned by the OP, e.g. this one:</p>
<p><img alt="Another defect, this time a whole part of the outline is being misplaced" loading="lazy" src="/blog/2021-05-09-a-debugging-story/issue_4117_2.png"></p>
<p>At this point it was clear that this was a Chrome-only issue. But was it a bug in OctoPrint or possibly a browser
bug? More information for that was needed but not readily available, and the file was also too big to quickly
gleam anything from the GCode itself that could possibly help to narrow down on the problem.</p>
<p>So the first step was to create a minimal GCode file that showed the same error. For this I took a look at
the reported layer height in the viewer on the layer a defect was visible and then narrowed down on the affected lines
by using the horizontal command sliders to further limit the view. That way I quickly found that these were the
problematic lines:</p>
<pre tabindex="0"><code class="language-gcode" data-lang="gcode">G1 X173.595 Y103.9 E247.16716
G3 X173.600 Y126.097 I-105613.507 J39.645 E248.20080
G1 X169.552 Y126.098 E248.38933
</code></pre><p>More specifically, the error was caused by the contained <a href="https://reprap.org/wiki/G-code#G2_.26_G3:_Controlled_Arc_Move"><code>G3</code> command</a>,
which instructs the printer to move in a counter clockwise arc
from its current position to the given X and Y coordinates, with the center of said arc offset by the given I and J
parameters. In the case of these lines, that meant to move in an arc from <code>(173.595, 103.0)</code> to <code>(173.600, 126.097)</code>
with the arc&rsquo;s center at <code>x = 173.595 + (-105613.507) = -105439.912</code> and <code>y = 103.9 + 39.645 = 143.54500000000002</code>.
Or in other words, a rather short arc with an enormous radius of over 105m that was more a straight line than
an arc really. And that line was being drawn too long, causing the weird spike in the rendition.</p>
<p>In order to understand how that could happen however we need to take a look at how the GCode viewer is implemented and how
arcs work in that implementation. At its core, the GCode viewer is an HTML5 2D canvas on which the path described in
a GCode file gets drawn. Commands like <code>G0</code> and <code>G1</code> that describe straight lines are drawn using <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineTo"><code>lineTo</code></a>,
arcs as described by <code>G2</code> and <code>G3</code> are drawn using <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/arc"><code>arc</code></a>.</p>
<p><code>arc</code> takes six parameters: the <code>x</code> and <code>y</code> coordinate of the center of the arc, the radius <code>r</code>, the <code>startAngle</code> determining from which angle to start
drawing the arc and the <code>endAngle</code> until which to draw the arc, and a flag that&rsquo;s <code>true</code> for counter clockwise and <code>false</code> or empty for clockwise.
It is obvious this doesn&rsquo;t directly translate to the data contained in the GCode itself, where we rather have three points defining the arc &ndash; a start
point, and end point, and the arc&rsquo;s center. So we need to translate this into the data required by the <code>arc</code> method. Using some trigonometry,
that is fairly straightforward:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-js" data-lang="js"><span style="display:flex;"><span><span style="color:#75715e">// given: G2/G3 X&lt;endX&gt; Y&lt;endY&gt; I&lt;i&gt; J&lt;j&gt;, &lt;startX&gt;, &lt;startY&gt;
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">arcX</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">startX</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">i</span>;
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">arcY</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">startY</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">j</span>;
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">r</span> <span style="color:#f92672">=</span> Math.<span style="color:#a6e22e">sqrt</span>(<span style="color:#a6e22e">i</span> <span style="color:#f92672">*</span> <span style="color:#a6e22e">i</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">j</span> <span style="color:#f92672">*</span> <span style="color:#a6e22e">j</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">startAngle</span> <span style="color:#f92672">=</span> Math.<span style="color:#a6e22e">atan2</span>(<span style="color:#a6e22e">startY</span> <span style="color:#f92672">-</span> <span style="color:#a6e22e">arcY</span>, <span style="color:#a6e22e">startX</span> <span style="color:#f92672">-</span> <span style="color:#a6e22e">arcX</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">endAngle</span> <span style="color:#f92672">=</span> Math.<span style="color:#a6e22e">atan2</span>(<span style="color:#a6e22e">endY</span> <span style="color:#f92672">-</span> <span style="color:#a6e22e">arcY</span>, <span style="color:#a6e22e">endX</span> <span style="color:#f92672">-</span> <span style="color:#a6e22e">arcX</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">ccw</span> <span style="color:#f92672">=</span> (<span style="color:#a6e22e">command</span> <span style="color:#f92672">===</span> <span style="color:#e6db74">&#34;G3&#34;</span>)
</span></span></code></pre></div><p><img alt="The parameters and their relation" loading="lazy" src="/blog/2021-05-09-a-debugging-story/drawing.png"></p>
<p>My first guess was that the result of this conversion was somehow different between Firefox and Chrome, and so I modified the GCode viewer to log
the calculated values and then compared the two outcomes. The values were completely identical between both browsers, so what was being fed
into the canvas <code>arc</code> command was identical and yet produces different results. Why?</p>
<p>My next approach was to add some more visual debug output to the viewer itself. I modified it such that the arc parameters as calculated would
actually be drawn on the canvas as well, in form of a geometrical pizza slice showing the arc&rsquo;s center, its &ldquo;legs&rdquo; and its rim. And this is where
I saw a difference in the rendered output. Where in Firefox the arc&rsquo;s rim and its legs met perfectly:</p>
<p><img alt="The arc in Firefox is rendered correctly" loading="lazy" src="/blog/2021-05-09-a-debugging-story/arc_ff.png"></p>
<p>in Chrome the rim overshot:</p>
<p><img alt="The same arc in Chrome is rendered wrong" loading="lazy" src="/blog/2021-05-09-a-debugging-story/arc_chrome.png"></p>
<p>So while the calculated parameters were correct and in both cases provided to the <code>arc</code> method just the same, Chrome was rendering the wrong segment length!</p>
<p>I suspected a rounding error and thus started searching for matching reports from other people. I couldn&rsquo;t find a specific bug report, but I came across a post on Stack Overflow that sounded mightily familiar: <a href="https://stackoverflow.com/questions/8603656/html5-canvas-arcs-not-rendering-correctly-in-google-chrome">HTML5 canvas arcs not rendering correctly in Google Chrome</a>, from 2011. A ten year old post&hellip; could it be?</p>
<p>Honestly, I still do not know if this indeed described the same issue or not, or if there&rsquo;s a Chrome ticket describing this behaviour &ndash; I&rsquo;ll continue to look, but first and foremost I was focused on fixing this problem in OctoPrint&rsquo;s GCode viewer. The Stack Overflow post provided a code snippet that reimplements <code>arc</code> utilizing bezier curves, and so I gave this a try. Long story short, OctoPrint&rsquo;s GCode Viewer as part of version 1.7.0+ will ship with a Chrome-only <code>arc</code> replacement that will be enabled by default, but can also be disabled in real time, with great effect:</p>
<p><img alt="Enabling and disabling the arc workaround makes the defects disappear and reappear" loading="lazy" src="/blog/2021-05-09-a-debugging-story/arc_fix.gif"></p>
<p>And the moral of the story: It rarely is a browser bug. But sometimes, all signs say it indeed <em>is</em> and a workaround is the easiest solution.</p>
]]></content:encoded></item><item><title>Homelab uplink monitoring</title><link>https://foosel.net/blog/2021-03-28-homelab-uplink-monitoring/</link><pubDate>Sun, 28 Mar 2021 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2021-03-28-homelab-uplink-monitoring/</guid><description>Keeping an eye on my ISP&amp;#39;s performance</description><content:encoded><![CDATA[<p>For a bit more than two years now I&rsquo;ve been closely monitoring my network uplink. In the past I had a ton of issues with up- or download speeds not being what I paid for, packet loss issues and outright full blown outages. In order to put myself into a better position when reaching out to the ISP&rsquo;s support hotline I figured it would be good to be able to proof not only the existence of these issues but to also be able to determine the exact times they happened at and also to verify and show that in fact it was only external connections that were suffering and it was not an issue with my own internal network. Given that I don&rsquo;t trust the cable modem/router they force on me to be my edge router and instead have my own Unifi gear set up behind it (considering anything not exclusively under my control to be part of the hostile public internet) this otherwise will usually lead to endless attempts to blame my LAN when in fact the issue lies outside of my reach.</p>
<p>I already had an <a href="https://www.influxdata.com/">InfluxDB</a> and <a href="https://grafana.com/">Grafana</a> setup running anyhow for my <a href="https://home-assistant.io/">Home Assistant instance</a> to dump values from my home climate sensors into, so it was a logical next step to simply add some additional sensors to the mix.</p>
<h2 id="throughput">Throughput</h2>
<p>I currently run a speed test of the network throughput every 20min and log the results via MQTT into InfluxDB. I had to find out that neither the speed test integration in Home Assistant nor the official speedtest-cli tool were performing reliably enough for this &ndash; I was constantly getting dips in measured throughput and thus alerts, even when everything was completely fine with my uplink.</p>
<p>I solved this by turning to <a href="https://github.com/nelsonjchen/speedtest-rs">speedtest-rs</a> and a small shell script that parses the output and pushes it into MQTT to Home Assistant, which then processes it further for some visualization right on my dashboard but also forwards it further into InfluxDB. You can find the <code>Dockerfile</code> and the script plus some further info <a href="https://gist.github.com/foosel/ef98a5774d1a495ab3781eba8a157fee">in this gist</a>.</p>
<p>In Grafana I then use this data to provide me with some single stat panels for the current downstream, upstream and ping values as well as the averages over the selected time range:</p>
<p><img alt="Some single stat panels show current and average down- and upstream speed and measured ping" loading="lazy" src="/blog/2021-03-28-homelab-uplink-monitoring/currentspeed.png"></p>
<p>Additionally, I also plot the down- and upstream speed in a timeline, together with the current bandwidth consumption as extracted by Home Assistant from my ISP&rsquo;s cable modem/router (thanks to the <a href="https://www.home-assistant.io/integrations/fritzbox_netmonitor/">Fritzbox NetMonitor integration</a>). Together, this gives me a good picture of whether there is actually an issue when I see a dip in the measured values, or if it&rsquo;s just too high bandwidth utilization:</p>
<p><img alt="A graph showing measured up- and downstream speed vs consumed up- and downstream bandwidth utilization" loading="lazy" src="/blog/2021-03-28-homelab-uplink-monitoring/bandwidth.png"></p>
<p>You can see in these screenshots that I recently upgraded my plan with my ISP &ndash; from 200/20 to 500/50 MBit. The problem: The speedtest run by my monitoring setup doesn&rsquo;t hit the 500 mark, whereas running a manual test on speedtest.net works just fine. Looking at the <code>speedtest-rs</code> README it becomes apparent that this is a known issue with the legacy (open) Speedtest.net API:</p>
<blockquote>
<p>This tool currently only supports <a href="http://www.ookla.com/support/a84541858">HTTP Legacy Fallback</a> for testing.</p>
<p>High bandwidth connections higher than ~200Mbps may return incorrect results!</p>
<p>The testing operations are different from socket versions of tools connecting to speedtest.net infrastructure. In the many FOSS Go versions, tests are done to find an amount of data that can run for a default of 3 seconds over some TCP connection. In particular, <code>speedtest-cli</code> and <code>speedtest-rs</code> tests with what Ookla calls the <a href="http://www.ookla.com/support/a84541858">&ldquo;HTTP Legacy Fallback&rdquo;</a> for hosts that cannot establish a direct TCP connection.</p></blockquote>
<p>I fear I might have to look into reimplementing the current speedtest-to-mqtt setup with another container utilizing the official (and sadly proprietary) Speedtest CLI tool to mitigate this issue. Thankfully, it should be quite easy to build a drop-in replacement thanks to the modularization in effect.</p>
<p><em>Update from March 30th 2021</em> I&rsquo;ve now done that and <a href="https://gist.github.com/foosel/70ecbeade55cc852dbc0a4f7c4040adc">here&rsquo;s an updated gist</a> that works identically to the <code>speedtest-rs</code> approach, but instead utilizes <a href="https://www.speedtest.net/apps/cli">Ookla&rsquo;s official command line tool</a>. The results are stable numbers that reflect the expected bandwidth and also match the web based test results.</p>
<p><em>Update from March 31st, 2021</em> I wasn&rsquo;t too happy with running a proprietary tool for my speed testing, went looking for an OSS alternative, came across <a href="https://librespeed.org/">librespeed</a> and therefore have now <a href="https://gist.github.com/foosel/f7d9a08c0445454ab90d6c4974a9e316">replicated the setup again using that</a>. You might want to experiment a bit to find a server close to you and define that via <code>--server &lt;id&gt;</code>, the auto discovery appears to be a bit wonky. Or just use your own server list via <code>--server-json</code> or <code>--local-json</code>.</p>
<h2 id="latency-and-packet-loss">Latency and packet loss</h2>
<p>In addition to the available up- and downstream speeds, I constantly monitor latency and packet loss to a selected number of hosts both external and internal to my network as well. For this I ping some public DNS servers (Google, Cloudflare and Quadnine) and some of my own vservers for the remote side, and the ISP&rsquo;s Fritzbox, my managed network gear and internal servers for the LAN side. I used to do this via <a href="https://oss.oetiker.ch/smokeping/">Smokeping</a>, but when I set up my InfluxDB/Grafana stack I wanted to find a solution to have everything together in one place.</p>
<p>Thankfully I almost immediately found <a href="https://hveem.no/visualizing-latency-variance-with-grafana">this post by Tor Hveem</a> who solved this with a little custom Go tool to run <code>fping</code> against a number of configurable hosts and push the results right into InfluxDB. This was exactly what I wanted and thus I replicated the outlined setup, albeit with a slightly different color scheme.</p>
<p>I use a <a href="https://github.com/nickvanw/infping">modified version of Tor&rsquo;s <code>infping</code> tool maintained by Nick Van Wiggeren</a> and run that in a Docker container on my NAS. You can find everything needed to run this on your own <a href="https://gist.github.com/foosel/46804306d510d79f14117f95ed64b877">in this gist</a>.</p>
<p>As a result I get ping output for all hosts every 60 sec with times and packet loss information pushed right into InfluxDB. This is easily queried by Grafana and looks quite nice when visualized:</p>
<p><img alt="A graph showing min, avg and max latency and packet loss data for 8.8.8.8" loading="lazy" src="/blog/2021-03-28-homelab-uplink-monitoring/smokeping.png"></p>
<p>And on my network dashboard, I plot only the <code>avg</code> values across all hosts and a mean <code>loss</code> value into one single graph each for external and internal hosts:</p>
<p><img alt="A graph showing avg latency and packet loss data for all remote hosts" loading="lazy" src="/blog/2021-03-28-homelab-uplink-monitoring/latency.png"></p>
<p>This allows me a good overview of the current state of uplink and internal network at one glance.</p>
<h2 id="alerts">Alerts</h2>
<p>Since just graphs won&rsquo;t give me an immediate heads-up when something goes wrong, I have a bunch of alerts set up in Grafana:</p>
<ul>
<li>Measured download speed falls beneath 250MBit for more than one hour</li>
<li>Measured upload speed falls beneath 35MBit for more than one hour</li>
<li>Mean packet loss across all external hosts rises above 25% for more than ten minutes</li>
</ul>
<p>All of those trigger a notification to a private Discord server (via Grafana&rsquo;s own notification mechanism). In theory this notification should even include a screenshot of the panel for which the alert was triggered for, but I&rsquo;m having some problems with that still that I need to investigate.</p>
<p><img alt="An example alert and alert clearance notification in Discord" loading="lazy" src="/blog/2021-03-28-homelab-uplink-monitoring/discord.png"></p>
<p>This notification channel has an obvious problem: When the uplink goes out completely, I won&rsquo;t get the notification if my phone is in my LAN. I really need to add a local alert as well at some point 😅</p>
<p>Still, it usually will give me a heads-up in time for me to reach out to my ISP on short notice and request they start troubleshooting.</p>
<h2 id="conclusion">Conclusion</h2>
<p>This monitoring setup has proven valuable in debugging network performance issues and also getting an early heads-up about current ISP issues. I have successfully used screenshots for proving ongoing issues to my ISP, and also sped up the one or other troubleshooting session when there was in fact an issue with my LAN. In my book, that makes it absolutely worth the time it took me to set this up and maintain it. And: it kinda looks cool 😎</p>
<p>If you want to give this a go yourself, this might be of interest to you:</p>
<ul>
<li><a href="https://gist.github.com/foosel/f7d9a08c0445454ab90d6c4974a9e316">Dockerfile, compose and instructions for speedtest container</a>
<ul>
<li><a href="https://gist.github.com/foosel/70ecbeade55cc852dbc0a4f7c4040adc">Ookla speedtest based version</a></li>
<li><a href="https://gist.github.com/foosel/ef98a5774d1a495ab3781eba8a157fee">speedtest-rs based version</a></li>
</ul>
</li>
<li><a href="https://gist.github.com/foosel/46804306d510d79f14117f95ed64b877">Dockerfile, compose and instructions for infping container</a></li>
<li><a href="https://gist.github.com/foosel/ec0b6355d1d0c3ab65ee4df79d795a73">Panel JSON for the mentioned visualizations</a></li>
</ul>
]]></content:encoded></item><item><title>On wrong assumptions</title><link>https://foosel.net/blog/2021-03-19-on-wrong-assumptions/</link><pubDate>Fri, 19 Mar 2021 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2021-03-19-on-wrong-assumptions/</guid><description>How I once spent two weeks barking up the wrong tree</description><content:encoded><![CDATA[<p><em>The original version of this post was published as a <a href="https://twitter.com/foosel/status/1242121324438355974">Twitter thread on March 23rd 2020</a>. I figured I should give it a more permanent home here since IMHO it was a quite fun story.</em></p>
<p>Since everyone can use some entertainment right now, how about a battle story on how a year ago I spent almost two weeks trying to wrap my head around a really weird issue of a lagging GCODE viewer and overall print progress reporting in <a href="https://octoprint.org">OctoPrint</a> and finally figuring it out?</p>
<p>Our story begins around the release of 1.4.0, when <a href="https://community.octoprint.org/t/curious-issue-with-print-progress/16304">a new topic on the community forum</a> showed up:</p>
<blockquote>
<h3 id="curious-issue-with-print-progress">Curious issue with print progress</h3>
<p>The print progress figures on my Octopi setup are lagging behind the actual print. [&hellip;] Nothing is broken - anything I throw at it (an Ender 3) prints fine but as a print progresses, the percentage complete, current layer, and sync&rsquo;d gcode viewer gradually lag behind what is actually being printed. For example, on a print with 400 layers, as the last layer is printed the reported progress and current layer is around 96% and 385 respectively. If I do a quick calculation of the displayed Printed/Total file size figures it works out at 96% but what it has actually printed is over 99%. When the print finishes the numbers jump to 100% and 400 and everything is fine.</p>
<p>[&hellip;]</p></blockquote>
<p>This was indeed a very curious issue, since due to the nature of the communication with the printer and buffering in the firmware the progress is usually rather slightly <em>ahead</em> than behind. Some quick testing on my end showed no reproduction, however more and more people chimed in with the same observation.</p>
<p>I was stumped.</p>
<p>My first approach was to collect information from those affected by it. Printer model, firmware version, installed plugins, used slicer and so on. It soon turned out that all affected installations were using Ultimaker Cura as the slicer.</p>
<p>A quick test by the OP with a different slicer confirmed that it indeed just occurred with GCODE sliced by Cura for him, same file in another slicer had everything work as designed. However, comparing the GCODE revealed no immediate differences that would explain this, and what actually is <em>in</em> the file also doesn&rsquo;t really play into progress tracking. My own experiments with Cura failed to reproduce.</p>
<p>Convinced that the issue must be some sort of delay between the backend and the frontend &ndash; maybe due to network issues? &ndash; I whipped up a plugin (since deleted) to log progress on both ends to a log which could then be shared and analysed. The first results came in an guess what? I had barked up the wrong tree, the reported progress was identical. So back to square one.</p>
<p>I still couldn&rsquo;t reproduce it on my end and was starting to get really angry at this issue 😅 I finally threw a copy of some GCODE files now shared by the reporter of the issue on my own printer and <em>finally</em> I could reproduce. Which doesn&rsquo;t mean I had any idea WTF was going on though.</p>
<p>After many test prints, head scratching and going through the files with a comb I finally noticed something. The files with the issue had <code>CRLF</code> (or <code>\r\n</code>) line endings. Those without (including my own sliced files) had just <code>LF</code> (or <code>\n</code>) line endings.</p>
<p>So that made me go 🤨 Some cursing and breakpoint setting later I had proof that the reported progress in backend and frontend was flawed to begin with. I could see that a line was being reported with a file position that it actually was not located at in the file, and which instead belonged to a couple lines earlier. Which meant my positions were reported wrong right at the source &ndash; with a lag. And then it suddenly hit me.</p>
<p>But before I can tell you what was happening I need to give you some background on how OctoPrint reads GCODE files it&rsquo;s printing in order to understand what was going on. Printed files are read line by line because that is how they are sent to the printer. For that OctoPrint uses the <a href="https://docs.python.org/3/library/io.html?highlight=readline#io.IOBase.readline"><code>readline</code></a> method of the file stream. And that works by reading chunks of data from the file until a line separator is found, returning everything read up to this separator and saving the rest for the next line to be read. That means the file will have to be read further than what is returned. And that means that the position in the open file as reported by <a href="https://docs.python.org/3/library/io.html?highlight=readline#io.IOBase.tell"><code>tell</code></a> on the file stream will always be slightly ahead. For progress reporting in OctoPrint however I need to know the exact byte position of each line in the file. So what I do instead of relying on the internal and slightly ahead file position is that I increase my own position indicator by the length of the line read from the file. And this is where my problem was located.</p>
<p>It turns out that for some reason I wasn&rsquo;t getting the lines back from <code>readline</code> with the original line endings attached. Instead I always got <code>LF</code>, even for files with <code>CRLF</code>. And that means I was counting one byte short for every single line in <code>CRLF</code> terminated files. One byte short per line doesn&rsquo;t sound like much, but that adds up through a file with several hundred thousands of lines, to a point where progress reporting will be off by whole layers the further in the print and thus the file you are.</p>
<p>But what was the reason for this popping up in 1.4.0? I hadn&rsquo;t modified the code in question at all. It had been the same since 2016 actually. Well, it turns out that a tiny change during the Python 3 compatibility migration done to a helper function I used in that code had interesting side effects: switching from <a href="https://docs.python.org/3/library/codecs.html#codecs.open"><code>codecs.open</code></a> to <a href="https://docs.python.org/3/library/io.html#io.open"><code>io.open</code></a>.</p>
<p>It turns out that <code>io.open</code> (and thus Python 3&rsquo;s built-in <code>open</code>) by default will open text files in &ldquo;universal newlines mode&rdquo; (see <a href="https://www.python.org/dev/peps/pep-0278/">PEP278</a>), meaning it will happily parse every common line ending, but convert it to <code>LF</code> before returning. Which caused my off-by-one issue in files with <code>CRLF</code>.</p>
<p>And the fix? <a href="https://github.com/foosel/OctoPrint/commit/27bbab9582eb3a1a9fca8f2b203e88b1682fcdc5">Setting <code>newline=&quot;&quot;</code> on the open call</a>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-diff" data-lang="diff"><span style="display:flex;"><span>diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py
</span></span><span style="display:flex;"><span>index 67191a7af..a6dfc1e24 100644
</span></span><span style="display:flex;"><span><span style="color:#f92672">--- a/src/octoprint/util/comm.py
</span></span></span><span style="display:flex;"><span><span style="color:#f92672"></span><span style="color:#a6e22e">+++ b/src/octoprint/util/comm.py
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e"></span><span style="color:#75715e">@@ -4078,7 +4078,7 @@ def start(self):
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> 		&#34;&#34;&#34;
</span></span><span style="display:flex;"><span> 		PrintingFileInformation.start(self)
</span></span><span style="display:flex;"><span> 		with self._handle_mutex:
</span></span><span style="display:flex;"><span><span style="color:#f92672">-			self._handle = bom_aware_open(self._filename, encoding=&#34;utf-8&#34;, errors=&#34;replace&#34;)
</span></span></span><span style="display:flex;"><span><span style="color:#f92672"></span><span style="color:#a6e22e">+			self._handle = bom_aware_open(self._filename, encoding=&#34;utf-8&#34;, errors=&#34;replace&#34;, newline=&#34;&#34;)
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e"></span> 			self._pos = self._handle.tell()
</span></span><span style="display:flex;"><span> 			if self._handle.encoding.endswith(&#34;-sig&#34;):
</span></span><span style="display:flex;"><span> 				# Apparently we found an utf-8 bom in the file.
</span></span></code></pre></div><p>The moral of the story? Don&rsquo;t trust your file position calculations. I could have saved myself a lot of time on debugging this if I had just looked there <em>first</em> instead of assuming this code to be fine 😅</p>
<p>In the end, even a year later, I still have no idea why Cura produced <code>CRLF</code> code for some and <code>LF</code> for me, but I also never really looked hard. A UNIX vs Windows issue can be ruled out here since the affected parties and me were all using Windows. It made me learn something about <code>io.open</code> and was a valuable lesson on wrong assumptions however!</p>
]]></content:encoded></item><item><title>My workplace setup</title><link>https://foosel.net/blog/2021-03-13-my-workplace/</link><pubDate>Sat, 13 Mar 2021 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2021-03-13-my-workplace/</guid><description>How I try to keep backpain and RSI at bay</description><content:encoded><![CDATA[<p>I&rsquo;ve been working full time from my home office since mid-2014 now. At the time of writing this post this is nearing 7 years. Naturally, considering how much time I spend there, I&rsquo;ve also spent a lot of thought and money on making sure my workplace helps to keep the usual side effects of the mostly sedentary lifestyle of a developer at bay.</p>
<p>Over the years I&rsquo;ve had some run ins with RSI and backpain. My first wrist issues developed more than 10 years ago. Pain in my lower back beyond &ldquo;all fine again after a good night&rsquo;s sleep&rdquo; started in February of 2014. Both have been repeating visitors since then. You can probably imagine that that has led to a lot of research and experimentation to see what works and what doesn&rsquo;t for me. So, here&rsquo;s a summary of my findings as of March 2021. Quick disclaimer though, this is what has proven to work for <strong>me</strong>, that doesn&rsquo;t mean it will work for you, if in doubt please consult a professional. Also, I do link to some products here &ndash; consider those references to give you more details on my setup, not official endorsement or anything like that.</p>
<h2 id="keyboard-and-mouse">Keyboard and mouse</h2>
<p>For my wrists, <strong>ergonomic keyboards</strong> have proven to be crucial in combating the dreaded pain and numbness. I started with a <a href="https://www.microsoft.com/en-us/p/natural-ergonomic-keyboard-4000/">Microsoft Natural Ergonomic Keyboard 4000</a> (what a name&hellip;), switched over to an <a href="https://www.microsoft.com/en-us/p/microsoft-sculpt-ergonomic-desktop/">Microsoft Ergo Sculpt</a>, had a quick detour over a regularly shaped <a href="https://www.duckychannel.com.tw/en/Ducky-One-RGB-TKL">Ducky One TKL</a> to get my feet wet in mechanical keyboards and these days have arrived at the 1st gen <a href="https://ultimatehackingkeyboard.com/">Ultimate Hacking Keyboard</a>. It&rsquo;s a mechanical split keybord, sized at 60% (which means it has less keys than your common 101-key keyboard, only 60% of them to be precise, and compensates for that with the use of layers reached through modified keys) and fully programmable. I&rsquo;m still optimizing the macros I have configured on it. I got it with red switches (linear and non clicky, I can&rsquo;t stand keyboards I can&rsquo;t use while holding a conversation ;)) and put a Git-themed keyset on it which I absolutely adore. And it&rsquo;s finally made me switch to US ANSI layout, which indeed is way better suited for coding than ISO DE. The UHK also supports some additional modules, and I have a trackpoint and an additional thumb keycluster on order once they finally release.</p>
<p><img alt="Closeup of my Ultimate Hacking Keyboard" loading="lazy" src="/blog/2021-03-13-my-workplace/keyboard.jpg"></p>
<p>No matter how good you can memorize keyboard shortcuts (or how well the mouse layer of the UHK works), you still also need a <strong>mouse</strong>. In my case that&rsquo;s been gaming mice exclusively for 15+ years now, with a ton of turnover due to wear out or quality issues. Currently I&rsquo;m sporting a <a href="https://steelseries.com/gaming-mice/rival-310">Steelseries Rival 310</a> after my last mouse, a Roccat Kone XTD, developed a flaky mouse wheel I couldn&rsquo;t fix, even though I tried my best. Apparently a design flaw. The Steelseries has so far worked nicely, but I&rsquo;ve only had it for less than six months at the time of writing this. It&rsquo;s an asymmetric mouse tailored for use with the right hand. I can reach the side buttons easily and it isn&rsquo;t too heavy or too light either.</p>
<p>I also have a <strong>trackball</strong> though, dedicated to be used with my <em>left</em> hand. Whenever I notice my right wrist acting up, I switch to exclusive trackball use for a while, and that has managed to still avert Bad Things a number of times now. If you find yourself regularly suffering from RSI issues on your mouse hand, I can really recommend to mix things up with a trackball on your left. Personally I got a <a href="https://www.kensington.com/p/products/electronic-control-solutions/trackball-products/slimblade-trackball/">Kensington Slimblade</a>. It&rsquo;s symmetrical and the buttons are easily remapped to fit a left hand operation. And the huge ball can also be used as a scrollwheel and is actually also a great fidget toy to have on the desk at all times ;)</p>
<h2 id="desk-and-chair">Desk and chair</h2>
<p>In my opinion, there are two pieces of furniture you should never cheap out on: your <strong>office chair</strong> and your bed. I bought my <a href="https://www.sedus.com/en/products/chairs/netwin">sedus netwin</a> office chair right after finishing university in 2007 and apart from having gotten a bit more dirty here and there it&rsquo;s as good as new. I initially got it with a set of arm rests, but quickly figured out that those were actually detrimental to my posture and made me pull my shoulders up, leading to tension related pain. So I removed them. I&rsquo;ve also gotten it a bit more pronounced lumbar support through the aid of <a href="https://www.amazon.de/gp/product/B07PB7G3QJ/">an add-on</a>, the likes of which you can order online for less than 10€ a piece. If I were to buy a new chair today, I&rsquo;d probably get one with a head rest to keep me a bit more from slouching during long debugging or gaming sessions, but all in all I&rsquo;m still completely happy with it, and the mesh back has proven to make sitting on it on hot summer days more bearable.</p>
<p><img alt="My office chair, with a lumbar support addon" loading="lazy" src="/blog/2021-03-13-my-workplace/chair.jpg"></p>
<p>I&rsquo;ve now had an <strong>electric standing desk</strong> since January 2016. I&rsquo;m currently trying to get into the habit of daily use of the standing mode again and so far it&rsquo;s looking good. I got the <a href="https://www.ikea.com/de/de/p/bekant-schreibtisch-sitz-steh-weiss-s69022537/">IKEA Bekant</a> desk, and have since modified it to use the alternative <a href="https://github.com/gcormier/megadesk">Megadesk</a> controller to give it position memory slots (and hopefully also to hook it up into my home automation system long term). I can&rsquo;t stress enough what a difference it can make to just stand for a while during your work day. Exclusively standing should definitely also be avoided (I&rsquo;ve had to do this recently for a couple of days because my back would <em>not</em> take sitting for an answer anymore, and it did a bit of a number on my ankles and knees), but regularly switching between sitting and standing is a great way not only to keep your posture intact but also to just get back your concentration. I currently work sitting until my lunch break, then switch to a couple hours of standing before either returning to sitting or calling it a day.</p>
<p>Speaking of sitting and standing &ndash; I also recently acquired a bunch of accessories to make that more dynamic. While standing, I now regularly plant my feet on a <strong>balance board</strong> (a <a href="https://www.my-gymba.de/en">Gymba</a> one in my case). It allows me to move while standing, to vary my stance more easily and frankly, it&rsquo;s also a ton of fun to seesaw back and forth while working. I use it with shoes - you can also use it barefoot/in socks, but frankly that was a bit to tough a surface or my feet. Your mileage may vary of course.</p>
<p>I also got myself a <strong>wobble stool</strong> from <a href="https://www.flexispot.com/height-adjustable-wobble-stool-bh1b">Flexispot</a>. Imagine a stool, but instead of being stable it has a rounded base that makes it constantly wobble around. You cannot easily slouch on that, you&rsquo;ll fall over. Mine can be height adjusted from 61 to 82cm, so I use it both while standing as a small break, but also while sitting. I&rsquo;m still getting used to it and am experimenting with heights and best way to sit on it, but it&rsquo;s so far been a great addition and doesn&rsquo;t take up much space (a serious plus in my limited office space).</p>
<h2 id="monitor-mounts">Monitor mounts</h2>
<p>Last but not least, I&rsquo;ve got my two main monitors mounted on a <strong>dual monitor mount</strong>, in my case a <a href="http://www.puremounts.de/pm-office-dm-23d.html">gas lift one from PureMounts</a> (the small third monitor is mounted to the second one with a self designed printed mounting solution). The stands usually included with monitors tend to not offer enough flexibility to truly dial in the position of the screen in my experience, and this also managed to free up a <em>ton</em> of desktop real estate that I can now utilize. In my case, a wallmount is not an option due to the standing desk situation, so I instead went for a desk mount. A gas lift is not the most stable option in my experience: things can be a bit shaky when I accidentally bump against the desk due to the rather extreme lever position I had to chose to make things work in my office, but it has been working just fine now since 2012. Still, at some point I might get something a bit more static. In any case, a monitor mount is something I&rsquo;d highly recommended for everyone really, even if you don&rsquo;t want if for ergonomic reasons &ndash; I cannot emphasize the increase in desk space enough ;)</p>
<p><img alt="My monitors, mounted on a gas lift mount" loading="lazy" src="/blog/2021-03-13-my-workplace/monitors.jpg"></p>
<h2 id="tldr">tl;dr</h2>
<p>Get a split ergo keyboard, a gaming mouse for your primary and a trackball for your off hand. Don&rsquo;t cheap out on your office chair, seriously consider investment in a standing desk, get a balance board with it and finally reclaim your desk and improve your workplace&rsquo;s ergonomy at the same time with a monitor mount.</p>
]]></content:encoded></item><item><title>Hello World!</title><link>https://foosel.net/blog/2021-03-12-hello-world/</link><pubDate>Fri, 12 Mar 2021 00:00:00 +0000</pubDate><guid>https://foosel.net/blog/2021-03-12-hello-world/</guid><description>The long overdue foosel.net reboot</description><content:encoded><![CDATA[<p>It&rsquo;s been a couple years since I last tried to maintain a blog. Back then I was still living life as a corporate drone,
employed as a Software Architect to consult other people on their IT problems. I rarely had anything I could blog about
&ndash; either things were under NDA, or they were simply uninteresting. Since then my life has been turned completely on its head.
In late 2012 I got myself a 3d printer, spent my Christmas break to develop a small web interface for it, that grew into a full
sized Open Source project called <a href="https://octoprint.org">OctoPrint</a> and these days I work full time on it.</p>
<p>I&rsquo;ve learned a lot not only on 3d printers &amp; Python, but also on Open Source development, crowdfunding, the challenges of
community management, but also on work life balance, workplace ergonomics, home office life and stress management. And that&rsquo;s
just from my job! In my personal life I&rsquo;ve also spent a lot of time tinkering with electronics, learned how to bake bread,
discovered cooking and went completely down the home automation rabbit hole.</p>
<p>I don&rsquo;t know about you, but I think that should hopefully make for some good opportunities to blog again, and save some of
my learnings in a more persistent way than the ephemeral nature of twitter threads. So I did what apparently every dev seems
to do in such a case and spent way too much time on a webpage reboot with some new tooling that I wanted to try anyway,
and this is the result. This whole page is still a static page, but I&rsquo;ve switched it from <a href="https://jekyllrb.com">Jekyll</a>
to <a href="https://nextjs.org/">next.js</a>. Why? I wanted to get some more hands-on experience with React since I&rsquo;m evaluating it for a
new UI for OctoPrint, and I also never really warmed up to Ruby but know JS, so with expandability in mind this just feels like a
better fit. If you want to study the source, you can find that <a href="https://github.com/foosel/foosel.github.io">here</a> (but please
don&rsquo;t look too closely, I&rsquo;m still learning and things are probably not even remotely optimally implemented).</p>
<p>So here we are, and it&rsquo;s time to fill this up a bit more. Thankfully I already got some ideas&hellip;</p>
]]></content:encoded></item></channel></rss>