<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>James Grogan</title>
    <link>https://jmsgrogan.com/</link>
    <description>James Grogan</description>
    <item>
      <title>Down in the Pi-hole</title>
      <link>https://jmsgrogan.com/blogs/technical/down_in_the_pihole.html</link>
      <guid>https://jmsgrogan.com/blogs/technical/down_in_the_pihole.html</guid>
      <pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate>
      <description><![CDATA[<article class="post">
<header class="post-header">
<h1>Down in the Pi-hole</h1>
<time datetime="2026-03-28">2026-03-28</time>
</header>

<p>A couple of months ago I made the ill-fated decision to upgrade my pi-hole from version 5 to 6. Since then, my local DNS resolution has stopped working on devices other than the Pi.</p>
<p>Searching online didn't show up much - the odd forum post where someone changes a seemingly aribtary setting and things magically work for them. Not so satifying. So, I figure why not take a deeper dive into how the pi-hole works.</p>
<p>First, the problem. If I run <code>dig blah.home @&lt;pi address&gt;</code> on my laptop I get a timeout error on <code>pi-address#53</code>, where <code>blah.home</code> is in my list of custom DNS entries in the pihole admin page. If I run it on my Pi then it resolves the IPV4 address just fine. Looking at pihole's logs, in both cases the cusotm DNS file is consulted and the address is found for the A record. On the Pi a AAAA record is also checked. Now, you may say...firewall! Which would be reasonable except external addresses are resolving just fine on that port, as well as CNAME entries.</p>
<p>So what is going on? Well pi-hole serves DNS queries using its FTL server, which is a fork of <code>dnsmasq</code>. So first stop is figuring out how that works. You can enable packet dumping but my pcap game is not strong and I figure looking at packets won't be enough to tell me what exactly is going on.</p>
<p>I already had <code>dnsmasq</code> installed on the Pi and launched it with:</p>
<div class="highlight"><pre><span></span>dnsmasq<span class="w"> </span>-h<span class="w"> </span>-d<span class="w"> </span>-q<span class="w"> </span>-p<span class="w"> </span><span class="m">5353</span><span class="w"> </span>-A<span class="w"> </span>/domain.name/192.168.0.10
</pre></div>

<p>Here <code>-A</code> is a custom name-address mapping and <code>-h d -q</code> enable 'no-hosts mode', 'no-daemon mode' and 'log query mode' respectively.</p>
<p>On the client side if I then run:</p>
<div class="highlight"><pre><span></span>dig<span class="w"> </span>domain.name<span class="w"> </span>@192.168.0.10<span class="w"> </span>-p<span class="w"> </span><span class="m">5353</span>
</pre></div>

<p>I get on the server:</p>
<div class="highlight"><pre><span></span>dnsmasq: query[A] grafana.home from 192.168.0.74
dnsmasq: config grafana.home is 192.168.0.10
</pre></div>

<p>and on the client:</p>
<div class="highlight"><pre><span></span>;; QUESTION SECTION:
;grafana.home.			IN	A

;; ANSWER SECTION:
grafana.home.		0	IN	A	192.168.0.10

;; Query time: 7 msec
;; SERVER: 192.168.0.10#5353(192.168.0.10) (UDP)
</pre></div>

<p>All as expected. If I try the same with my Pi I get:</p>
<div class="highlight"><pre><span></span>;; communications error to 192.168.0.10#53: timed out
;; communications error to 192.168.0.10#53: timed out
;; communications error to 192.168.0.10#53: timed out

; &lt;&lt;&gt;&gt; DiG 9.19.24 &lt;&lt;&gt;&gt; navidrome.home @192.168.0.10 -p53
;; global options: +cmd
;; no servers could be reached
</pre></div>

<p>What gives here? I should at least see some sort of resolution error somewhere - rather than a refusal to respond at all.</p>
<p>Since there isn't much to go on in the logs let's see if we can build FTL and poke around - following: https://docs.pi-hole.net/ftldns/compile/. I had some trouble building mbdtls due to a seemingly defective archive download link - but otherwise this went fine.</p>
<p>Now we can run directly against the FTL development version:</p>
<div class="highlight"><pre><span></span>sudo<span class="w"> </span>service<span class="w"> </span>pihole-FTL<span class="w"> </span>stop
sudo<span class="w"> </span>pihole-FTL<span class="w"> </span>debug
</pre></div>

<p>Some extra logging revealed that the wrapped dnsmasq version was indeed trying to send a message via its <code>sndmsg</code> call. So - time to take a look at some packets after all. Using <code>tcpdump</code> on the pi and my laptop, e.g.:</p>
<div class="highlight"><pre><span></span>sudo<span class="w"> </span>tcpdump<span class="w"> </span>-i<span class="w"> </span>wlp2s0<span class="w"> </span>host<span class="w"> </span><span class="m">192</span>.168.0.10<span class="w"> </span>and<span class="w"> </span>port<span class="w"> </span><span class="m">53</span>
</pre></div>

<p>I could see that the pi sending a response back to the A record request - but that there was no response coming on the laptop.</p>
<div class="highlight"><pre><span></span>15:37:04.236194 IP rex.local.42138 &gt; raspberrypi.domain: 33845+ [1au] A? navidrome.home. (55)
15:37:04.319626 IP rex.local.34406 &gt; raspberrypi.domain: 64344+ PTR? 10.0.168.192.in-addr.arpa. (43)
15:37:04.327971 IP raspberrypi.domain &gt; rex.local.34406: 64344* 1/0/0 PTR raspberrypi. (68)
15:37:09.238439 IP rex.local.41264 &gt; raspberrypi.domain: 33845+ [1au] A? navidrome.home. (55)
15:37:14.244129 IP rex.local.34274 &gt; raspberrypi.domain: 33845+ [1au] A? navidrome.home. (55)
15:37:19.328530 IP rex.local.46479 &gt; raspberrypi.domain: 61373+ PTR? 10.0.168.192.in-addr.arpa. (43)
15:37:19.351417 IP raspberrypi.domain &gt; rex.local.46479: 61373* 1/0/0 PTR raspberrypi. (68)
</pre></div>

<div class="highlight"><pre><span></span>15:39:54.619470 IP raspberrypi.domain &gt; rex.59592: 51011* 1/0/1 A 192.168.0.10 (59)
15:39:59.622195 IP rex.36985 &gt; raspberrypi.domain: 51011+ [1au] A? navidrome.home. (55)
15:39:59.622504 IP raspberrypi.domain &gt; rex.36985: 51011* 1/0/1 A 192.168.0.10 (59)
15:40:04.627099 IP rex.51835 &gt; raspberrypi.domain: 51011+ [1au] A? navidrome.home. (55)
</pre></div>

</article>
]]></description>
    </item>
    <item>
      <title>End of Year Recap 2025</title>
      <link>https://jmsgrogan.com/blogs/technical/end_of_year_recap_2025.html</link>
      <guid>https://jmsgrogan.com/blogs/technical/end_of_year_recap_2025.html</guid>
      <pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate>
      <description><![CDATA[<article class="post">
<header class="post-header">
<h1>End of Year Recap 2025</h1>
<time datetime="2025-12-22">2025-12-22</time>
</header>

<p>This is the second year of my 'end of year recaps', this time for 2025.</p>
<p>As a high-level summary of the year, I didn't make the progress I'd hoped for in my 2025 goals, owing to a mix of an increased professional workload mixed with some health issues.</p>
<p>The increased professional workload was 'ok', in the sense that a lot of it involved building interesting things and learning new technologies. In particular:</p>
<ul>
<li>I was involved in setting up a new 'platform engineering' team - which has involved a lot of mentoring, process development and design and build of some foundational tooling.</li>
<li>My main work project involves building a collaboration portal including elements for project proposal review and data sharing. We didn't have a template for building something like this at my employer so a lot of things have had to be set up from scratch</li>
<li>I tried to continue tipping along with several smaller work projects, including in quantum computing, environmental science and machine learning</li>
</ul>
<p>Of course, I had some new goals and toys to add to my existing 2024 ones, in particular Linux mobile, I picked up a OnePlus 6 and am running PostmarketOs on it.</p>
<p>My goals for 2025 still carry over many of my unfinished ones from 2024, but there is a gradual convergence toward a coherent set of projects I want to take on. Namely building my own tooling for:</p>
<ul>
<li>blogging (like every developer on the planet)</li>
<li>music and video cataloging and playing - Navidrome is nice but doesn't do everything I want as a single service</li>
<li>photo cataloging - again, Immich is great but the rate of change and feature addition is getting a bit overwhelming for me. I like to have control!</li>
<li>family tree (building the tech and collecting the data) - this is a new project and one I'd really like to make a dent in</li>
<li>Contact and calendar management - including learning CalDav - Nextcloud is just too complex and  enterprise focused for what I want</li>
<li>File management - including WebDav. Again, Nextcloud is great for something enterprisey but I'd like to really understand and control my stack.</li>
</ul>
<p>So - this is ALOT of new projects, some of which also need clients if I want to consume them on my Linux phone. One silver lining is that I've been building up a 'resusable' set of components on my work projects - which are open-source. So my plan is to focus on getting core functionality for these projects together using Django and Angular. Really I'd like something lighter and more exotic than these frameworks in the long term - but to make progress I need to reuse the stack I've invested a lot of time in in the last year.</p>
<p>The enxt big question is around infrastructure. Next year I'm going to need to upskill in Kubernetes and Ansible at work. I could, and probably should, use them for my side projects. However I still really want to play with more niche and maybe forward-looking tooling in my side-projects - particularly Guix and the LISP ecosystem. So I'll probably try to define and run the infrastructure and services I'm using in Guix at some point during the year, maybe not exactly at the start. This has the added bonus of having a clear impetus to learn Emacs LISP and really get my IDE set up the way I want, which isn't something I've acheived so far.</p>
<p>On the non-technical side I hope to make more progress in the veggie-patch. I grew some veggies in 2025 but my mobility limited what could be done. I'm hoping to add a couple of new raised boxes in 2026 and grow a bit more.</p>
<p>So here's my technical stack and roadmap plans for 2026:</p>
<ul>
<li>Blogging platform - Django and Angular</li>
<li>Switch from Navidrome to a custom built multi-media tool</li>
<li>Switch from Immich to a custom photo management tool</li>
<li>Switch from Nextcloud to custom contact, calendar and file management tools</li>
<li>Build a family tree tool - Django and Angular</li>
<li>Auth central auth with Keycloak</li>
<li>Add GotoSocial, or maybe learn enough Activity Pub to do something myself and move my Mastodon account there</li>
<li>Keep chugging along with Forgejo</li>
<li>Set up a proper monitoring stack</li>
<li>Set up wireguard properly - so I can host from my Pi through a light VPS</li>
<li>Move toward a coherent infrastructure management approach - hopefully with Guix</li>
<li>Write necessary client apps for my phone - likely with Rust and GTK</li>
<li>Sort out Podcast app - either contribute to GNOME Podcast or write something, there are a good few features I'd like</li>
</ul>
</article>
]]></description>
    </item>
    <item>
      <title>Switching to Emacs — 18 months in</title>
      <link>https://jmsgrogan.com/blogs/technical/emacs_eighteen_months_in.html</link>
      <guid>https://jmsgrogan.com/blogs/technical/emacs_eighteen_months_in.html</guid>
      <pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate>
      <description><![CDATA[<article class="post">
<header class="post-header">
<h1>Switching to Emacs — 18 months in</h1>
<time datetime="2025-12-22">2025-12-22</time>
</header>

<p>This is a post about switching IDE to <code>emacs</code>, what's gone well and what's been a struggle so far.</p>
<p>I started using <code>emacs</code> approximately 18 months ago, switching over from VS Code. My main reason for switching was getting nervy about the dominance of VS Code (which I still think is an excellent IDE) and general fatigue around tooling enshittifaction, privacy invasion and AI integration.</p>
<p>What's gone well?:</p>
<ul>
<li>Much less mouse - I learned <code>vim</code> keybindings and have set up a tiling window manager (Amethyst/Sway), which have both been a productivity and comfort revelation</li>
<li>Treemacs and Projectile - I'm using emacs as an IDE and have a lot of projects - this has been a comforable way to manage them, even more so than in VS Code.</li>
<li>No sore pinky - I remapped my Caps Key and with Evil more my pinky is in good shape</li>
<li>Packages and LSP - There have been packages and modes for most languages, frameworks and tools that I've needed (Angular, Containers, Python, Markdown) and at a basic level they've worked ok</li>
</ul>
<p>What's been a struggle:</p>
<ul>
<li>Keybindings - Evil mode is relatively comfortable, but I still end up fat-fingering often and doing weird and unrecoverable (in an 'undo' rather than 'document loss' sense) things to the buffer. There can be an impedence mismatch with evil vs. native bindings and documentation which can be a pain for learning and tutorials.</li>
<li>Lisp - Despite several starts I haven't made progress learning it yet, maybe because it's so different from what I'm used to (Python, C++). This makes it hard to customize and fully control my environment.</li>
<li>Web Development - I have trouble with LSP freezes and crashes with Angular. The Angular LSP devs seem only interested in supporting the 'official' VS Code use-case which makes getting fixes difficult.</li>
</ul>
<p>Some blasphemy:</p>
<ul>
<li>I haven't picked up <code>magit</code> - I have a very simple git flow and am pretty used to it - using magit for it feels like slowing down</li>
<li>I haven't picked up Org Mode - I want most of my writing to be in Markdown, often required for collaboration with colleagues. I guess Markdown Mode covers a reasonable number of Org features. I'm too disorganised to have todo lists - maybe some day.</li>
<li>Interactions are a bit slow - I haven't done any optimization but plan to eventually. That said, VS Code is snappy without needing to tinker and as far as I understand I'm limited to a single thread, which makes me think there is only so much optimization that can be done.</li>
<li>I'm using Vim more - now that I'm more comfortable with Vim bindings I'm often using it for quick document edits or server work, rather than launching emacs.</li>
</ul>
<p>What's next?</p>
<ul>
<li>Get better at navigation and using tooling - I'm still not using search, refactoring and code-base navigation tooling and bindings very well.</li>
<li>Target evil to certain modes - In some modes (e.g. Info) the evil bindings are getting in the way, I should configure them to be active for a limited set of modes</li>
<li>Learn some Emacs debugging, profiling and Lisp</li>
</ul>
<p>To wrap up - my <code>emacs</code> journey has gone well so far and there are no regrets with the switch, especially since VS Code appears to gradually enshittifying as expected. It's been a good bit of work getting to a basic comfort level and I feel like I still have a long way to go. Maybe I'll do another update at the 5 year mark.</p>
</article>
]]></description>
    </item>
    <item>
      <title>Linux Mobile — First Time</title>
      <link>https://jmsgrogan.com/blogs/technical/linux_mobile_first_time.html</link>
      <guid>https://jmsgrogan.com/blogs/technical/linux_mobile_first_time.html</guid>
      <pubDate>Mon, 21 Jul 2025 00:00:00 +0000</pubDate>
      <description><![CDATA[<article class="post">
<header class="post-header">
<h1>Linux Mobile — First Time</h1>
<time datetime="2025-07-21">2025-07-21</time>
</header>

<p>I recently (yesterday) installed PostmarketOS with Phosh on a refurbished One Plus 6. Since this is my first time using a Linux phone I thought it might be useful to track the issues I hit - since you tend to lose the 'noob-insights' as you get more used to a new platform (for better or worse).</p>
<h1 id="problems">Problems</h1>
<ul>
<li>Can't launch new software in Software app</li>
</ul>
<p>One of the first things I wanted to do with the Linux phone was show off on social media that I was using a Linux phone, how basic of me. I tried to install a Mastodon client through the Software App and one called 'Pinafore' showed up. After some awkward UI wrangling it marked as Installed. However it doesn't show up anywhere on the phone UI, including the Software app. If I try to launch it from the 'Installed' splash then the Install splash for the Software app itself opens. In the end I did my showing off through the web browser for now.</p>
<p>I didn't look for an issue report for this one yet - but of course maybe most people go straight to the console and use a list like this: https://wiki.postmarketos.org/wiki/Applications_by_function (In the end I installed <code>tuba</code> for this.</p>
<ul>
<li>Can't set a pin-like password</li>
</ul>
<p>The OS comes with a preset pin-like (short, numerical) password. Naturally you will want to change it pretty early on.</p>
<p>Gnome Settings seems like an intuitive place to do it, it has a User profile and a UI to change the password. However it only accepts relatively long alphanumeric passwords, as you might expect on desktop. This doesn't work on mobile - you want to pick up your phone and unlock it pretty quick.</p>
<p>The workaround is to open a console and use <code>passwd</code>.</p>
<p>I found a defect report here: https://gitlab.postmarketos.org/postmarketOS/pmaports/-/issues/2902 but it is marked as an upstream bug - I don't understand enough yet to know which upstream. I haven't found other reports yet (but am still getting up to speed on issue trackers).</p>
<ul>
<li>Occasionally can't select file in web browser - clipped UI</li>
</ul>
<p>While continuing my quest to show off on social media I tried to share a screengrab on Mastodon via Firefox. This worked fine via the File picker on first attempt. Since I messed up the post I tried a second time but now the File picker was sized larger than the screen and I was stuck.</p>
<p>I didn't look for an issue report yet and am not fully sure how reproducible this is.</p>
<ul>
<li>Battery level not working</li>
</ul>
<p>The battery is shown as always charging - I'm pretty sure I saw this in an FAQ/common issues - so will need to dig it out.</p>
<h1 id="nuisances">Nuisances</h1>
<ul>
<li>Multiple settings apps</li>
</ul>
<p>I tried to turn off haptic feedback for the keyboard. I got there in the end but it was awkward finding the setting in the multiple setting apps.</p>
<ul>
<li>Camera not working</li>
</ul>
<p>This is probably a 'Problem' for others but I don't tend to use it much. However one of the reasons for going for the One Plus 6 was the camera support. I'm probably missing something from an FAQ/common issues for this - but 'out of the box', no camera.</p>
</article>
]]></description>
    </item>
    <item>
      <title>End of Year Recap 2024</title>
      <link>https://jmsgrogan.com/blogs/technical/end_of_year_recap_2024.html</link>
      <guid>https://jmsgrogan.com/blogs/technical/end_of_year_recap_2024.html</guid>
      <pubDate>Wed, 18 Dec 2024 00:00:00 +0000</pubDate>
      <description><![CDATA[<article class="post">
<header class="post-header">
<h1>End of Year Recap 2024</h1>
<time datetime="2024-12-18">2024-12-18</time>
</header>

<p>This is a recap of some technical projects I've picked up, started or finished in 2024 and things I'd like to pick up in 2025.</p>
<h1 id="relevant-background">Relevant Background</h1>
<p>I'm a software developer with an interest in free software, open science, minimalism and yak shaving. I've been using Linux for about 15 years and finally rid myself of all things Windows some time last year.</p>
<p>I had mostly used Ubuntu for personal computing and a little CentOS/RedHat at work, but started looking around for other distros when they introduced Snaps and killed CentOS 8 respectively, cementing my feelings that corporate distros should only be used for corporate things. My distro search included brief spells with:</p>
<ul>
<li>Debian - found packages too out of date</li>
<li>Fedora - found dnf slow on my clunky old laptop</li>
<li>Gentoo - never got it fully set up correctly</li>
</ul>
<p>before settling on Arch some time in 2023.</p>
<p>I've primarily worked with GUI tools including IDEs and heavy mouse use, dropping to the terminal only when needed.</p>
<h1 id="2024-recap">2024 Recap</h1>
<h2 id="operating-systems">Operating Systems</h2>
<p>I had been running Arch for much of 2023 using Wayland and <code>suckless</code> tools as much as possible, e.g. <code>dwl</code>. The system was stable but I stuggled with the keyboard focused flow and sometimes needing a tool in a hurry - e.g. joining a wifi network on the road and trying to remember the terminal commands to do so.</p>
<p>I switched to Debian Sid early in the year - with the lofty goal of being able to contribute useful defect reports and maybe being able to get involved in some package maintenance. I switched back to GNOME and mousing about at the same time, which was a bit of a relief although floating windows did start to grate a bit.</p>
<p>I learned about Guix and along with being interested in learning Emacs decided to give the Guix System a shot, around March some time. I found the initial setup a bit tricky - since I needed some non-free kernel bits, but (presumably with some thanks to previous Gentoo experience) eventually pulled a system together. It has been rock solid since and I think my distro hopping days are over for now.</p>
<p>The big appeals of Guix to me are:</p>
<ul>
<li>having control over the assembly of the system and being able to build something minimal</li>
<li>having a clean language to configure the system (Guile Scheme)</li>
<li>its free software and community focus</li>
<li>use of an alternative to SystemD - I think competition and having choice are healthy and I'm not running an enterprise on my laptop</li>
<li>maybe some day using GNU Hurd - did I mention the yak shaving?</li>
</ul>
<p>With the switch to Guix I switched to Sway as a window-manager, rather than <code>dwl</code>. Interestingly it is more minimal than I had thought feature-wise, properly setting up <code>sway-lock</code> and <code>sway-idle</code> are still on my todo list. This allowed me to remove a lot of GNOME and GDM things from my Guix setup (with David Wilson's awesome blog, videos and repo doing most of the heavy lifting). There is still a long way to go in terms of my understanding the lower level Linux userspace before chopping more off my Guix config, but that is what 2025 is for.</p>
<h2 id="ides">IDEs</h2>
<p>Switching IDE was definitely my biggest and most time-consuming technical project of 2024. I haven't been happy with my IDE choices - basically ever. The Eclipse IDE was one of the first I used for Python and C++. It is free software and I'm greatful to the developers for building it, but I found every single aspect of it painful to use, from crashes to lockups and runaway resource use while indexing to a painful plugin management system, and did I mention the Java?</p>
<p>After many years of using Eclipse I used Visual Studio while working on a Windows-centric product for several years. It was adequate but I don't like the Microsoft C++ development environment for several reasons. Once I no longer had to write code for Windows I switched to VS Code on all platforms. VS Code is an amazing IDE, performance is great and tooling and plugins 'just work'. In my current role I write tutorials and best practice documentation for other developers and the general public. I'm really not a fan of Microsoft and although there is 'free' VS Codium with some of the nasties stripped out I'm wary of the now dominance of VS Code and the possibility of a web-browser like co-option of standards by a small number of large corporations. so, it didn't feel good to me to make documentation with this IDE as the prominent option.</p>
<p>This left me with the choice of Emacs and the Vi ecosystem. Since I was trying out Guix at the same time and was interested in the idea of LISP I decided to give Emacs a try. The experience is worthy of a dedicated post - but needless to say that transition was hugely time consuming and challening - but I'm out the other side now and things are looking good. Once again I'm finally satisfied I've found a platform I can stick with for a long time.</p>
<h2 id="self-hosting-and-de-googling">Self Hosting and De-Googling</h2>
<p>2024 has been a good year for first steps at self-hosting and degoogling. Some of the things I set up have been:</p>
<ul>
<li>Moving from Github to Codeberg and then primarily a self-hosted Forgejo instance</li>
<li>Moving my personal site from Github pages and Python pelican generator to a custom generator and self-hosted server</li>
<li>Making a self-hosted dynamic website for my wedding with CSS and Vanilla JS</li>
<li>Moving all of my credentials to Bitwarden</li>
<li>Moving my mail from Google to Migadu</li>
<li>Dropping my Spotify and using Bandcamp, with self-hosted Navidrome for listening</li>
<li>Archiving my photos via Immich self-hosting</li>
<li>Setting up a Raspberry Pi for local self-hosting</li>
<li>Running pi-hole for DNS blackholing and DHCP</li>
</ul>
<h2 id="languages">Languages</h2>
<p>2024 hasn't been very active for picking up new languages or language features. I mostly got back up to speed with recent developments in Typescript (and Angular) and Python. For Python the main things I picked up were the packaging system changes (e.g. Pyproject.toml), use of linters and the typing system (which I'm enjoying).</p>
<p>I did learn a bit about RPM packaging at the start of the year, which is possibly forgotten by now.</p>
<p>One change I did make was trying out more functional approaches to programming. I learned programming via OOP and have been using that everywhere. For some Python projects I've tried a more functional approach with immutable data classes and functions without side-effects and it has been pretty satisfying - I'm going to go further down this road in 2025 with language choices.</p>
<h2 id="side-projects-and-open-source-contributions">Side Projects and Open Source Contributions</h2>
<p>2024 has been a mixed to dissappoiting year on the side projects front. For several (at least 5) years now I've been trying to build a library of 'things from scratch', e.g. a :</p>
<ul>
<li>compiler</li>
<li>build system (e.g. make)</li>
<li>pdf, png, midi, wav, svg, xml, json, yaml readers and writers</li>
<li>3d renderer</li>
<li>GUI system</li>
<li>static site generator (including markdown, html parsers)</li>
<li>web server and client</li>
</ul>
<p>I had originally written them in modern C++, but it didn't feel 'from scratch' enough. So I wrote replacements for STL containers and memory management - basically seeing if I could run something without the C++ standard library. If you are shouting 'why?!' right now - know that I am too.</p>
<p>The original goal of this 'from scratch' library was to build tooling for myself to use - since I mostly end up hitting rough edges or things I don't like about other tools. That and of course the 'for fun' or yak shaving element. However with Emacs and increased comfort in keyboard-driven workflows I need this tooling less now. I hope to use pieces of this library in 2025, while learning some of the other languages, particularly C, Rust and Guile Scheme.</p>
<p>The side project I did get completed was a website for my wedding. This was a 'from scratch' HTML/CSS/Vanilla JS frontend with a Cherrypy backend. It came out looking fairly ok, although buidling it at the same time as planning a wedding was probably unwise.</p>
<p>I am still yet to contribute to a (non-work) collaborative open source project - not good. Hopefully that will change in 2025.</p>
<h2 id="analysis-and-theory">Analysis and Theory</h2>
<p>I haven't spent much time brushing up on analytical or theoretical skills this year - I've had a brief interaction with computational mechanics again, namely crystal plasticity theory but I can see more theoretical research on the horizon in 2025.</p>
<h2 id="sustainability">Sustainability</h2>
<p>I grew my own vegetables in my small back garden this year including setting up a chunky box-planter. This was very sucsessful and should hopefully be back next year.</p>
<p>I cycle to work most days but it has been a tough year for bike maintenance. I have a weird racer bike and seemingly need to do most maintenance myself - anything that can break on the bike has this year. Learning how to fix each issue has been slow.</p>
<h1 id="2025-plans">2025 Plans</h1>
<p>And so, the lofty plans for 2025...</p>
<h2 id="operating-systems-1">Operating Systems</h2>
<ul>
<li>Write up how low-level Linux ecosystem services work and fit together (e.g. PAM, elogind, DBus, Wayland seats) in the context of Guix, so I learn about them</li>
<li>Handle power managment on my laptop - including Sway Idle, at the moment I don't know how to suspend or check if it is in low power mode
<ul>
<li>Add a little icon to sway bar for charging</li>
</ul>
</li>
<li>Handle sound management on laptop - currently I have no keyboard control over sound levels</li>
<li>Learn about and implement Guix Home</li>
<li>Further customize and simplify my Guix config (yes, nice and vague)</li>
<li>Learn about Nix and Nix Home for my work Mac</li>
</ul>
<h2 id="ides-1">IDEs</h2>
<ul>
<li>Try to not depend on treemacs so much - try dired only or similar</li>
<li>Add email handling to Emacs config</li>
<li>Learn more Emacs and Vim keyboard shortcuts - particularly document navigation and search</li>
<li>Learn basic regex</li>
<li>Learn and document how Emacs packaging works</li>
<li>Learn magit properly</li>
<li>Find a comfortable way to work with Emacs shell</li>
<li>Find a comfortable way to browse web with Emacs</li>
<li>Learn to use a LISP REPL in Emacs</li>
<li>Learn Python and C debugging and profiling in Emacs</li>
<li>Come up with a comfortable Emacs and Vim config for remote terminal sessions.</li>
<li>Troubleshoot slow initial file search in Emacs on Mac</li>
<li>Link Emacs forge support with forgejo</li>
</ul>
<h2 id="self-hosting">Self Hosting</h2>
<ul>
<li>Set up a backup solution</li>
<li>Expose locally hosted services via Wireguard and cloud instance</li>
<li>Set up Nextcloud for documents, calendar and contacts</li>
<li>Set up own mail server for receive</li>
<li>Move forgejo to local hosting and set up a Foregejo runner</li>
<li>Set up service monitoring</li>
<li>Set up local network monitoring and altering</li>
<li>Network my USB printer via an RPI</li>
</ul>
<h2 id="languages-1">Languages</h2>
<p>This is the area where I have most FOMO in terms of what to spend my time on (FWIW I have zero FOMO on not learning AI APIs or prompt engineering). There is such a rich environment of modern languages and development ecosystems to chose from and it seems there is plenty of scope for exciting developments.</p>
<p>At a meta level - I would like to learn how compilers work and programming language theory and design, but I'm not sure 2025 will allow me to go too deep there.</p>
<h3 id="c">C</h3>
<p>Of course, I 'known' C - I've written snippets of code and tutorials in it and have lots of C++ experience, but I don't 'know know' C. I've never written enough of it to have to deal with complexities, edge cases or to have thought about code style. I'd like to learn more of it since it is still foundational to low-level Linux utilities - which I want to understand, modify and maybe contribute to. This year I'd like to write a full side-project or two in C.</p>
<h3 id="rust">Rust</h3>
<p>I like the idea of Rust and I'm tired of C++ and its package management disaster zone. Still, I'm wary of Rust's own approach to package management - seemingly following the 'pip' and 'npm' roads. I'm also wary of static linking and the complex build and compile ecosystem. While I do think it is possible in theory to write moderately safe C++ with suitable use of its modern pointers, I have sadly been exposed to large C++ projects in the real world.</p>
<p>So overall, the future is looking bright for Rust and all impressions I've read are that the language itself is pleasant to use. So, I'm on board. Hopefully I can get a project or two completed in Rust this year.</p>
<h3 id="guile-scheme">Guile Scheme</h3>
<p>I'm quite sure I want to learn some Lisp - I've read too much on how different, powerful and fun it is not to and would like to build up my functional programming skills. Since it is now powering my operating system and IDE, it would seem important to know a bit too.</p>
<p>From reading around Scheme seems a well regarded Lisp dialect to pick up, and given my 'free software' leanings and use of Guix then Guile Scheme seems a good implementation. So, hopefully some Guile Scheme projects are on the horizon too.</p>
<p>I'm curious about more 'powerful' dialects I've heard about too, like Racket and Clojure although they may be for another year - along with Haskel on the functional programming odysee.</p>
<h2 id="side-projects-and-open-source-contributions-1">Side Projects and Open Source Contributions</h2>
<h3 id="personal-site">Personal Site</h3>
<p>I'd like to get my personal site into better shape as a blog, including:</p>
<ul>
<li>supporting blog posts</li>
<li>supporting RSS</li>
<li>looking a bit nicer</li>
</ul>
<p>Currently it is being built using Python - I'm thinking about using Scheme instead, possibly with Rust for Markdown parsing - which is related to another project of interest.</p>
<p>For blog posts, some I'd like to cover include:</p>
<ul>
<li>A review of the Supercomputing conference SC24</li>
<li>A retrospective on moving from Vs Code to Emacs</li>
<li>A review of my vegetable patch experience</li>
</ul>
<p>I'd also like to start making some videos - so some OBs practice is on the cards.</p>
<h3 id="open-source">Open Source</h3>
<p>I'd like to contribute to Forgejo and particularly efforts around federation. I think that is a really promising feature for Open Science (which I think has no business depending on Github) where labs or institutes host their own forges with rich linked data features that Github will never build.</p>
<p>I'd also like to contribute to Guix - I'm not sure how yet but maybe I can do something useful around infrastructure or testing.</p>
<h3 id="creative">Creative</h3>
<p>I'd like to get back making 3d renders and some electronic music - I'm not sure what form they'll take yet - maybe I can involve Scheme somehow.</p>
<h3 id="analysis-and-theory-1">Analysis and Theory</h3>
<p>Some areas I'd like to cover more:</p>
<ul>
<li>Continuum Mechanics, Crystal Plasticity Theory and Finite Element solvers - getting back up to speed</li>
<li>Implementation of digitial quantum simulators - e.g. how to solve quantum circuits on classical computers</li>
<li>How transformers work in Machine Learning - my ML knowledge pretty much stops in 2017</li>
</ul>
<h1 id="and-beyond">And Beyond...</h1>
<p>What is the big plan or picture? Basically:</p>
<ul>
<li>having a minimal, contrarian computing setup that I understand well and have a good degree of control over. Something involving Guix, Hurd, Emacs etc.</li>
<li>having a comfortable setup for creative activities: writing, 3D rendering, video creation and music creation</li>
<li>having a low footprint hosting setup - both financial cost and resource use-wise</li>
<li>keeping up-to-date with modern technology and being able to tell hype from genuinely interesting progress</li>
</ul>
</article>
]]></description>
    </item>
  </channel>
</rss>
