<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://quin10ko9.com/">
  <title>Quinten&#39;s Daily Log</title>
  <subtitle>A daily development and study log.</subtitle>
  <link href="https://quin10ko9.com/feed.xml" rel="self"/>
  <link href="https://quin10ko9.com/"/>
  <updated>2025-07-04T21:00:00Z</updated>
  <id>https://quin10ko9.com/</id>
  <author>
    <name>Quinten Konyn</name>
    <email>website@quin10ko9.com</email>
  </author>
  <entry>
    <title>Weekly Update: Friday, July 4, 2025</title>
    <link href="https://quin10ko9.com/log/2025-07-04/"/>
    <updated>2025-07-04T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2025-07-04/</id>
    <summary>
A Leptos calculator project, breaking and fixing my router, cool fonts, and other things I got up to this week.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;A Leptos calculator project, breaking and fixing my router, cool fonts, and other things I got up to this week.&lt;/p&gt;
&lt;h2 id=&quot;leptos&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-07-04/#leptos&quot;&gt;Leptos&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/crystalsolenoid/leptos-calc-test/blob/main/src/main.rs&quot;&gt;I wrote a calculator in Leptos&lt;/a&gt; to get a better feel for the framework. I&#39;ve written something similar for work in vanilla JavaScript, so I thought it would be a good simple project to compare with.&lt;/p&gt;
&lt;p&gt;It (of course) felt harder because I am not used to Leptos yet. I managed to get something very similar working, though!&lt;/p&gt;
&lt;p&gt;It was difficult to figure out how to get the &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; box to dynamically update if the &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; box had a high enough value, but it kind of Just Worked when I called &lt;code&gt;set()&lt;/code&gt; on the signal from a the &lt;code&gt;on:input&lt;/code&gt; function of the &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; box.&lt;/p&gt;
&lt;p&gt;The only thing I couldn&#39;t figure out how to do is how to set the focus on a specific element upon hitting the Clear button. This feature was simple to implement in vanilla JavaScript. I know how to set a property or call a method on an element using the &lt;code&gt;web_sys&lt;/code&gt; crate, but I have a feeling that Leptos would make it easier than having to query the DOM when the element I&#39;m talking about is right there in the code?&lt;/p&gt;
&lt;h2 id=&quot;self-hosting&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-07-04/#self-hosting&quot;&gt;Self Hosting&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;tailscale-trouble&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-07-04/#tailscale-trouble&quot;&gt;Tailscale trouble&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tailscale has been acting up for me lately on Android, which is really spoiling my fun. It&#39;s supposed to let through all non-Tailscale traffic (since it&#39;s based on Wireguard), but recently it&#39;s been causing my phone&#39;s entire internet access to just not work. Maybe it has to do with DNS, but when I turned off &amp;quot;Use Tailscale DNS&amp;quot; it didn&#39;t help at all. Tailscale did recently do an update, so I kind of think that did something.&lt;/p&gt;
&lt;p&gt;I was able to restore internet access to my phone by checking off every single app and service (besides my SSH app) in the &amp;quot;App split tunneling&amp;quot; section. There is no way to select all. When I want to do web development on my phone now, I have to go in there and uncheck my browser. I tried installing a second browser (Firefox) to only use with Tailscale so that I didn&#39;t have to do that each time. Strangely, when I have either browser unchecked, the &lt;em&gt;other&lt;/em&gt; one &lt;em&gt;also&lt;/em&gt; stops having connectivity.&lt;/p&gt;
&lt;p&gt;It keeps giving me little warning messages like &amp;quot;we can&#39;t connect to Tailscale so your tables might be out of date&amp;quot; or &amp;quot;DNS is unreachable&amp;quot; with no apparent way to read more. Sometimes it works, sometimes it doesn&#39;t. When it does work, it&#39;s often spotty or I&#39;ll have to turn Tailscale off and on again.&lt;/p&gt;
&lt;p&gt;I see a lot of closed issues that look very similar in symptoms to mine with short messages like &amp;quot;fixed&amp;quot; (no explanation), so I don&#39;t know if it&#39;s a regression or just some really common failure mode, but I don&#39;t have much of a way of knowing where to troubleshoot. The debugging messages they have people gather to report are cryptic, and I really prefer to understand what I&#39;m sending people.&lt;/p&gt;
&lt;p&gt;Well. Sometimes that&#39;s the price of magic! So I&#39;m feeling really motivated to figure out Wireguard to access my LAN recently.&lt;/p&gt;
&lt;h3 id=&quot;wireguard-inter-lan-test&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-07-04/#wireguard-inter-lan-test&quot;&gt;Wireguard inter-LAN test&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I installed and configured Wireguard on my laptop using a combination of the &lt;a href=&quot;https://www.wireguard.com/quickstart/&quot;&gt;Wireguard quickstart&lt;/a&gt;, the &lt;a href=&quot;https://documentation.ubuntu.com/server/how-to/wireguard-vpn/troubleshooting/index.html&quot;&gt;Ubuntu server documentation&lt;/a&gt;, and &lt;a href=&quot;https://tech.serhatteker.com/post/2021-01/how-to-set-up-wireguard-client-on-ubuntu-desktop/&quot;&gt;someone&#39;s blog post&lt;/a&gt; (which was helpful in showing me that the casual-friendly &lt;code&gt;wg-quick&lt;/code&gt; command exists, ironically absent in the official quickstart). I feel a lot more confident about the configuration now, but I couldn&#39;t get a handshake with the router. I am equipped to test and troubleshoot now, when before I was just trying to connect through my phone.&lt;/p&gt;
&lt;h3 id=&quot;breaking-and-fixing-openwrt&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-07-04/#breaking-and-fixing-openwrt&quot;&gt;Breaking (and fixing) OpenWRT&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I realized that I hadn&#39;t used the same port for the Wireguard interface on the router and the port forwarding rule. After I... fixed? that, my router started struggling. The Wifi wouldn&#39;t respond, and I couldn&#39;t access the router over the web interface or SSH (even via Ethernet).&lt;/p&gt;
&lt;p&gt;OpenWRT has a &lt;a href=&quot;https://openwrt.org/docs/guide-user/troubleshooting/failsafe_and_factory_reset&quot;&gt;failsafe mode&lt;/a&gt; that you can boot into, but it turns off DHCP. To connect, you have to tell your network card to have a static IP address. That was stressful to figure out how to under pressure, especially when I wasn&#39;t even sure the connection would work when I did get it right!&lt;/p&gt;
&lt;p&gt;Once I did get in, I was able to back up my config. I zipped up the relevant config files as explained in this &lt;a href=&quot;https://fabianlee.org/2018/10/10/openwrt-archive-router-configs-for-backup/&quot;&gt;backing up OpenWRT guide&lt;/a&gt;, but I had to change a couple things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;After logging in for the first time to failsafe mode, it seems that you can&#39;t log in again without a password. Enter didn&#39;t work, and I didn&#39;t know the password if there even was one. This made it hard to zip up the files and then use &lt;code&gt;scp&lt;/code&gt;. I was able to set a temporary password with &lt;code&gt;passwd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;That guide suggests doing the &lt;code&gt;scp&lt;/code&gt; command from the router, which I couldn&#39;t get to work. I think my computer was silently rejecting the request, because it timed out. Not even temporarily opening my firewall worked. Trying to run &lt;code&gt;scp&lt;/code&gt; from my computer gave some error, and through &lt;a href=&quot;https://forum.openwrt.org/t/ash-usr-libexec-sftp-server-not-found-when-using-scp/125772&quot;&gt;an OpenWrt forum post about the same &lt;code&gt;scp&lt;/code&gt; error&lt;/a&gt; I discovered it was because my version of &lt;code&gt;scp&lt;/code&gt; was trying to use &lt;code&gt;sftp&lt;/code&gt; under the hood, which the router doesn&#39;t support. A &lt;code&gt;-O&lt;/code&gt; flag on the command fixed the issue.&lt;/li&gt;
&lt;li&gt;I also want to remind anyone reading this that the resulting backed-up config files contain secrets including Wifi passwords and Wireguard private keys, and they need to be stored accordingly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After backing up, I did a soft factory reset and restored my config files one-by-one. Nothing broke. After installing the Wireguard backage and rebooting to enable it, the problem came back. I was able to delete the Wireguard interface from my config file in failsafe mode and then everything was fine again. I&#39;m going to try again, very cautiously, using the
&lt;a href=&quot;https://openwrt.org/docs/guide-user/services/vpn/wireguard/server&quot;&gt;official OpenWrt Wireguard documentation&lt;/a&gt; (which I hadn&#39;t used before because it doesn&#39;t use the web UI).&lt;/p&gt;
&lt;h2 id=&quot;icecube&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-07-04/#icecube&quot;&gt;Icecube&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We generalized our bitmap font code to allow another font option. Now we have a font trait, to be used for other font formats later. We aren&#39;t entirely sure how to best store the different kinds of fonts. For some reason I don&#39;t remember, it wouldn&#39;t let us put it in a &lt;code&gt;Box&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The default fonts should get to be &lt;code&gt;const&lt;/code&gt;, but &lt;code&gt;image::load_from_memory&lt;/code&gt; wasn&#39;t letting us do that, despite the memory in question being loaded in with &lt;code&gt;include_bytes!&lt;/code&gt;. Not sure if there&#39;s some fundamental reason, or if it&#39;s just because that crate hasn&#39;t made their functions &lt;code&gt;const&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We&#39;ll need to decide which fonts to package with Icecube. Here are some fonts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://not-jam.itch.io/not-jam-font-pack&quot;&gt;Not Jam Font Pack&lt;/a&gt; (CC0, TTF)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sunaku/tamzen-font&quot;&gt;Tamzen Font&lt;/a&gt; (&lt;a href=&quot;https://github.com/sunaku/tamzen-font?tab=License-1-ov-file#readme&quot;&gt;modify and distribute permitted&lt;/a&gt;, multiple formats)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/raymond-w-ko/creep2&quot;&gt;Creep2&lt;/a&gt; (MIT, multiple formats)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/the-moonwitch/Cozette?tab=readme-ov-file&quot;&gt;Cozette&lt;/a&gt; (MIT, multiple formats)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nimblebeastscollective.itch.io/nb-pixel-font-bundle&quot;&gt;Nb Pixel Font Bundle&lt;/a&gt; (CC0, TTF)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nimblebeastscollective.itch.io/nb-pixel-font-bundle-2&quot;&gt;Nb Pixel Font Bundle 2&lt;/a&gt; (CC0, TTF)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://timothyqiu.itch.io/vonwaon-bitmap&quot;&gt;Vonwaon&lt;/a&gt; (CC0, TTF)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;browsers&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-07-04/#browsers&quot;&gt;Browsers&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I built Ladybird. It took a long time, but was surprisingly straightforward. They have a script.&lt;/p&gt;
&lt;p&gt;Through their docs, I learned about &lt;a href=&quot;https://wpt.fyi/&quot;&gt;wpt.fyi&lt;/a&gt;, which is a project that runs all the tests on all the browsers. You can look for failing tests and run them. What a weird, big world browser development must be.&lt;/p&gt;
&lt;p&gt;Since it&#39;s so easy to identify so many bugs, I thought it might be fun to try contributing. But upon reading their code of conduct, I decided I didn&#39;t want to invest a lot of energy into the project. There are so many explicitly welcoming projects that don&#39;t leave me wondering out there that I&#39;d rather focus on.&lt;/p&gt;
&lt;p&gt;I was disappointed, but then my friend and coding buddy John told me about a modular browser engine project called &lt;a href=&quot;https://servo.org/&quot;&gt;Servo&lt;/a&gt;. It seems like it could be a lot nicer. As an added bonus, it&#39;s in Rust, so it would be more fun to mess around with, too! I&#39;ll try building it soon.&lt;/p&gt;
&lt;h2 id=&quot;discoveries&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-07-04/#discoveries&quot;&gt;Discoveries&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Some podcasts I enjoyed this week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://rustacean-station.org/episode/jonathan-kelley/&quot;&gt;Rustacean Station: Dioxus with Jonathan Kelley&lt;/a&gt; I thought the discussion on plugging into the Rust compiler to do hot patching was really cool. I was also excited to hear a cross-platform rust framework putting energy into playing nice with accessibility tools.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.changetechnically.fyi/2396236/episodes/17378968-you-deserve-better-brain-research&quot;&gt;Change, Technically: You deserve better brain research&lt;/a&gt; This was about a paper people were sharing online about &lt;em&gt;your brain on AI&lt;/em&gt;. I try not to let the AI hype machine occupy too much space in my brain so I hadn&#39;t payed much attention to it, but I guess it wasn&#39;t a very well-designed study! It&#39;s fun to listen to people talk about research. The podcast&#39;s backlog has some interesting topics about engineering and people&#39;s brains. I&#39;m looking forward to the one about math anxiety.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://se-radio.net/2025/06/se-radio-672-luca-palmieri-on-rust-in-production/&quot;&gt;Software Engineering Radio: Luca Palmieri on Rust In Production&lt;/a&gt; I had fun listening to this because I&#39;ve had to be thinking about similar issues when preparing to share Accordion Task with other people. I&#39;m always really excited to hear about books for how to do some software skill, but presented through Rust. I might take a look at it later, though it seems more relevant for when you have a backend, and my first web prototype for Accordion Task won&#39;t.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Weekly Update: Friday, June 27, 2025</title>
    <link href="https://quin10ko9.com/log/2025-06-27/"/>
    <updated>2025-06-27T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2025-06-27/</id>
    <summary>
Better code block CSS, building Leptos on NixOS, a no-WASM fallback message in Leptos, among other things I did this week.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Better code block CSS, building Leptos on NixOS, a no-WASM fallback message in Leptos, among other things I did this week.&lt;/p&gt;
&lt;h2 id=&quot;website&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#website&quot;&gt;Website&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I fixed a couple of earlier log entries that had too-long code blocks on mobile. It had forced a horizontal scroll bar to appear. I added wrapping for now. I also tweaked the print CSS styles.&lt;/p&gt;
&lt;p&gt;Excerpt from the &lt;a href=&quot;https://quin10ko9.com/projects/quintens-blog/css/&quot;&gt;CSS Breakdown&lt;/a&gt;, where I explain the changes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id=&quot;code-blocks&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#code-blocks&quot;&gt;Code blocks&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To avoid horizontal scroll for the whole page, especially on mobile, I need to either wrap the code blocks or give them a horizontal overflow. As for what I prefer personally, I think it actually depends on the language. I feel disoriented reading languages with meaningful whitespace and line breaks that have been wrapped like Python or shell commands. Wrapping HTML, for example, feels much less bad.&lt;/p&gt;
&lt;p&gt;I am worried about making people scroll, though. It can be difficult to track lines. On some devices, it&#39;s more of a pain than others. I think that until I learn more, it&#39;s less risky to just wrap.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;pre {
  white-space: pre-wrap;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I chose to put this property on the pre tag instead of the enclosed code tag, because I may someday want to preformat something that isn&#39;t code (like a TUI output, or something). That may or not play nicely with wrapping. It might make sense to have a no-wrap class for exceptions later. But at least this way I won&#39;t accidentally have four-way scrolling on mobile in the mean time!&lt;/p&gt;
&lt;p&gt;There is a danger that the word wrap from white-space may still fail to wrap. It doesn&#39;t address very long single words. As a failsafe, I added horizontal scrolling for overflow (for screens only, because my testing on Firefox showed that it can cut off text when printing.)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;@media screen {
  pre {
    overflow-x: auto;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There is still more I want to do with code blocks. I want a subtle way to more clearly delineate them from the surrounding text. I want to explore my options for full-bleed code blocks to avoid unneeded wrapping on wider screens. (If I wanted to do it without hacks, I think I might have to restructure my current CSS?) But this is a good start.&lt;/p&gt;
&lt;h3 id=&quot;navigation-when-printing&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#navigation-when-printing&quot;&gt;Navigation when printing&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I have hidden navigation in the bottom footer when printing because it isn&#39;t useful information when reading on a page. Examples of this right now are &amp;quot;back&amp;quot; and &amp;quot;first previous inxed next latest&amp;quot;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;@media print {
  footer nav {
    display: none;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&#39;ve kept header navigation visible because &amp;quot;Quinten&#39;s Blog Home&amp;quot; is useful: it tells you which website you&#39;re on. Eventaully, the header navigation might become a breadcrumb navigation. This could also be useful to understand the context of the page.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;accordion-task&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#accordion-task&quot;&gt;Accordion Task&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://quin10ko9.com/projects/accordion/&quot;&gt;Accordion Task&#39;s project page&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;removing-panics&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#removing-panics&quot;&gt;Removing panics&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Over the week I cleaned up the worst of the panicable error handling. My most recent commit explains:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Reduce panic locations in code&lt;/p&gt;
&lt;p&gt;Still some remaining. Tried to move them up to app.rs so that the modules behave well, at least. Some remaining ones are unclear how to handle and suggest to me that I need better models of those areas. It also still panics on DST issues, which I will not be prioritizing.&lt;/p&gt;
&lt;p&gt;I think I&#39;m okay with there being some remaining panics IF I can mitigate data loss in the case of a panic that I had thought would never happen. I&#39;m not sure how to do that yet. It might be more of a priority to work on usability than robustness right
now, considering the nature of the tool.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;building-leptos-on-nixos&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#building-leptos-on-nixos&quot;&gt;Building Leptos on NixOS&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To build &lt;a href=&quot;https://www.leptos.dev/&quot;&gt;Leptos&lt;/a&gt; on my home server so that I can build it from my phone, I had to figure out how to add the &lt;code&gt;wasm32-unknown-unknown&lt;/code&gt; build target to my rust tools. This isn&#39;t as straightforward as installing the normal Rust compiler on NixOS, and I had to figure out how to do it.&lt;/p&gt;
&lt;p&gt;The blog post &lt;a href=&quot;https://ayats.org/blog/nix-rustup&quot;&gt;Nix shell with rustup&lt;/a&gt; was the resource that ended up helping me. I still can&#39;t wrap my head around Nix Flakes (very popular but not yet standard; I don&#39;t want to give up a simple config file approach; its code examples look more complicated), so I really appreciated that this post gave an example for using &lt;a href=&quot;https://github.com/oxalica/rust-overlay&quot;&gt;rust-overlay&lt;/a&gt; for a newbie like me who couldn&#39;t understand the README&#39;s example. It uses &lt;a href=&quot;https://nixos.wiki/wiki/Development_environment_with_nix-shell&quot;&gt;&lt;code&gt;nix-shell&lt;/code&gt;&lt;/a&gt;, which is a way that Nix can control the packages available for a project so that you can reproduce things more easily across machines.&lt;/p&gt;
&lt;p&gt;I had to add a single line to that post&#39;s &amp;quot;classic&amp;quot; example in order to run the server-side-rendering server Leptos recommends for development: &lt;a href=&quot;https://trunkrs.dev/&quot;&gt;Trunk&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-nix&quot;&gt;let
  rust-overlay = builtins.fetchTarball &amp;quot;https://github.com/oxalica/rust-overlay/archive/master.tar.gz&amp;quot;;
  pkgs = import &amp;lt;nixpkgs&amp;gt; {
    overlays = [(import rust-overlay)];
  };
  toolchain = pkgs.rust-bin.fromRustupToolchainFile ./toolchain.toml;
in
  pkgs.mkShell {
    packages = [
      toolchain
+     pkgs.trunk
    ];
  }
# shell.nix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This, along with a &lt;code&gt;toolchain.toml&lt;/code&gt; file containing:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[toolchain]
channel = &amp;quot;nightly&amp;quot;
targets = [&amp;quot;wasm32-unknown-unknown&amp;quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;was all I needed to get building! (I think I&#39;ll try using stable, though. The &lt;code&gt;nix-shell&lt;/code&gt; command checks for updates every time I start a new session, which means that I have to do a fresh rebuild of both my project &lt;em&gt;and&lt;/em&gt; Trunk. It&#39;s possible that &lt;code&gt;nix develop&lt;/code&gt;, the Nix Flakes replacement for &lt;code&gt;nix-shell&lt;/code&gt;, might help with that, too.)&lt;/p&gt;
&lt;p&gt;Since I am developing headless, I need to be able to access the development server from my phone&#39;s web browser. I can&#39;t just use &lt;code&gt;localhost&lt;/code&gt; like I&#39;ll typically do when developing from my laptop. Luckily, I already know how to do this from setting up port forwarding with &lt;a href=&quot;https://caddyserver.com/&quot;&gt;Caddy&lt;/a&gt; in my NixOS config. This way, I can access the page from the url &lt;code&gt;dev.[server name].lan&lt;/code&gt; from any computer on my LAN! I need a short config file to set the port and adress in &lt;code&gt;Trunk.toml&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[serve]
addresses = [&amp;quot;[my server&#39;s IP according to the LAN]&amp;quot;]
port = [an unused port, that I give to Caddy]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;leptos-wasm-fallback-message&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#leptos-wasm-fallback-message&quot;&gt;Leptos WASM fallback message&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Leptos can be used either for server-side rendering (SSR) or client-side rendering (CSR). I have decided to start with CSR because it means that it would be very cheap and easy to share the web version of Accordion Task, especially for users who are not familiar with server technology (which is most of the people in the world).&lt;/p&gt;
&lt;p&gt;A major down side of using Leptos for CSR is that Leptos uses WASM, so it will simply not work when WASM is unavailable. In the &lt;a href=&quot;https://book.leptos.dev/csr_wrapping_up.html&quot;&gt;CSR section of the Leptos book&lt;/a&gt;, it says that when using CSR with Leptos:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;...what’s served is an HTML page with&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the URL of your Leptos app, which has been compiled to WebAssembly (WASM)&lt;/li&gt;
&lt;li&gt;the URL of the JavaScript used to initialize this WASM blob&lt;/li&gt;
&lt;li&gt;an empty &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; element&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the JS and WASM have loaded, Leptos will render your app into the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;. &lt;strong&gt;This means that nothing appears on the screen until JS/WASM have loaded and run.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I can accept that, when writing a program that uses a specific technology at its core, the program will not be availabe without that technology. That is to be expected. What I can &lt;em&gt;not&lt;/em&gt; accept is to not have a helpful little message explaining why the program is unavailable, and maybe some suggestions on where to look when troubleshooting. This bare-minimum of graceful degradation is important to me because I don&#39;t want to feel embarassed when a user encounters such clumsiness, or have someone assume the program is broken and give up if a simple toggle could fix it.&lt;/p&gt;
&lt;p&gt;Fortunately, I was able to come up with a way to add a fallback message. This centers around the fact that Leptos doesn&#39;t actually render an empty &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; element, which it replaces with the Leptos app using WASM (and JS to bootload the WASM). It renders whatever HTML is in an &lt;code&gt;index.html&lt;/code&gt; file in the project root, and then &lt;em&gt;appends&lt;/em&gt; the contents of the webapp to the end of the body.&lt;/p&gt;
&lt;p&gt;First, I put a message to display when JS is disabled. We can use the handy &lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt; tag for this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;body&amp;gt;
  &amp;lt;noscript&amp;gt;
    You don&#39;t have JavaScript enabled! You need JavaScript and WebAssembly enabled to run this webapp.
  &amp;lt;/noscript&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There&#39;s no tag like this for WASM, so we need to display the message and then use WASM to hide it once it&#39;s loaded:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;body&amp;gt;
  ...
  &amp;lt;p id=nowasm&amp;gt;
    This webapp needs WebAssembly to run. It hasn&#39;t loaded yet. Either the WebAssembly is still loading, it failed to load, or WebAssembly is not enabled in your browser.
  &amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To hide it, we need to enable some DOM manipulation features using the WASM library web-sys and its features Document and Element, and call this function at the top of our main function:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;fn remove_nowasm_message() {
  let window = web_sys::window()
    .expect(&amp;quot;global window does not exist&amp;quot;);
  let document = window.document()
    .expect(&amp;quot;expecting a document on window&amp;quot;);
  if let Some(message) = document.get_element_by_id(&amp;quot;nowasm&amp;quot;) {
    message.set_attribute(&amp;quot;hidden&amp;quot;, &amp;quot;true&amp;quot;);
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will make the message display until the WASM runs, and then disappear. However there is an unpleasant flash of the fallback message. This is why it would be nice to have a &lt;code&gt;&amp;lt;nowasm&amp;gt;&lt;/code&gt; tag!&lt;/p&gt;
&lt;p&gt;We can get around this by running a timer before displaying the fallback. Add &lt;code&gt;hidden=true&lt;/code&gt; as a default for the fallback:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;body&amp;gt;
  ...
  &amp;lt;p id=nowasm hidden=true&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then add a script to unhide it after one second:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;head&amp;gt;&amp;lt;script&amp;gt;
  setTimeout(() =&amp;gt; {
    let nowasm = document.getElementById(&amp;quot;nowasm&amp;quot;);
    nowasm.removeAttribube(&amp;quot;hidden&amp;quot;);
  }, &amp;quot;1000&amp;quot;);
&amp;lt;/head&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in the likely event that the WASM function to hide the fallback runs before the one-second timer runs out, the fallback will still appear (above your webapp). To prevent this, we can just change the ID of the element to &lt;code&gt;yeswasm&lt;/code&gt; after hiding it!&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;fn remove_nowasm_message() {
  //...
  if let Some(message) = document.get_element_by_id(&amp;quot;nowasm&amp;quot;) {
    message.set_attribute(&amp;quot;hidden&amp;quot;, &amp;quot;true&amp;quot;);
    message.set_attribute(&amp;quot;id&amp;quot;, &amp;quot;yeswasm&amp;quot;);
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The JS will still run, but won&#39;t be able to find any element with an ID of &lt;code&gt;nowasm&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is almost complete! The only thing I see left is to ensure it doesn&#39;t break for screen readers. I don&#39;t have experience with the details of morphing pages because I haven&#39;t done much DOM manipulation yet. I suspect the answer will be related to &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Guides/Live_regions&quot;&gt;ARIA live regions&lt;/a&gt;. Maybe it should have an &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/alert_role#example_1_making_ready-made_content_inside_an_element_with_an_alert_role_visible&quot;&gt;alert role&lt;/a&gt;? I need to refresh my memory on how screen readers interact with the &lt;code&gt;hidden&lt;/code&gt; attribute, too.&lt;/p&gt;
&lt;p&gt;I&#39;ll share the source code in full as a litte git repo once I&#39;m confident the accessibility is sound.&lt;/p&gt;
&lt;h3 id=&quot;next&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#next&quot;&gt;Next:&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I&#39;ll be working on getting more comfortable with Leptos by remaking a little calculator I made for work in vanilla JavaScript. I&#39;m curious how the experience will compare.&lt;/p&gt;
&lt;h2 id=&quot;icecube&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#icecube&quot;&gt;Icecube&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/crystalsolenoid/icecube&quot;&gt;Icecube&lt;/a&gt; is a spinoff project of &lt;a href=&quot;https://quin10ko9.com/projects/pyx-rusterizer/&quot;&gt;Pyx Rusterizer&lt;/a&gt; so that we can have a low-res, low-color-depth UI to play with our 3D rendering parameters in. John and I managed to add text wrapping to our render pipeline. It works! The video &lt;a href=&quot;https://www.youtube.com/watch?v=by9lQvpvMIc&quot;&gt;How Clay&#39;s UI Layout Algorithm Works&lt;/a&gt; by Nic Barker has been extremely helpful. It&#39;s a delightful, well-animated explainer and I&#39;d recommend it to anyone who&#39;s into that sort of thing. I&#39;m really enjoying the design challenge of turning a C library into (hopefully) ideomatic Rust.&lt;/p&gt;
&lt;h2 id=&quot;self-hosting&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#self-hosting&quot;&gt;Self Hosting&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I set up a separate WiFi for IOT devices this &lt;a href=&quot;https://m.youtube.com/watch?v=UvniZs8q3eU&quot;&gt;video on configuring it with OpenWrt&#39;s GUI&lt;/a&gt; was the gentle reassurance I needed, and a helpful exposure to more networking concepts I&#39;m gradually absorbing. With every device now on my router&#39;s WiFi, I was able to put my ISP&#39;s gateway thingie into plain-old-modem mode. It didn&#39;t magically make Wireguard work, but it&#39;s one less variable for when I get around to more troubleshooting.&lt;/p&gt;
&lt;h2 id=&quot;discoveries&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-27/#discoveries&quot;&gt;Discoveries&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I finished watching the first episode of a &lt;a href=&quot;https://www.youtube.com/watch?v=N544CMR8I-M&quot;&gt;PCB lecture series&lt;/a&gt;. It was really exciting to watch because I was in charge of ordering (already-designed) PCB assemblies at a prior job, and it&#39;s cool to fill in the gaps in my learning from that experience. I found out about this series from a podcast episode: &lt;a href=&quot;https://theamphour.com/693-small-scale-electronics-manufacturing-with-colin-oflynn/&quot;&gt;Small Scale Electronics Manufacturing With Colin O&#39;Flynn&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I enjoyed the most recent episode of the Rust in Production podcast: &lt;a href=&quot;https://corrode.dev/podcast/s04e06-1password/&quot;&gt;1Password with Andrew Burkhart&lt;/a&gt;. I thought it was fun to hear them discuss managing many different build targets and platform-native apps with a core library shared between all of them.&lt;/li&gt;
&lt;li&gt;As I was looking up the current state of the Ladybird browser project, I encountered an online book they recommend to contributors: &lt;a href=&quot;https://browser.engineering/&quot;&gt;Web Browser Engineering by Pavel Panchekha &amp;amp; Chris Harrelson&lt;/a&gt;. It walks you throuhg building a browser from scratch in Python with a usable (if incomplete) browser at each step of the way! I sure have enough on my plate right now, but it seems like a really fun little project.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Weekly Update: Friday, June 20, 2025</title>
    <link href="https://quin10ko9.com/log/2025-06-20/"/>
    <updated>2025-06-20T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2025-06-20/</id>
    <summary>
I am going to try weekly checkins at the beginning of the weekend. With my work schedule these days, I think this is more realistic.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;I am going to try weekly checkins at the beginning of the weekend. With my work schedule these days, I think this is more realistic.&lt;/p&gt;
&lt;h2 id=&quot;accordion-task&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-20/#accordion-task&quot;&gt;Accordion Task&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://quin10ko9.com/projects/accordion/&quot;&gt;Accordion Task&#39;s project page&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;done&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-20/#done&quot;&gt;Done:&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Redesigned the progress bar. Now it progresses when you check off tasks, proportionally to how long the task was originally scheduled to take.&lt;/p&gt;
&lt;p&gt;Went through and addressed most Clippy Pedantic lints. Learned some cool language features I didn&#39;t know about, like this &lt;a href=&quot;https://rust-lang.github.io/rust-clippy/master/index.html#manual_let_else&quot;&gt;lint about &lt;code&gt;let else&lt;/code&gt;&lt;/a&gt;, and this &lt;a href=&quot;https://rust-lang.github.io/rust-clippy/master/index.html?groups=pedantic#unnested_or_patterns&quot;&gt;lint about nesting OR patterns&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Added Clippy Restriction lints to identify prototyping code to clean up (like &lt;code&gt;unwrap&lt;/code&gt;s and &lt;code&gt;dbg&lt;/code&gt;s).&lt;/p&gt;
&lt;p&gt;Decided that I&#39;ll prioritize making a webapp version and keep the TUI experimental for now. I am more experienced making things accessible in the browser than in a terminal emulator, and my wife is interested in trying Accordion Task if there is a browser version. I&#39;m at the point where having detailed feedback from a few people could help me stay on the right track.&lt;/p&gt;
&lt;h3 id=&quot;next&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-20/#next&quot;&gt;Next:&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For fun over the weekend I&#39;m trying to set up &lt;a href=&quot;https://www.leptos.dev/&quot;&gt;Leptos&lt;/a&gt; for a trial and potential later use. I watched a &lt;a href=&quot;https://youtu.be/V1cqQRmVAK0&quot;&gt;video about Leptos&lt;/a&gt; a while ago and thought the syntax looked appealing, and liked how it looks like it gives high control over the final product. I am worried about using WASM because my phone browser doesn&#39;t support it?! It is a new phone with &lt;a href=&quot;https://grapheneos.org/&quot;&gt;GrapheneOS&lt;/a&gt;. I wonder if there&#39;s a setting to turn it on. (Update: It&#39;s &lt;a href=&quot;https://grapheneos.social/@GrapheneOS/112708050929472969&quot;&gt;opt-in on a per-site basis to prevent Just-In-Time JavaScript compilation&lt;/a&gt; for security reasons.) Is there a way to compile WASM to JavaScript for backwards compatability as a fallback?&lt;/p&gt;
&lt;p&gt;I need to figure out how to compile Leptos on NixOS: I might need to look into alternatives to my current simple solution, because I don&#39;t know to target &lt;code&gt;wasm32-unknown-unknown&lt;/code&gt; with the declarative installation yet. Might try &lt;a href=&quot;https://github.com/nix-community/fenix&quot;&gt;fenix&lt;/a&gt;? ...but I still haven&#39;t figured out Flakes (Is it even possible to incrementally adopt them?) yet and that&#39;s probably making things harder.&lt;/p&gt;
&lt;p&gt;I need to work through those Clippy lints to make the code more robust. Probably a good thing to do during my work breaks, because I am worried it might be boring.&lt;/p&gt;
&lt;p&gt;I need to read about RustDoc and different philosophies around code documentation in general. There is a &lt;a href=&quot;https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html&quot;&gt;RustDoc book&lt;/a&gt;, and &lt;a href=&quot;https://www.writethedocs.org/guide/&quot;&gt;Write the Docs has a big guide&lt;/a&gt;, which I might cherrypick from.&lt;/p&gt;
&lt;p&gt;I&#39;m getting so close! Cleaning things up is a huge part of the work, but it feels much better to do it when you&#39;re excited to get to share.&lt;/p&gt;
&lt;h2 id=&quot;self-hosting&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-20/#self-hosting&quot;&gt;Self Hosting&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Set up a guest wifi on its own firewall group. I still need to make one for IOT devices (some home appliances my wife uses apps with), and then I&#39;ll be able to turn my ISP&#39;s gateway into a normal modem. That&#39;s the next step in debugging WireGuard access from my phone to the home server.&lt;/p&gt;
&lt;p&gt;Some WireGuard resources that have been helpful for me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://www.wireguard.com/papers/wireguard.pdf&quot;&gt;original WireGuard research paper&lt;/a&gt; has useful examples. Don&#39;t be scared away by the wall-of-text introduction!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://r.obin.ch/blog/2022/08/05/set-up-wireguard-on-openwrt&quot;&gt;r.obin&#39;s WireGuard for OpenWRT guide&lt;/a&gt; has been helpful in understanding how to attempt setting things up. I can now connect through WireGuard on my home network... from my home network.&lt;/li&gt;
&lt;li&gt;The tip to try using WireGuard locally was very helpful. I got it from this &lt;a href=&quot;https://forum.openwrt.org/t/solved-wireguard-client-with-double-nat/152095/17&quot;&gt;OpenWRT forum post about WireGuard troubleshooting&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Reading about WireGuard has been intimidating because I don&#39;t know the terminology well yet. This &lt;a href=&quot;https://www.procustodibus.com/blog/2020/12/wireguard-terminology/&quot;&gt;WireGuard terminology guide&lt;/a&gt; has been helpful.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learned &lt;a href=&quot;https://nixos.org/manual/nixos/stable/#sec-upgrading&quot;&gt;how to upgrade NixOS&lt;/a&gt; so I could compile Leptos. I hadn&#39;t realized you have to change channels.&lt;/p&gt;
&lt;p&gt;My mom gifted me a small unmanaged network switch. I want to put the printer on it! I need a couple more short Ethernet cables before I can use it.&lt;/p&gt;
&lt;h2 id=&quot;other&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-20/#other&quot;&gt;Other&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My brother is on summer break and wants to play &lt;a href=&quot;https://screeps.com/&quot;&gt;Screeps&lt;/a&gt; with me. I played Screeps when it first came out. I see that you can use any language that compiles to WASM now, so it sounds like a fun time to try again! Last time, I felt very overwhelmed. I bet I&#39;d be so much better at it now because I am better at abstracting and organizing my code. You can self host it. I don&#39;t really want to play with strangers, so maybe I&#39;ll try setting it up on my server.&lt;/p&gt;
&lt;p&gt;I was having fun earlier this month writing about knitting math. I&#39;m drafting it in &lt;a href=&quot;https://typst.app/&quot;&gt;Typst&lt;/a&gt; but would be transcribing it to MathML (I guess? I heard it has better accessibility now, but haven&#39;t done the research yet.) before putting it online. The Typst IDE really is a joy to write in.&lt;/p&gt;
&lt;p&gt;I have to put together some art for an old game. I&#39;ll talk about it more when it&#39;s done!&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.roguelike.club/event2025.html&quot;&gt;Roguelike Celebration&lt;/a&gt; is currently accepting submissions. I have an idea for a talk, but I&#39;m not sure if I&#39;ll submit in time for the deadline because of the surprirse art project (with a deadline) that I have to do now. Either way, it is a delightful online conference and I&#39;m looking forward to attending.&lt;/p&gt;
&lt;h2 id=&quot;discoveries&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2025-06-20/#discoveries&quot;&gt;Discoveries&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I just finished the audio version of &lt;a href=&quot;https://resilientwebdesign.com/&quot;&gt;Resiliant Web Design&lt;/a&gt;. It was a lot of fun. I definitely recommend if you like history or thinking about design. I am thankful for the audio version because I could listen to it at work. I wish more people recorded Creative Commons material for audio.&lt;/li&gt;
&lt;li&gt;There is a new podcast called &lt;a href=&quot;https://lolaslab.co/what-the-spec/&quot;&gt;What the Spec?!&lt;/a&gt; that I&#39;ve been listening to. It&#39;s interviews with web specifications people by someone trying to get into the field. I am enjoying it as someone who cares about accessibility and uses the web. It&#39;s incredibly hard to discover new podcasts unless they&#39;re already really big, so here you go.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://m.youtube.com/playlist?list=PLGlRiJV2fwiMt0mwNkjpLMQobKuRpDLEl&quot;&gt;Inside the Famicom&lt;/a&gt; by &lt;a href=&quot;https://whatskenmaking.com/&quot;&gt;What&#39;s Ken Making&lt;/a&gt; is a series on YouTube that examines the Famicom in delicious detail. I like the presentation that alternates between modalities including oscilloscope, circuit diagrams, close-ups, and animations. As an added bonus, the channel&#39;s opening sequence makes me really happy. It&#39;s just so exciting!&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>HEXAWORM</title>
    <link href="https://quin10ko9.com/projects/hexaworm/"/>
    <updated>2025-05-18T10:06:38Z</updated>
    <id>https://quin10ko9.com/projects/hexaworm/</id>
    <summary></summary>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://www.shadertoy.com/view/DtGBD1&quot;&gt;View live at Shadertoy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A nice little HEXAWORM swimming in a circle. Look at it go! Looks like it&#39;s from an alien planet, or perhaps it&#39;s like those pictures of viruses very close up. My inaugural non-hello-world glsl project.&lt;/p&gt;
&lt;h2 id=&quot;source-code&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/hexaworm/#source-code&quot;&gt;Source code&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-GLSL&quot;&gt;// thanks inigo
// https://iquilezles.org/articles/distfunctions2d/
float sdHexagon( in vec2 p, in float r )
{
    const vec3 k = vec3(-0.866025404,0.5,0.577350269);
    p = abs(p);
    p -= 2.0*min(dot(k.xy,p),0.0)*k.xy;
    p -= vec2(clamp(p.x, -k.z*r, k.z*r), r);
    return length(p)*sign(p.y);
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    // Normalized pixel coordinates (from 0 to 1)
    vec2 uv = fragCoord/iResolution.xy;
    
    vec2 st = (2. * uv - 1.) * vec2(iResolution.x / iResolution.y, 1.);

    // To mess with the signed distance function to make it glow
    float shine = 0.4 + 0.1 * pow(sin(0.600*iTime),2.);
    
    // To spin in place
    float a = .19 * iTime;
    mat2 post_rotation = mat2(-cos(a), sin(a),
                        sin(a) ,    cos(a));

    // Dist needs to be initialized outisde of for loop for scope
    // because we are composing multiple signed distance functions.
    float dist = 1.;
    // Make a bunch of hexagons:
    for (float i = 0.; i &amp;lt; 2.; i+=.1) { // TODO: make the loop conditions parameterized

        // To orbit center
        float b = i + iTime * 0.5;
        mat2 pre_rotation = mat2(-cos(b), sin(b),
                            sin(b) ,    cos(b));
        
        // Find the center of the hexagon:
        // Rotate about origin, offset, and change that offset depending on
        // the time and where you are in the worm, for that sweet undulating motion.
        vec2 p = st + vec2(.5 + 0.05 * sin(6. * i + iTime * 5.)) * pre_rotation;
        
        // Calculate the distance function for this hexagon.
        // The distance function is then taken to the shine&#39;th power
        // (with a few tweaks for where you are in the worm).
        // This ends up giving the outline, but only if we use the magnitude of the
        // distance function as a threshold instead of the actual sign. (See below.)
        float segment_dist =  pow(sdHexagon(p * post_rotation, .1), 0.8 * i * shine);
        
        // Take the minimum of the current distance function and the old one to
        // compose the shapes.
        // Helpful link: https://numfactory.upc.edu/web/Geometria/signedDistances.html
        dist = min(dist,segment_dist);
    }
    
    // Decide on the g component depending on a hard threshold on the distance function.
    // This gives the crisp cyan of the hexagons.
    
    // If the condition on dist was dist == 0, nothing would show up.
    // Not sure entirely why! Do you know? 
    float g;
    if (dist &amp;lt; 0.1) {
        g = 1.;
    } else {
        g = 0.2;
    }
    
    // The b component instead depends on 1/dist, which gives the snazzy dark blue glow.
    float b = pow(0.4 / dist, 2.);
    
    // Output to screen
    fragColor = vec4(
        .0, g * 0.4 , b,1.
    );

}
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <title>Accordion Task</title>
    <link href="https://quin10ko9.com/projects/accordion/"/>
    <updated>2025-05-18T09:40:25Z</updated>
    <id>https://quin10ko9.com/projects/accordion/</id>
    <summary></summary>
    <content xml:lang="en" type="html">&lt;p&gt;A personal routine scheduler with flexible timing. If something goes wrong, the scheduler should be able to adjust the rest of the task durations to accomodate. Written in Rust with &lt;a href=&quot;https://ratatui.rs/&quot;&gt;Ratatui&lt;/a&gt;. A TUI was chosen to keep things distraction-free and hopefully low-latency, as these are essential features.&lt;/p&gt;
&lt;p&gt;I am to the point where I am using this daily myself. It&#39;s really helpful to offload the getting-ready part of my brain when I&#39;m groggy in the morning. By the time I&#39;m done with the program guiding me through getting ready for the day, I feel much more awake. Right now I use the app &lt;a href=&quot;https://termius.com/&quot;&gt;terminus&lt;/a&gt; on my phone to SSH into my computer to run it. Eventually there will probably be a webapp version, especially once I&#39;m ready to share with other users!&lt;/p&gt;
&lt;p&gt;Routines are be stored as portable, human-editable CSV files. Log files are generated for every time a routine is run. The goal of that is to set things up in the future for additional UNIX-philosophy-style tools that can adjust the times budgeted for each task with whatever method the user desires.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Resume Template</title>
    <link href="https://quin10ko9.com/projects/resume-template/"/>
    <updated>2024-11-10T06:48:05Z</updated>
    <id>https://quin10ko9.com/projects/resume-template/</id>
    <summary></summary>
    <content xml:lang="en" type="html">&lt;p&gt;A Typst resume template for anyone who wants to use or modify it. I got started with Typst a couple of days before and threw this together based on my old LaTeX resume.&lt;/p&gt;
&lt;p&gt;Since creating my resume in Typst, I&#39;ve had to go back and update or customize it a few times. It has felt much less cumbersome to do so with this template (and in Typst in general) than it was when I was fighting LaTeX or MS Word.&lt;/p&gt;
&lt;h2 id=&quot;usage&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/resume-template/#usage&quot;&gt;Usage&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Define individual items in items.typ, add these items to the section lists in sections.typ, and customize the order of the sections in main.typ. If you open this in the &lt;a href=&quot;https://typst.app/&quot;&gt;Typst web editor&lt;/a&gt; and double-click on any of the text in the preview output, it will jump you to the point in the code to edit it.&lt;/p&gt;
&lt;p&gt;I recommend making variables at the top of items.typ for things like schools and cities, if any of those repeat often in your resume data.&lt;/p&gt;
&lt;h2 id=&quot;limitations&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/resume-template/#limitations&quot;&gt;Limitations&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The positioning of the (optional) links in the projects section is a little weird. If your project titles are too long, you&#39;ll have to adjust the position manually. Suggestions welcome.&lt;/p&gt;
&lt;h2 id=&quot;other-information&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/resume-template/#other-information&quot;&gt;Other Information&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SVG&#39;s are from the free pack at &lt;a href=&quot;https://fontawesome.com/download&quot;&gt;Font Awesome&lt;/a&gt;. I only included the ones I used.&lt;/p&gt;
&lt;p&gt;Thank you to my wife for supplying Discworld trivia for the sample resume. I have no idea who Contemplate Mibbons is, but I like the idea that silly academia wizards do weather analysis in Rust.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Rat Maze 3D Screensaver</title>
    <link href="https://quin10ko9.com/projects/maze/"/>
    <updated>2024-11-09T07:42:56Z</updated>
    <id>https://quin10ko9.com/projects/maze/</id>
    <summary></summary>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://www.lexaloffle.com/bbs/?tid=141402&quot;&gt;Play and view source code&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;notes-from-lexaloffle&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#notes-from-lexaloffle&quot;&gt;Notes from &lt;a href=&quot;https://www.lexaloffle.com/bbs/?tid=141402&quot;&gt;Lexaloffle&lt;/a&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Okay, somebody has to do it. I&#39;m going to try making a version of the 3D Maze.&lt;/p&gt;
&lt;p&gt;Update: This is usable as a screensaver now! There are more features from the original to implement, but I think it&#39;s already pretty fun as-is.&lt;/p&gt;
&lt;h3 id=&quot;controls&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#controls&quot;&gt;Controls&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Press a to toggle automatic mode (on by default).&lt;/li&gt;
&lt;li&gt;Out of automatic mode: Up/down keys to go forward/backward, left/right keys to turn, z/x keys to strafe.&lt;/li&gt;
&lt;li&gt;In either mode: Press m to toggle map view and raycast render. Press s to display CPU and RAM usage.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;warning&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#warning&quot;&gt;Warning&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;[Picotron simulated] CPU usage is about 100%. The raycasting is expensive and I haven&#39;t felt like optimizing it yet because this project is for fun and that isn&#39;t where the fun is right now. I think it runs plenty smooth (60fps is overrated), but if your fantasy computer tends to overheat or you have big computations running in the background that you don&#39;t want your screensaver slowing down, watch out! :)&lt;/p&gt;
&lt;h3 id=&quot;changelog&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&quot;version-13&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#version-13&quot;&gt;Version 1.3&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Added a cute little rat that runs around the maze. See if you can spot it! (Are you a rat, too?)&lt;/p&gt;
&lt;h4 id=&quot;version-12&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#version-12&quot;&gt;Version 1.2&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Performance improvements from like 120% to 100%. Mostly moving some things out of loops and caching repeated calculations. Also turned the player&#39;s position into a vector. This was a slightly anti-performance improvement, but non-raycasting CPU is at 5% so the code clarity is very worth it.&lt;/p&gt;
&lt;h4 id=&quot;version-11&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#version-11&quot;&gt;Version 1.1&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Added random maze generation! Using a plain old &lt;a href=&quot;https://professor-l.github.io/mazes/&quot;&gt;backtracking algorithm&lt;/a&gt;. (Let me know if you have any idea what algorithm the original rat maze used.) Fixed a bug where you got stuck in an infinite spin if initially facing the wall in a left-to-right hallway. You now start in a random position in the maze. Press &amp;quot;s&amp;quot; to pull up CPU and RAM stats. Press &amp;quot;m&amp;quot; to switch to an overhead view (was previously &amp;quot;enter&amp;quot;).&lt;/p&gt;
&lt;h4 id=&quot;version-10&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#version-10&quot;&gt;Version 1.0&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Changed textures and floor/ceiling to match the real screensaver. Added an automatic mode, which is on by default. This is the screensaver mode, where the player automatically follows the right wall in the maze. Added a maze, but it&#39;s always the same. Randomly generated mazes will come in a future update.&lt;/p&gt;
&lt;h4 id=&quot;version-05&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#version-05&quot;&gt;Version 0.5&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Textured walls now pick their texture based on the map data.&lt;/p&gt;
&lt;h4 id=&quot;version-04&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#version-04&quot;&gt;Version 0.4&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Implemented textured walls. It is very slow, but I haven&#39;t done any optimization yet so there&#39;s still hope. Changed movement to feel more natural in first-person mode.&lt;/p&gt;
&lt;p&gt;Currently drawing pixel by pixel because I need to learn how to draw only a vertical slice of a sprite (userdata). Does anyone know how? The userdata docs are a little over my head.&lt;/p&gt;
&lt;h4 id=&quot;version-031&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#version-031&quot;&gt;Version 0.3.1&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Fixed an off-by-one bug that was causing some walls to be studded with spikes. What a relief.&lt;/p&gt;
&lt;h4 id=&quot;version-03&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#version-03&quot;&gt;Version 0.3&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Calculate which wall is closer (vertical or horizontal). Add raycast view (press Enter to switch to it). I&#39;m getting a weird spike artifact in the render. Colored vertical and horizontal walls differently, revealing that the incorrect wall is identified as &amp;quot;closer&amp;quot; during the spikes. I don&#39;t know what&#39;s causing that to happen. Finished Part 9 (drawing walls) of Permadi tutorial.&lt;/p&gt;
&lt;h4 id=&quot;version-02&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/maze/#version-02&quot;&gt;Version 0.2&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;First public version. Finished Part 7 (finding wall intersections) of Permadi tutorial.&lt;/p&gt;
&lt;p&gt;I&#39;m going to start by working through &lt;a href=&quot;https://permadi.com/1996/05/ray-casting-tutorial-table-of-contents/&quot;&gt;Permadi&#39;s 1996 Ray Casting Tutorial&lt;/a&gt;. It&#39;s really cool to be implementing such an old graphics tutorial. Anyone know of any other gems out there?&lt;/p&gt;
&lt;p&gt;Question for those with more PICO8 experience than me: Is it worth using bit shift operations instead of multiplication/division by a power of two? I&#39;m keeping it as-is for now for readability reasons, but after the raycasting logic is finished, it might be fun to see if it speeds it up.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Shell Script: Daily Log Opener</title>
    <link href="https://quin10ko9.com/projects/quintens-blog/daily-log-opener/"/>
    <updated>2024-11-09T06:36:39Z</updated>
    <id>https://quin10ko9.com/projects/quintens-blog/daily-log-opener/</id>
    <summary></summary>
    <content xml:lang="en" type="html">&lt;p&gt;On &lt;a href=&quot;https://quin10ko9.com/log/2023-10-28&quot;&gt;October 28th&lt;/a&gt;, I mentioned that I had written a little script that allowed me to quickly and easily create or open my daily log entry for the day. I was inspired to do this because of a similar feature in &lt;a href=&quot;https://obsidian.md/&quot;&gt;Obsidian&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;algorithm&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/quintens-blog/daily-log-opener/#algorithm&quot;&gt;Algorithm&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Get the date and time&lt;/li&gt;
&lt;li&gt;If it&#39;s very early in the morning, use yesterday&#39;s date&lt;/li&gt;
&lt;li&gt;Generate a filename based on the date (YYYY-mm-dd).md&lt;/li&gt;
&lt;li&gt;Announce the name and location (in the configured folder) of the file&lt;/li&gt;
&lt;li&gt;Check if a file of that name already exists
&lt;ul&gt;
&lt;li&gt;If it does exist, open it&lt;/li&gt;
&lt;li&gt;If it doesn&#39;t exist,
&lt;ol&gt;
&lt;li&gt;Take the template&lt;/li&gt;
&lt;li&gt;Replace all instances of &lt;code&gt;{{date}}&lt;/code&gt; with the date&lt;/li&gt;
&lt;li&gt;Put the output in a new file&lt;/li&gt;
&lt;li&gt;Open the file&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;configuration&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/quintens-blog/daily-log-opener/#configuration&quot;&gt;Configuration&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I would love to make this script pleasant and useful enough for someone else to get to use! In the hopes of that, I&#39;ve added in some configurations at the top of the script. I wonder how configuration files work, and if that might be better in the long run.&lt;/p&gt;
&lt;p&gt;Here&#39;s what can be configured right now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;editor&lt;/strong&gt; (can be any terminal command; mine is vim)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hour&lt;/strong&gt; past midnight to change the day (6 for 6am for me, because I&#39;ll never wake up before then)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;folder&lt;/strong&gt; save location for the log entries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;template&lt;/strong&gt; location&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;code&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/quintens-blog/daily-log-opener/#code&quot;&gt;Code&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here, I&#39;ll break down the script code.&lt;/p&gt;
&lt;h3 id=&quot;scripting-language&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/quintens-blog/daily-log-opener/#scripting-language&quot;&gt;Scripting language&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/bin/zsh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&#39;m not sure if this should be bash or zsh. I use zsh, and when I tried to run the script explicitly with bash, it still told me it was using zsh. All of the resources I used for syntax were about bash. Not sure what to do!&lt;/p&gt;
&lt;h3 id=&quot;configuration-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/quintens-blog/daily-log-opener/#configuration-1&quot;&gt;Configuration&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# What editor command would you like to use?
EDITOR=vim

# When do you want to acknowledge it&#39;s tomorrow? (24h fmt)
DAYCHANGE=6

# What directory will log entries go in?
FOLDER=&amp;quot;.../log/entries&amp;quot;

# If you have a template, where is it?
TEMPLATE=&amp;quot;.../log/entries/template.md&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I need to add a check to behave properly when no template variable is set. I&#39;m not sure how it would fail right now.&lt;/p&gt;
&lt;h3 id=&quot;date-and-time&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/quintens-blog/daily-log-opener/#date-and-time&quot;&gt;Date and Time&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;DATE=$(date +&amp;quot;%Y-%m-%d&amp;quot;)
HOUR=$(date +&amp;quot;%H&amp;quot;)

if [[ $HOUR -lt $DAYCHANGE ]]
then
  # It&#39;s still late, so pretend it&#39;s still yesterday.
  DATE=$(date -d yesterday +&amp;quot;%Y-%m-%d&amp;quot;)
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I was very impressed about the &lt;a href=&quot;https://tecadmin.net/get-current-date-and-time-in-bash/&quot;&gt;date&lt;/a&gt; command. It&#39;s so easy and simple to use!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://linuxize.com/post/bash-if-else-statement/&quot;&gt;If statements&lt;/a&gt; and comparison operators have a strange syntax. I&#39;m not sure if I&#39;ve ever seen it before. I don&#39;t understand what double brackets versus single brackets means. Below, I use single because it&#39;s from a different tutorial. &lt;a href=&quot;https://linuxize.com/post/bash-check-if-file-exists/&quot;&gt;Apparently it can be good for backwards compatability to do the single brackets&lt;/a&gt;, but I get an error when doing that up here.&lt;/p&gt;
&lt;p&gt;Instead of doing the math of what yesterday was, I just call date again. It&#39;s cheap, and handles all of the special exceptions itself.&lt;/p&gt;
&lt;h3 id=&quot;file-creation&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/quintens-blog/daily-log-opener/#file-creation&quot;&gt;File Creation&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;FILE=&amp;quot;$FOLDER/$DATE.md&amp;quot;

if [ ! -f &amp;quot;$FILE&amp;quot; ]; then
  # Log entry file doesn&#39;t exist,
  # so generate one from the template.
  echo &amp;quot;Creating $DATE at $FOLDER&amp;quot;
  sed &amp;quot;s/{{date}}/$DATE/g&amp;quot; &amp;quot;$TEMPLATE&amp;quot; &amp;gt;&amp;gt; &amp;quot;$FILE&amp;quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&#39;m glad to know how to &lt;a href=&quot;https://linuxize.com/post/bash-check-if-file-exists/&quot;&gt;check if a file exists&lt;/a&gt; now, because I wouldn&#39;t want to overwrite anything important.&lt;/p&gt;
&lt;p&gt;I used &lt;a href=&quot;https://linuxize.com/post/how-to-use-sed-to-find-and-replace-string-in-files/&quot;&gt;sed&lt;/a&gt; to find and replace all occurrences of &lt;code&gt;{{date}}&lt;/code&gt; in the template. (The double quotes are important for using varialbes.) It appends the output to the (nonexistent) file to create and populate it. I chose to append instead of replace the contents, just in case I encounter a bug someday and run into data loss. This way, it&#39;s safer.&lt;/p&gt;
&lt;p&gt;I wonder how much work it would be to add a verbosity option. I don&#39;t think it should announce every time it creates a file, but I&#39;m keeping it now for my trialing period.&lt;/p&gt;
&lt;h3 id=&quot;opening&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/quintens-blog/daily-log-opener/#opening&quot;&gt;Opening&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$EDITOR &amp;quot;$FILE&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally, the file is opened. I love that you can have a whole command as a variable like this, because it&#39;s just text replacement!&lt;/p&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/projects/quintens-blog/daily-log-opener/#next-steps&quot;&gt;Next Steps&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have some cleaning up to do, and then I&#39;ll post it on GitHub.&lt;/p&gt;
&lt;p&gt;On my system, I have to remind myself how to add a script to the list of scripts that will run without specifying their location. An &#39;alias&#39;, is it called?&lt;/p&gt;
&lt;p&gt;I find myself wanting a similar tool that commits daily logs to git. My commit messages are very formulaic, so it should work well. Maybe it can be an optional feature of this tool, so that I never forget.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Glitter Jar</title>
    <link href="https://quin10ko9.com/projects/glitter-jar/"/>
    <updated>2024-02-17T00:12:33Z</updated>
    <id>https://quin10ko9.com/projects/glitter-jar/</id>
    <summary></summary>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://quin10ko9.com/projects/glitter-jar/glitter-jar.webm&quot;&gt;video&lt;/a&gt; (framerate looks off, but you can get an idea)&lt;/p&gt;
&lt;p&gt;This was my final project for Intro to Graphics. I was told I wasn&#39;t allowed to just turn the project into a physics simulation: most of the computation had to be graphics-related. We got to present our projects to a panel of local judges from industry, and I was given the award for &amp;quot;Best Smoke and Mirrors&amp;quot; due to all the tricks I used to make things convincing enough on a low computational budget.&lt;/p&gt;
&lt;p&gt;Instead, I went through my physics textbooks to find inspiration to make something &lt;em&gt;look&lt;/em&gt; convincing without actually having to &lt;em&gt;simulate&lt;/em&gt; it. I found a description of the steady-state distribution of particles in a liquid due to gravity and statistical mechanics, and used that as a bias for my random glitter positioning.&lt;/p&gt;
&lt;p&gt;I found that it didn&#39;t feel as busy as a real glitter jar with just the larger glitter particles (rendered with triangles) unless I had so many glitter particles on the screen that everything lagged. To solve this problem, I decided to render tiny glitter as little dots on a cylindrical texture.&lt;/p&gt;
&lt;p&gt;To evoke the feeling of very lightweight glitter particles, I had these glitter dots do a meandering random walk (a gaussian distribution in velocity) that was calculated live. However I discovered that I could easily get away with having a smaller number of particles and tile them. The world of the glitter particle is a flat torus, which allows for convincing repeats in the texture. The repeats are visible when the texture is viewed by itself, but with the rest of the glitter it becomes much less obvious.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Replica TI-2550</title>
    <link href="https://quin10ko9.com/projects/replica-ti2550/"/>
    <updated>2024-02-16T23:09:49Z</updated>
    <id>https://quin10ko9.com/projects/replica-ti2550/</id>
    <summary></summary>
    <content xml:lang="en" type="html">&lt;p&gt;&lt;a href=&quot;https://crystalsolenoid.github.io/odin-calculator/&quot;&gt;view live&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A JavaScript calculator.&lt;/p&gt;
&lt;p&gt;Font for the digital display is DIGITAL-7 by Sizenko Alexander. The DIGITAL-7 README with license information has been made available in this repo in the digital_7 folder.&lt;/p&gt;
&lt;p&gt;This calculator is modeled off of the &lt;a href=&quot;https://americanhistory.si.edu/collections/search/object/nmah_1364040&quot;&gt;TI-2550&lt;/a&gt;, an early handheld calculator from the mid 70s with beautiful sky blue and orange accent buttons.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Taming Project Footage: Saturday, February 10, 2024</title>
    <link href="https://quin10ko9.com/log/2024-02-10/"/>
    <updated>2024-02-10T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2024-02-10/</id>
    <summary>
Documented the ways I currently record video footage of my projects.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Documented the ways I currently record video footage of my projects.&lt;/p&gt;
&lt;p&gt;Sometimes I would like to record one of my projects in action in order to share and preserve its behavior. I want this to be as low-friction as possible. It may be rewarding, but it&#39;s also a documentation task. Documentation tasks can be hard to prioritize unless you make the activation energy low. Writing down my process here is a way for me to make it easier in the future.&lt;/p&gt;
&lt;h2 id=&quot;linux-mint-video-screencapture-with-ffmpeg-for-processing&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2024-02-10/#linux-mint-video-screencapture-with-ffmpeg-for-processing&quot;&gt;Linux Mint Video Screencapture with FFmpeg for Processing&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;screencapture&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2024-02-10/#screencapture&quot;&gt;Screencapture&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I&#39;m currently using Linux Mint: &lt;a href=&quot;https://linuxmint-installation-guide.readthedocs.io/en/latest/choose.html&quot;&gt;Cinnamon Edition&lt;/a&gt;. When I press &lt;code&gt;Ctrl + Alt + Shift + R&lt;/code&gt;, a little recording indicator shows up in the status panel, indicating that recording has started. Pressing this combination again ends the recording session.&lt;/p&gt;
&lt;p&gt;The resultant videos show up in my &lt;code&gt;~/Videos&lt;/code&gt; directory as &lt;code&gt;.webm&lt;/code&gt; files. The videos include the mouse cursor and capture the whole screen. I don&#39;t know how to configure output.&lt;/p&gt;
&lt;h3 id=&quot;cropping&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2024-02-10/#cropping&quot;&gt;Cropping&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I usually need to crop these raw output videos. I found this article on &lt;a href=&quot;https://www.linuxuprising.com/2020/01/ffmpeg-how-to-crop-videos-with-examples.html&quot;&gt;cropping videos with FFmpeg&lt;/a&gt; helpful for this task.&lt;/p&gt;
&lt;p&gt;FFmpeg is powerful. It&#39;s popular enough that it&#39;s probably already installed on your computer for some dependency. Because of this, I would like to get more familiar with its CLI.&lt;/p&gt;
&lt;p&gt;As explained in that article, we can preview a video crop without having to process the whole video.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ffplay -vf &amp;quot;crop=w:h:x:y&amp;quot; input.webm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Replace &lt;code&gt;w:h:x:y&lt;/code&gt; with your values. To find these values, I just do a manual binary search, trying different values until I get the correct crop. This is a point where a simple GUI selector tool could be useful.&lt;/p&gt;
&lt;p&gt;Once you&#39;ve found your values, do the real crop.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ffmpeg -i input.webm -vf &amp;quot;crop=500:800:0:120&amp;quot; output.webm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The order of the arguments matters: the input flag and value must come before the video filter flag and value.&lt;/p&gt;
&lt;h3 id=&quot;conversion&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2024-02-10/#conversion&quot;&gt;Conversion&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;FFmpeg makes format conversion very simple. (See the &lt;a href=&quot;https://ffmpeg-api.com/learn/ffmpeg/guide/format-conversion&quot;&gt;FFmpeg file format conversion documentation&lt;/a&gt;.)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ffmpeg -i input.webm output.gif
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However simplicity comes with a price. I tested this with my 3D Glitter Jar project and the output gif was intensely dithered and much larger in file size than the original webm. It could be that the gif format just isn&#39;t suitable for this video due to the gradients and high detail, or it could be that customized compression settings might have helped.&lt;/p&gt;
&lt;p&gt;For now, you&#39;ll have to settle for stills and a link to a video. A less dramatic conversion leap (from a modern video format to another modern video format) would probably fare much better. Gifs are weird and old.&lt;/p&gt;
&lt;h2 id=&quot;godot-screencapture&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2024-02-10/#godot-screencapture&quot;&gt;Godot Screencapture&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have been playing with &lt;a href=&quot;https://godotengine.org/&quot;&gt;Godot 4&lt;/a&gt; recently to learn how professionals organize larger projects. I&#39;m still feeling a little of the friction that comes with using a new system, but I can tell that it will allow me to prototype ideas much quicker once I get comfortable.&lt;/p&gt;
&lt;p&gt;One thing I really like about Godot is the built in screen capture functionality: &lt;a href=&quot;https://godotengine.org/article/movie-maker-mode-arrives-in-godot-4/&quot;&gt;movie maker mode&lt;/a&gt;. Movie maker mode is described as something fancy for making trailers and pre-recorded cutscenes, but I like that it&#39;s simple and built in. I use it for making a quick video when I&#39;ve gotten something cool working and want to share with friends.&lt;/p&gt;
&lt;h2 id=&quot;custom-gif-program-output&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2024-02-10/#custom-gif-program-output&quot;&gt;Custom Gif Program Output&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;bitsy&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2024-02-10/#bitsy&quot;&gt;Bitsy&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://bitsy.org/&quot;&gt;Bitsy&lt;/a&gt; is a tiny game engine that restricts you to three colors per room, low resolution, and two-frame animations. The Bitsy editor has a built-in tool to record gifs.&lt;/p&gt;
&lt;p&gt;Gifs respond well to a limited color palette and short, subtle animation. They are lossless and allow basic compression. These traits make it perfect for Bitsy and other low-res, low-color situations.&lt;/p&gt;
&lt;p&gt;Bitsy can output both a gif recording and a gif &amp;quot;snapshot&amp;quot;. A snapshot records a two-frame gif, which captures the idle behavior of a Bitsy room in a tiny, perfectly looping gif.&lt;/p&gt;
&lt;h3 id=&quot;pyx-rasterizer&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2024-02-10/#pyx-rasterizer&quot;&gt;Pyx Rasterizer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;John and I are currently working on making a perfectly looping custom gif exporter from scratch for our &lt;a href=&quot;https://quin10ko9.com/log/2024-02-10/projects/pyx-rasterizer/&quot;&gt;Pyx Rasterizer&lt;/a&gt; 16-color, low-res 3D rendering project in &lt;a href=&quot;https://github.com/kitao/pyxel&quot;&gt;Pyxel&lt;/a&gt;, following the wonderfully readable description of the gif file format &lt;a href=&quot;https://giflib.sourceforge.net/whatsinagif/index.html&quot;&gt;What&#39;s In a Gif&lt;/a&gt;. Our Pyx Rasterizer project is all about understanding things by building them from scratch, and this is a great continuation of that goal.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Tuesday, October 31, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-31/"/>
    <updated>2023-10-31T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-31/</id>
    <summary>
Tried a plugin for Markdown task lists. Wasn&#39;t satisfied with output accessibility. Discussed alternative outputs.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Tried a plugin for Markdown task lists. Wasn&#39;t satisfied with output accessibility. Discussed alternative outputs.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-31/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Enable markdown checkbox lists in eleventy (haha, that went &lt;strong&gt;long&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Write up daily log script&lt;/li&gt;
&lt;li&gt;Go over what else I want to do&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;markdown-checkboxes&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-31/#markdown-checkboxes&quot;&gt;Markdown Checkboxes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I would like to be able to keep track of which tasks in my past Task Ideas have been completed. I think a good way to do this would be to use a markdown task list and add a link to the daily log entry of the day when I completed the task.&lt;/p&gt;
&lt;p&gt;Eleventy&#39;s default markdown is strict to the &lt;a href=&quot;https://markdownguide.offshoot.io/basic-syntax/&quot;&gt;original markdown standard&lt;/a&gt;, so I need to modify it in order to use the task list feature. I&#39;m going to try this tutorial on &lt;a href=&quot;https://craigofnz.github.io/posts/2023/extending-eleventy-markdown/&quot;&gt;extending eleventy markdown&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&#39;m getting an error that markdownIt is not defined. It looks like the author of that blog didn&#39;t include the definition of that varibale. From the &lt;a href=&quot;https://www.11ty.dev/docs/languages/markdown/#optional-set-your-own-library-instance&quot;&gt;official eleventy markdown doc page&lt;/a&gt;, it looks like I have to require the &lt;code&gt;markdown-it&lt;/code&gt; library and set it to that variable.&lt;/p&gt;
&lt;h3 id=&quot;plugin-output&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-31/#plugin-output&quot;&gt;Plugin Output&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;With that out of the way, it is now working properly. Here is the output:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-HTML&quot;&gt;&amp;lt;ul class=&amp;quot;contains-task-list&amp;quot;&amp;gt;
  &amp;lt;li class=&amp;quot;task-list-item&amp;quot;&amp;gt;
    &amp;lt;input class=&amp;quot;task-list-item-checkbox&amp;quot; disabled=&amp;quot;&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;gt;
    This is a task.
  &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li&gt;
&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; /&gt;
   This is a task.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I do not like this. It seems semantically mismatched to use an input field for a checked-off task. Even if it were properly accessible today (which I&#39;m skeptical of), it wouldn&#39;t be very future-proof. Designers of tomorrow will not be thinking about clever edge cases when maintaining backwards compatability.&lt;/p&gt;
&lt;h3 id=&quot;unicode-instead&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-31/#unicode-instead&quot;&gt;Unicode Instead&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I want something like this:&lt;/p&gt;
&lt;ul class=&quot;task-list&quot;&gt;
  &lt;li class=&quot;checked&quot;&gt;
    &amp;check; This is a task.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&#39;m not sure about how robust the checkmark unicode symbol would be with a screen reader. Emojis and unicode can have inintended problems on screen readers. For an example, see the &amp;quot;Screen Readers Do Not See What You See&amp;quot; section of &lt;a href=&quot;https://adrianroselli.com/2021/10/blaming-screen-readers-red-flag.html&quot;&gt;Blaming Screen Readers 🚩 x5&lt;/a&gt; by Adrian Roselli, which shows some examples of cryptic, annoying social media memes that use unicode symbols for decoration.&lt;/p&gt;
&lt;p&gt;Most relevant to my decision making today is that the emoji 🚩 is not read as &amp;quot;red flag emoji&amp;quot;, but as &amp;quot;triangular flag on post&amp;quot;. &lt;strong&gt;When unicode symbols are used in a way that doesn&#39;t match their semantic meaning, screen readers may say something completely irrelevant.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This has motivated me to use the &amp;quot;check mark&amp;quot; unicode symbol ✓ instead of the &amp;quot;ballot box check&amp;quot; ☑. After trying it, I do think that it&#39;s nicer looking to use unboxed checkmarks on completed tasks, and nothing on uncompleted tasks. There&#39;s less visual clutter.&lt;/p&gt;
&lt;h3 id=&quot;unicode-with-aria&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-31/#unicode-with-aria&quot;&gt;Unicode with Aria&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If I really wanted the ballot box check, there are options to try. I&#39;ve seen some workarounds including the example from this &lt;a href=&quot;https://www.litmus.com/blog/special-characters-emojis-line-breaks-more-tricks-for-optimizing-your-emails-for-screen-readers&quot;&gt;article on accessible emoji in email&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-HTML&quot;&gt;We &amp;lt;span role=&amp;quot;img&amp;quot; aria-label=&amp;quot;love&amp;quot;&amp;gt;❤️&amp;lt;/span&amp;gt; email!
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;which makes the heart say &amp;quot;love&amp;quot; as intended, instead of &amp;quot;red heart&amp;quot;.&lt;/p&gt;
&lt;p&gt;Another approach would be to completely hide the ballot box check from the screen reader using &lt;code&gt;aria-hidden&lt;/code&gt;. The article mentioned above about emails has a great example of this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-HTML&quot;&gt;We &amp;lt;span aria-hidden=&amp;quot;true&amp;quot;&amp;gt;👏&amp;lt;/span&amp;gt;
love &amp;lt;span aria-hidden=&amp;quot;true&amp;quot;&amp;gt;👏&amp;lt;/span&amp;gt;
email! &amp;lt;span aria-hidden=&amp;quot;true&amp;quot;&amp;gt;👏&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;adding-redundancy-with-plain-text&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-31/#adding-redundancy-with-plain-text&quot;&gt;Adding Redundancy with Plain Text&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If applying this to my task list application, I would try something like the following:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-HTML&quot;&gt;&amp;lt;ul class=&amp;quot;task-list&amp;quot;&amp;gt;
  &amp;lt;li class=&amp;quot;checked&amp;quot;&amp;gt;
    &amp;lt;span aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;amp;check;&amp;lt;/span&amp;gt;
    This is a task.
    &amp;lt;a href=2023-10-31&amp;gt;Completed 2023-10-31&amp;lt;/a&amp;gt;
  &amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;
    This is a task I didn&#39;t finish.
  &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul class=&quot;task-list&quot;&gt;
  &lt;li class=&quot;checked&quot;&gt;
    &lt;span aria-hidden=&quot;true&quot;&gt;&amp;check;&lt;/span&gt; This is a task. &lt;a href=&quot;https://quin10ko9.com/log/2023-10-31/2023-10-31&quot;&gt;Completed 2023-10-31&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    This is a task I didn&#39;t finish.
  &lt;/li&gt;
&lt;/ul&gt;
The checkmark will not be read aloud. However I have added a link &quot;Completed 2023-10-31&quot;. This achieves three things:
&lt;ol&gt;
&lt;li&gt;Reads clearly on a screen reader, so the unicode checkmark does not need to communicate the information.&lt;/li&gt;
&lt;li&gt;Could remove ambiguity for sighted readers. This is especially important for readers with &lt;a href=&quot;https://www.w3.org/TR/coga-usable/&quot;&gt;cognitive or learning disabilities&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Is an opportunity to add additional helpful information for everyone. Having a date and a link to the post where I discuss completing the task could be very helpful for someone who wants to know how I solved a problem.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I want to keep the checkmark because it helps with skimming.&lt;/p&gt;
&lt;h3 id=&quot;keeping-html-clean-with-css-before&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-31/#keeping-html-clean-with-css-before&quot;&gt;Keeping HTML Clean with CSS &lt;code&gt;::before&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Using the CSS pseudo-object &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/::before&quot;&gt;::before&lt;/a&gt;, it&#39;s possible to keep the checkmark entirely out of the HTML. It can be drawn before every object that has the &amp;quot;checked&amp;quot; class.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-HTML&quot;&gt;&amp;lt;ul class=&amp;quot;task-list&amp;quot;&amp;gt;
  &amp;lt;li class=&amp;quot;checked&amp;quot;&amp;gt;
    This is a task.
    &amp;lt;a href=2023-10-31&amp;gt;Completed 2023-10-31&amp;lt;/a&amp;gt;
  &amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;
    This is a task I didn&#39;t finish.
  &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CSS:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-CSS&quot;&gt;.checked::before {
  content: &amp;quot;✓&amp;quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;style&gt;.checked-test::before {content: &quot;✓&quot;;}&lt;/style&gt;
&lt;ul class=&quot;task-list&quot;&gt;
  &lt;li class=&quot;checked-test&quot;&gt;
    This is a task.
    &lt;a href=&quot;https://quin10ko9.com/log/2023-10-31/2023-10-31&quot;&gt;Completed 2023-10-31&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;
    This is a task I didn&#39;t finish.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I like this solution. It is much easier to modify how I signify a completed task down the line than if I had the checkmark in the HTML.&lt;/p&gt;
&lt;p&gt;Now I just have to figure out how to turn Markdown into this specific HTML... maybe I could modify the existing plugin? I wish I didn&#39;t have to learn how to do that, I&#39;m busy!&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-31/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Have some sort of auto-check so that my daily log entries don&#39;t get published without an excerpt.&lt;/li&gt;
&lt;li&gt;Explore other &lt;a href=&quot;https://www.npmjs.com/search?q=keywords:markdown-it-plugin&quot;&gt;markdown-it plugins&lt;/a&gt; (slowly; I need to makes sure they don&#39;t break accessibility)&lt;/li&gt;
&lt;li&gt;Add word wrap to code blocks?&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Saturday, October 28, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-28/"/>
    <updated>2023-10-28T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-28/</id>
    <summary>
Added summary to Atom feed. Discussed CSS list spacing. Wrote script for opening current daily log entry.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Added summary to Atom feed. Discussed CSS list spacing. Wrote script for opening current daily log entry.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-28/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Whatever I feel like doing. It&#39;s the weekend.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;adding-summary-to-atom-feed&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-28/#adding-summary-to-atom-feed&quot;&gt;Adding summary to Atom feed&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I had some trouble finding documentation for the Atom format, and the &lt;a href=&quot;https://validator.w3.org/feed/&quot;&gt;Atom feed validator&lt;/a&gt; seems to be down at the moment. I eventually found an example of an Atom feed that used the summary feature by going to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atom_(web_standard)#Example_of_an_Atom_1.0_feed&quot;&gt;Atom wikipedia page&lt;/a&gt;. It looks like it is just &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt;. I added this tag to my Atom feed. It auto-generates from the page metadata for each log entry.&lt;/p&gt;
&lt;h2 id=&quot;discussing-yesterdays-list-spacing-css&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-28/#discussing-yesterdays-list-spacing-css&quot;&gt;Discussing yesterday&#39;s list spacing CSS&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&#39;ve added the following to the &lt;a href=&quot;https://quin10ko9.com/projects/quintens-blog/css/&quot;&gt;CSS Breakdown&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&#39;ve created a class &lt;code&gt;.summary-directory&lt;/code&gt; for use in my &lt;a href=&quot;https://quin10ko9.com/log/&quot;&gt;Log index&lt;/a&gt; so that I can give an easy-to-understand amount of spacing for my long list of entries. Previously, this list was just a list of links with default spacing, which creates &lt;a href=&quot;https://seirdy.one/posts/2020/11/23/website-best-practices/#tap-targets&quot;&gt;tap targets&lt;/a&gt; which are way too close together. In order to increase the spacing of the tap targets and the legibility, I have two strategies:&lt;/p&gt;
&lt;p&gt;First, I&#39;ve added summaries to each entry, and have put these on a new line below each link on the index. This (non-link) text helps create a buffer between links even with no styling. It also really helps readability to see a preview of each entry, because my date-titles are cryptic.&lt;/p&gt;
&lt;p&gt;Second, I&#39;ve increased the spacing with the following CSS rule. Each entry summary, the thing being selected with &lt;code&gt;.summary-directory p&lt;/code&gt; (&lt;code&gt;.summary-directory&lt;/code&gt; is on the &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;), gets a little space between it and its entry link, and a lot of space between it and the next entry link. This keeps it clear which link it is describing.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;.summary-directory p {
  margin-block: 0.5rem 1.5rem;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;script-for-opening-todays-log-entry&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-28/#script-for-opening-todays-log-entry&quot;&gt;Script for opening today&#39;s log entry&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I would like a script that checks the date, opens today&#39;s log entry if it exists, or generates a new one from a template if it doesn&#39;t yet. I want it to open yesterday&#39;s log entry if it&#39;s before 6am, because midnight is a very awkward time for the date to roll over.&lt;/p&gt;
&lt;h3 id=&quot;resources&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-28/#resources&quot;&gt;Resources&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I have the tiniest prior experience with shell scripting, but not enough to rely on. Here, I&#39;ll collect some tutorial and reference resources I believe I might need to put this script together.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://linuxize.com/post/bash-if-else-statement/&quot;&gt;if..else Statement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tecadmin.net/get-current-date-and-time-in-bash/&quot;&gt;Get the current time and date&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://raspberrytips.com/display-yesterday-date-linux/&quot;&gt;Get yesterday&#39;s date&lt;/a&gt; because I was a little confused from date&#39;s man page&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://linuxize.com/post/bash-check-if-file-exists/&quot;&gt;Check if a file exists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://linuxize.com/post/bash-append-to-file/&quot;&gt;Appending to a file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://linuxize.com/post/how-to-use-sed-to-find-and-replace-string-in-files/&quot;&gt;Find and replace with sed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.baeldung.com/linux/sed-substitution-variables&quot;&gt;Using variables with sed&lt;/a&gt; (I learned I needed to use double quotes)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(Most of these are from &lt;a href=&quot;https://linuxize.com/&quot;&gt;Linuxize&lt;/a&gt;, which is a pleasant, non-bloated site. A relief from most resources you sift through on Google these days. I&#39;ll be bookmarking it.) &lt;strong&gt;Edit:&lt;/strong&gt; Never mind! It has horribly intrusive popup video ads on mobile. Only usable with an ad-blocker, unfortunately. That&#39;s a shame, because the content was helpful!&lt;/p&gt;
&lt;h3 id=&quot;someday-learn-more-about-the-shell-ecosystem&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-28/#someday-learn-more-about-the-shell-ecosystem&quot;&gt;Someday: learn more about the shell ecosystem&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I am enamored by all of these tiny, composable programs. The &lt;a href=&quot;https://man7.org/linux/man-pages/man1/date.1.html&quot;&gt;date command&lt;/a&gt; is delightfully flexible, yet simple to use. A few months ago I stumbled upon &lt;a href=&quot;https://www.catb.org/esr/writings/taoup/html/&quot;&gt;&lt;cite&gt;The Art of Unix Programming (2003)&lt;/cite&gt;&lt;/a&gt; by Eric S. Raymond. It&#39;s a kind of socially-informed history of the UNIX design philosophy, and discusses how those little programs are interfaced. I read the introduction and I&#39;d like to find the time to learn more someday. I think it would be very cool to learn more about why my operating system is the way it is.&lt;/p&gt;
&lt;h3 id=&quot;success&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-28/#success&quot;&gt;Success!&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I&#39;ve successfully created a wonderful script to achieve all I desire. I will need to write it up tomorrow, because it is very late now.&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-28/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Look into where else a summary should go. Do SEO-type features need me to put it somewhere in the HTML head?&lt;/li&gt;
&lt;li&gt;Add a subtle vertical line to block quotes, so that it&#39;s easier to tell that it&#39;s a block quote.&lt;/li&gt;
&lt;li&gt;Test Atom feed.&lt;/li&gt;
&lt;li&gt;Write about log entry script&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Friday, October 27, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-27/"/>
    <updated>2023-10-27T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-27/</id>
    <summary>
Discussed guiding questions for Knitting as Program Execution project. Added summary excerpts.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Discussed guiding questions for Knitting as Program Execution project. Added summary excerpts.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-27/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Try adding excerpts to log entries: a short summary paragraph at the beginning of the page&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;knitting-as-program-execution&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-27/#knitting-as-program-execution&quot;&gt;Knitting as Program Execution&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One of the projects I was hoping would strike inspiration during my &lt;a href=&quot;https://recurse.com/&quot;&gt;Recurse Center&lt;/a&gt; batch is an exploration of knitting. The link between writing a knitting pattern and programming is something I&#39;ve been daydreaming about for a long time. It&#39;s part of what inspired me to make my &lt;a href=&quot;http://craftinatorics.com/&quot;&gt;website about the intersection of math and craft&lt;/a&gt;. Here are some guiding questions.&lt;/p&gt;
&lt;h3 id=&quot;instructions&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-27/#instructions&quot;&gt;Instructions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Can we think of knitting patterns as programs and knitters as interpreters? How simple would a programmatic knitting interpreter be able to be to work? Can standard modern patterns be read by a computer unambiguously?&lt;/p&gt;
&lt;h3 id=&quot;structure&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-27/#structure&quot;&gt;Structure&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;How do you represent a knit object&#39;s structure in code? (A graph? What&#39;s a node, and what&#39;s an edge?) If it&#39;s represented as a graph, are there existing rendering algorithms that could do edge-springiness to vaguely represent the shape of the finished knit product? I have a copy of the amicable &lt;cite&gt;Introduction to Graph Theory&lt;/cite&gt; by Richard J. Trudeau, so I might get to get into that a bit more.&lt;/p&gt;
&lt;h3 id=&quot;audience&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-27/#audience&quot;&gt;Audience&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;How do you describe the anatomy of a knitting pattern to non-knitters to show how similar it is to a program? (Functions, loops, arrays, etc.) How do you describe to knitters how they already know how a program works if they can follow a knitting pattern? (I&#39;m sure the overlap of these two groups knows exactly what I&#39;m talking about by all this, right?!)&lt;/p&gt;
&lt;h2 id=&quot;excerpts&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-27/#excerpts&quot;&gt;Excerpts&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have added short summaries of the topics discussed in each log entry using &lt;a href=&quot;https://www.11ty.dev/docs/data-frontmatter-customize/#example-parse-excerpts-from-content&quot;&gt;Eleventy excerpts&lt;/a&gt; and the help of &lt;a href=&quot;https://webbureaucrat.gitlab.io/articles/eleventy-excerpts/&quot;&gt;How to use Excerpts in Eleventy&lt;/a&gt; to make sense of how to actually use them. It looks like this in my log files:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
frontmatter here
---

This is my little summary.

&amp;lt;!-- excerpt --&amp;gt;

## Today&#39;s Plan
- blah blah blah
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;uses&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-27/#uses&quot;&gt;Uses&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I&#39;ve populated the log index with these summaries under each link. This spreads out the list of links nicely, keeping it easy to read and click/tap on. It is really cool to see an overview of what I&#39;ve worked on each day from the index, too.&lt;/p&gt;
&lt;p&gt;I&#39;d like to supply these summaries to my Atom feed, so that I can control the preview people see. My log entry titles are a little cryptic, because they are just the date. I&#39;d like the tagline to be more informative, at least.&lt;/p&gt;
&lt;h3 id=&quot;wishes&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-27/#wishes&quot;&gt;Wishes&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I wish this summary could be italicized in the log entries, to keep it distinct-looking. You can&#39;t really add a special tag to it for formatting automatically, I don&#39;t think? My options are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don&#39;t use the spcial custom frontmatter option, and instead put the summary in the YAML, then inject it into the page using the layout file.&lt;/li&gt;
&lt;li&gt;Select the first paragraph of every entry page and style that with italics, hoping it&#39;s always the summary.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also think it would be really cool to auto-generate these from the &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;&#39;s I&#39;ve used. But I might prefer hand-written, anyways to control the message a bit more.&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-27/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Make a project page for my knitting ideas (paste today&#39;s writing into it)&lt;/li&gt;
&lt;li&gt;Consider wrapping the &lt;a href=&quot;https://quin10ko9.com/about/&quot;&gt;about&lt;/a&gt; page in an &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; tag?&lt;/li&gt;
&lt;li&gt;Add the new line of CSS to the CSS breakdown&lt;/li&gt;
&lt;li&gt;Add excerpts to Atom feed&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Thursday, October 26, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-26/"/>
    <updated>2023-10-26T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-26/</id>
    <summary>
Learned about about Rust slices. Increased padding for mobile.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Learned about about Rust slices. Increased padding for mobile.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-26/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Finish &lt;a href=&quot;https://rust-book.cs.brown.edu/ch04-04-slices.html&quot;&gt;Rust book ch4.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Add link to Atom feed to the log&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Lengthen whitespace in the footer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;rust-slices&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-26/#rust-slices&quot;&gt;Rust Slices&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This section was much less intimidating than the previous one (on fixing ownership errors). I&#39;m familiar with &lt;a href=&quot;https://stackoverflow.com/questions/509211/how-slicing-in-python-works&quot;&gt;slices in Python&lt;/a&gt; and MATLAB, which are much more flexible. You can go backwards, and can also skip elements (with a stride size).&lt;/p&gt;
&lt;p&gt;Slices in Rust can not do these fancy features. Instead, they can only refer to a contiguous subsection of a data collection. I suspect this is because conceptually, Rust is working closer to the physically-adjacent memory of &lt;a href=&quot;https://rust-book.cs.brown.edu/ch04-01-what-is-ownership.html?highlight=stack#variables-live-in-the-stack&quot;&gt;the stack&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;I bet that Rust uses iterators for skipping and going backwards, but I&#39;ve yet to learn about those in detail.&lt;/p&gt;
&lt;h2 id=&quot;fat-pointers&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-26/#fat-pointers&quot;&gt;Fat Pointers&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Slices are really simple objects in Rust: just a &#39;fat pointer&#39;. A fat pointer is a pointer that also has a little bit of data attached (a length, in this case). All string literals in Rust are fat pointers.&lt;/p&gt;
&lt;p&gt;I remember learning in an intro CS class that strings in C are just &lt;code&gt;char&lt;/code&gt; bytes that are adjacent in memory, and the program doesn&#39;t know when they&#39;ll end, it just keeps reading until it encounters a special character that signifies the end. That&#39;s something that can easily make you run into memory problems or unpredictable results if you aren&#39;t careful. I wonder if this is why Rust chose to bundle some pointers with metadata.&lt;/p&gt;
&lt;h2 id=&quot;page-padding&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-26/#page-padding&quot;&gt;Page Padding&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&#39;ve given my navigation header and footer some breathing room by increasing the padding of the HTML element. Here&#39;s my explanation, quoted from my &lt;a href=&quot;https://quin10ko9.com/projects/quintens-blog/css/&quot;&gt;CSS breakdown&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Instead of having zero padding for the top and bottom, I have added a little at the top, and a lot at the bottom. This is because I was encountering some problems with my header and footer navigation being too close to the edge of the screen on mobile. Either a browser footer covers my footer, or it&#39;s too close for comfortable tapping. I don&#39;t want buttons to be too close together, because it&#39;s an unnecessary barrier for people visiting the site.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-26/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
</content>
  </entry>
  <entry>
    <title>Tuesday, October 24, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-24/"/>
    <updated>2023-10-24T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-24/</id>
    <summary>
Added a 404 page. Started reading Rust Book again.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Added a 404 page. Started reading Rust Book again.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-24/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Add 404 page&lt;/li&gt;
&lt;li&gt;Read about the &lt;a href=&quot;https://rust-book.cs.brown.edu/ch04-04-slices.html&quot;&gt;Rust slice type&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;404-page&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-24/#404-page&quot;&gt;404 Page&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&#39;ve added a very simple &lt;a href=&quot;https://quin10ko9.com/404&quot;&gt;404 page&lt;/a&gt; for when someone tries to visit a page that doesn&#39;t exist. Currently, it just links to the home page. It might be nice to revisit that someday once there&#39;s more content to navigate on here. Maybe more links. But for now, the home page is exclusively navigation, so there isn&#39;t anything else I would need to put.&lt;/p&gt;
&lt;h2 id=&quot;rust-book&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-24/#rust-book&quot;&gt;Rust Book&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&#39;ve been going through this &lt;a href=&quot;https://rust-book.cs.brown.edu/&quot;&gt;Rust book&lt;/a&gt;, which I think is the same as the official Rust book, but with added quizzes and highlighting? They&#39;re researching the usage and comprehension of the book at this site to make it more effective.&lt;/p&gt;
&lt;p&gt;I got halfway through section 4.4 today.&lt;/p&gt;
&lt;p&gt;I&#39;ve also encountered &lt;a href=&quot;https://yarr.fyi/introduction&quot;&gt;Yet Another Rust Resource&lt;/a&gt;, which I might go through quickly once my Recurse Center batch starts. It&#39;s intended to quickly get someone up to speed enough to do pair programming, but it has activities that are best done with a partner.&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-24/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Add a message to the log saying that there is an RSS feed&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Monday, October 23, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-23/"/>
    <updated>2023-10-23T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-23/</id>
    <summary>
Added a favicon, drawn in Pyxel Edit.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Added a favicon, drawn in Pyxel Edit.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-23/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Add a favicon&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;linking-a-site-icon&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-23/#linking-a-site-icon&quot;&gt;Linking a site icon&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&#39;ve seen a lot of automatic &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Glossary/Favicon&quot;&gt;favicon&lt;/a&gt; generator tools online, which generate a variety of sizes for different browsers and mobile devices. I wanted something really simple: just one 16 x 16 pixel image.&lt;/p&gt;
&lt;p&gt;I had to ignore the generators and find the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel#icon&quot;&gt;linking documentation&lt;/a&gt; on my own. I&#39;ve put the following snippet into my HTML header:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-HTML&quot;&gt;&amp;lt;link rel=&amp;quot;icon&amp;quot; href=&amp;quot;styles/favicon.png&amp;quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;drawing-a-site-icon&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-23/#drawing-a-site-icon&quot;&gt;Drawing a site icon&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I used &lt;a href=&quot;https://www.pyxeledit.com/&quot;&gt;Pyxel Edit&lt;/a&gt; to draw my icon. I&#39;ve used this paint program before when working on designing &lt;a href=&quot;https://www.bitsy.org/&quot;&gt;Bitsy&lt;/a&gt; games, because it has a good tile painting mode. I wanted a paint program that was simple and optimized for small color palettes.&lt;/p&gt;
&lt;p&gt;I had no idea what to do, so I just did a hand-drawn green Q (Q for my name, green for my favorite color). A added a fun fade/trail effect to make it more visible from a distance. I think overall it looks okay.&lt;/p&gt;
&lt;p&gt;My icon ended up being 137 bytes.&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-23/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Implement a &lt;a href=&quot;https://jkc.codes/blog/creating-drafts-in-eleventy/&quot;&gt;draft flag&lt;/a&gt; in Eleventy&lt;/li&gt;
&lt;li&gt;Refactor moving writing of different kinds into a unified writing folder, so that it doesn&#39;t get lost&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Thursday, October 19, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-19/"/>
    <updated>2023-10-19T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-19/</id>
    <summary>
Set up an Atom feed.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Set up an Atom feed.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-19/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Gather resources for setting up RSS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;setting-up-an-atom-feed&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-19/#setting-up-an-atom-feed&quot;&gt;Setting up an Atom feed&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I set up an Atom feed and &lt;a href=&quot;https://validator.w3.org/feed/&quot;&gt;validated it&lt;/a&gt;. The Eleventy docs has a good &lt;a href=&quot;https://www.11ty.dev/docs/plugins/rss/&quot;&gt;plugin and instructions&lt;/a&gt;. I chose Atom instead of RSS or JSON based on an uneducated guess (and it being the default in the instructions).&lt;/p&gt;
&lt;p&gt;I ran into a slight problem using the Eleventy plugin, because the &lt;a href=&quot;https://www.11ty.dev/docs/plugins/rss/#sample-feed-templates&quot;&gt;supplied template&lt;/a&gt; doesn&#39;t specify a layout. Because of the Eleventy &lt;a href=&quot;https://www.11ty.dev/docs/data-cascade/&quot;&gt;data cascade&lt;/a&gt;, the feed template then used the default layout I&#39;ve assigned to the directory it&#39;s in. I suspect this might be an easy problem to run into, and the fix was really easy, so I &lt;a href=&quot;https://github.com/11ty/11ty-website/pull/1626&quot;&gt;suggested a change to the documentation&lt;/a&gt; to help others avoid my mistake.&lt;/p&gt;
&lt;p&gt;I haven&#39;t really used an RSS reader since &lt;a href=&quot;https://en.wikipedia.org/wiki/Google_Reader&quot;&gt;Google Reader&lt;/a&gt; (its &lt;a href=&quot;https://killedbygoogle.com/&quot;&gt;death&lt;/a&gt; is a formative memory of mine), so I&#39;ll have to see what the modern software offerings are in order to test this feature.&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-19/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Add project page for &lt;a href=&quot;https://quin10ko9.com/log/2023-10-19/craftinatorics.com&quot;&gt;Craftinatorics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add &lt;a href=&quot;https://www.npmjs.com/package/@orchidjs/eleventy-plugin-ids&quot;&gt;automatic anchors for headings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Set up &lt;a href=&quot;https://webbureaucrat.gitlab.io/articles/eleventy-excerpts/&quot;&gt;excerpts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Try some RSS readers for my growing blog bookmarks collection&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Wednesday, October 18, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-18/"/>
    <updated>2023-10-18T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-18/</id>
    <summary>
Added an About page.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Added an About page.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-18/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Add an &lt;a href=&quot;https://quin10ko9.com/about&quot;&gt;About page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;about-page&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-18/#about-page&quot;&gt;About page&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Just a little writing today. It&#39;s hard to write about yourself.&lt;/p&gt;
&lt;p&gt;I had to modify my collections. Now, the main page displays a list of pages in the &amp;quot;home&amp;quot; collection. Previously, it was displaying pages in the &amp;quot;navigation&amp;quot; collection. The about page should be linked on the home page, but it isn&#39;t a navigation page of any sort.&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-18/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Decide on a specific order for home page links, and how to specify that in code. I think now it&#39;s in order of least-recently modified.&lt;/li&gt;
&lt;li&gt;Add a little more whitespace underneath the footer, so that links are easy to tap without hitting a back button on mobile.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Tuesday, October 17, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-17/"/>
    <updated>2023-10-17T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-17/</id>
    <summary>
Tried Obsidian. Formatted dates. Discussed CSS minimalism. Formatted navigation footer.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Tried Obsidian. Formatted dates. Discussed CSS minimalism. Formatted navigation footer.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-17/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Make log entry titles have the day of the week&lt;/li&gt;
&lt;li&gt;Make a less-than-bare-minimum CSS stylesheet for urgent concerns
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Format daily log navigation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Maximum character width for body text&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; More line height&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not doing&lt;/strong&gt; Even more line height for lists of links
&lt;ul&gt;
&lt;li&gt;I have decided I would rather add more space between links by interspersing them with page summaries. I&#39;ll work on this soon.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Make a page linked to in &lt;a href=&quot;https://quin10ko9.com/projects/quintens-blog&quot;&gt;the project page&lt;/a&gt; breaking down the CSS with itemized justifications for my decisions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;obsidian&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-17/#obsidian&quot;&gt;Obsidian&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I am trying out &lt;a href=&quot;https://obsidian.md/&quot;&gt;Obsidian&lt;/a&gt; today. It is a markdown editor that seems to specialize in easily linking notes together. It has that trendy modern IDE/Editor feel like Atom and VSCode. I hope there isn&#39;t too much latency.&lt;/p&gt;
&lt;p&gt;I found a nice distraction-free theme that hides away all of the UI elements. I haven&#39;t tried the VI keys option yet, but it&#39;s good that it&#39;s there.&lt;/p&gt;
&lt;p&gt;Obsidian has a built-in &lt;a href=&quot;https://help.obsidian.md/Plugins/Daily+notes&quot;&gt;daily notes&lt;/a&gt; plugin, which I really like the looks of. You can just press a button and immediately it&#39;ll either open your existing daily note or create a new one from a template you&#39;ve previously specified. It seems very in-line with what I&#39;m doing on this site with my Daily Log. If I don&#39;t continue to use Obsidian, I&#39;ll definitely want to write a little script to do this kind of functionality myself.&lt;/p&gt;
&lt;h2 id=&quot;adding-weekdays-to-dates&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-17/#adding-weekdays-to-dates&quot;&gt;Adding weekdays to dates&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Wow, that was really straightforward! I found the formatting documentation for Luxon, which is what &lt;a href=&quot;https://11ty.rocks/eleventyjs/dates/#postdate-filter&quot;&gt;11ty.rocks&lt;/a&gt;&#39;s tutorial led me to use. I found &lt;a href=&quot;https://github.com/moment/luxon/blob/master/docs/formatting.md#presets&quot;&gt;Luxon&#39;s formatting presets table&lt;/a&gt; and identified &lt;code&gt;DATE_HUGE&lt;/code&gt; (output like &lt;code&gt;Friday, October 14, 1983&lt;/code&gt;) or &lt;code&gt;DATE_MED_WITH_WEEKDAY&lt;/code&gt; (output like &lt;code&gt;Fri, Oct 14, 1983&lt;/code&gt;) as the two options I&#39;d consider. I&#39;m going with the huge option for now, because I really don&#39;t like how the medium abbreviates (for example) Tuesday as Tue when it really should be Tues!&lt;/p&gt;
&lt;p&gt;I&#39;m very pleased with having access to the day of the week at all. I might tinker more later, but this was a nice victory for today.&lt;/p&gt;
&lt;h2 id=&quot;minimal-css-and-accessibility&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-17/#minimal-css-and-accessibility&quot;&gt;Minimal CSS and Accessibility&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&#39;ve started working on my CSS and my &lt;a href=&quot;https://quin10ko9.com/projects/quintens-blog/css/&quot;&gt;CSS Breakdown&lt;/a&gt; project page. I&#39;m prioritizing readability and inclusivity fixes. I am leaning heavily on Seirdy&#39;s wonderful article &lt;a href=&quot;https://seirdy.one/posts/2020/11/23/website-best-practices/&quot;&gt;Best practices for inclusive textual websites&lt;/a&gt;. It is generally stricter than WCAG AAA, and focuses on concrete technical implementation. It goes over topics like backwards compatibility, layout and typography for readability, performance for slow internet connections, screen-reader compatibility, privacy, and unusual screen dimensions. It&#39;s 23 thousand words, but it has a very good table of contents.&lt;/p&gt;
&lt;p&gt;I&#39;ve done a lot of my own research on web accessibility, as it was one of my obsessions when I was first building my &lt;a href=&quot;https://craftinatorics.com/accessibility&quot;&gt;first website&lt;/a&gt;. I still have a lot to learn of course, especially as a beginner hobbyist who hasn&#39;t had the funding or connections to do user studies, but I&#39;ve started to feel confident enough to form cited, well-read opinions and &lt;a href=&quot;https://github.com/TheOdinProject/theodinproject/issues/3931&quot;&gt;justify them to others&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The reason why I love Seirdy&#39;s article is that it&#39;s willing to make shininess sacrifices for inclusivity. I love that it explains their reasoning for each guideline, so that I can make an informed decision about which ones are right for my site. I like that it&#39;s maintained as a living document.&lt;/p&gt;
&lt;p&gt;I don&#39;t want a shiny website. I want a welcoming, respectful website. &lt;strong&gt;By default.&lt;/strong&gt; I want people to want to stay here a while.&lt;/p&gt;
&lt;p&gt;Anyways. Passionate rant over. I think that my minimal CSS changes today are making this place feel a bit more like home. It is so, so helpful to have Seirdy&#39;s opinionated and implementation-specific advice.&lt;/p&gt;
&lt;h2 id=&quot;format-daily-log-navigation&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-17/#format-daily-log-navigation&quot;&gt;Format Daily Log navigation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&#39;m generally very happy with what I threw together to format the daily log navigation at the bottom of each log entry.&lt;/p&gt;
&lt;h3 id=&quot;styling&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-17/#styling&quot;&gt;Styling&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I have added these styles:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-CSS&quot;&gt;footer {    
  margin-top: 2rem;    
}    
    
nav.sequenceNav ol {    
  padding: 0;    
  list-style: none;    
  display: flex;    
  justify-content: space-between;    
  flex-wrap: wrap;    
  gap: 2ch;    
}    
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I removed the list styling, turned the &lt;code&gt;ol&lt;/code&gt; tag into a flex container, and adjusted the flex settings.&lt;/p&gt;
&lt;p&gt;The footer margin is to add some extra breathing room. Because I have no other visual cues to distinguish regions of my pages (like horizontal lines or background color changes), I want a little more whitespace to clarify.&lt;/p&gt;
&lt;p&gt;I&#39;m pretty happy with it! If I were making a shiny website, I would probably switch to symbols instead of writing out next, previous, etc. But I&#39;m not, this time. I don&#39;t think it&#39;s necessary, and I think it has the potential to introduce confusion. This way is less likely to break.&lt;/p&gt;
&lt;h3 id=&quot;html&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-17/#html&quot;&gt;HTML&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I had to adjust the HTML a little. I found that listing the full page titles made things difficult to parse, so I moved to simply stating first, previous, index, next, and latest.&lt;/p&gt;
&lt;p&gt;When there is no previous or next entry to link to, it now says &amp;quot;no previous&amp;quot; or &amp;quot;no next&amp;quot;. I&#39;m not completely satisfied with this, but I think it&#39;s &lt;em&gt;less&lt;/em&gt; ambiguous than just saying nothing.&lt;/p&gt;
&lt;p&gt;I gave this &lt;code&gt;nav&lt;/code&gt; a class of &lt;code&gt;sequenceNav&lt;/code&gt; so that I can reuse the styles in other parts of the site. I still need to refactor it into a partial template in Eleventy.&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-17/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Make a library (link directory) off of the home page&lt;/li&gt;
&lt;li&gt;Increase font size of monospace code&lt;/li&gt;
&lt;li&gt;Make a favicon&lt;/li&gt;
&lt;li&gt;Make a basic 404 page&lt;/li&gt;
&lt;li&gt;Can I make a little book-swirly? A tiny embellishment that doesn&#39;t take up too much bandwidth? Maybe generate an SVG from an old public-domain book?&lt;/li&gt;
&lt;li&gt;Add a &amp;quot;summary&amp;quot; metadata to each log entry, so that I can make the daily log more discoverable once it gets longer.
&lt;ul&gt;
&lt;li&gt;This can be auto-generated into the top of the article if I want,&lt;/li&gt;
&lt;li&gt;and can be entered in as the excerpt for SEO and sharing previews.&lt;/li&gt;
&lt;li&gt;Just a sentence or two!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Monday, October 16, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-16/"/>
    <updated>2023-10-16T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-16/</id>
    <summary>
Added navigation footer to log entries. Sorted log index. Wondering about Liquid and Nunjucks. Published website on Netlify.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Added navigation footer to log entries. Sorted log index. Wondering about Liquid and Nunjucks. Published website on Netlify.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-16/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Generate Daily Log page links&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Reverse the order of the collection. I&#39;d like most recent entries at the top.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Write bio draft for the Recurse Center directory&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;generating-daily-log-page-links&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-16/#generating-daily-log-page-links&quot;&gt;Generating Daily Log page links&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I had assumed that I would be tapping into the &amp;quot;pagination&amp;quot; functionality of Eleventy because I want to be able to link up these log entries as if they were pages in a book, but it turns out that isn&#39;t what I want.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.11ty.dev/docs/pagination/nav/&quot;&gt;Pagination Navigation&lt;/a&gt; is a page in the Eleventy documentation that describes how to generate navigation for within a &lt;strong&gt;group of pages&lt;/strong&gt; that are generated from &lt;strong&gt;one data file&lt;/strong&gt;. For example, if you had one big file filled with cool poems, but wanted to make each poem its own web page. I have &lt;strong&gt;one page per data file&lt;/strong&gt; for my daily log, so I don&#39;t need pagination.&lt;/p&gt;
&lt;p&gt;Because I have my log entries all tagged as &amp;quot;log&amp;quot; in the Eleventy page data, they are organized automatically into a &amp;quot;collection&amp;quot;, which you can interact with programatically as a list. I can use the previous and next &lt;a href=&quot;https://www.11ty.dev/docs/filters/collection-items/&quot;&gt;collection filters&lt;/a&gt;
and ask for the links to the page data objects I recieve.&lt;/p&gt;
&lt;p&gt;It was very easy to set up! I just grabbed the code snippets in that previously linked documentation page, and links for next and previous were working perfectly in an instant.&lt;/p&gt;
&lt;p&gt;The first and latest links were a little more difficult. I couldn&#39;t find any instructions for selecting the first or last item of a collection in Eleventy&#39;s documentation, so I looked it up on the Nunjucks templating documentation. After I had found that, it was very simple. There are Nunjucks filters for &lt;a href=&quot;https://quin10ko9.com/log/2023-10-16/first&quot;&gt;first&lt;/a&gt; and &lt;a href=&quot;https://mozilla.github.io/nunjucks/templating.html#last&quot;&gt;last&lt;/a&gt;, and &lt;a href=&quot;https://mozilla.github.io/nunjucks/templating.html#filters&quot;&gt;filtering&lt;/a&gt; the collection with these seems to work just fine.&lt;/p&gt;
&lt;p&gt;I am still a little unsure of what I want the design specifics to be for this navigation section. Right now, they say the relation (first, previous, next, or latest) and then the link itself is the title of the page. I&#39;m not sure what to say when there isn&#39;t a next or previous page. Currently, when that happens, the code I copied checks to make sure that the next/previous page exists. When it doesn&#39;t, it just doesn&#39;t say anything, and I get a blank list entry in my navigation menu. That seems confusing, but I haven&#39;t thought about what specific fix to do yet.&lt;/p&gt;
&lt;p&gt;It might be helpful to add the tiniest amount of CSS to this navigation menu to format it in a more traditional way. I want to keep the &lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt; semantic structure to the menu, but I can remove the numbers and make the list entries go all on the same line.&lt;/p&gt;
&lt;h2 id=&quot;sort-descending&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-16/#sort-descending&quot;&gt;Sort Descending&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sorting my &lt;a href=&quot;https://quin10ko9.com/log&quot;&gt;auto-generated log index&lt;/a&gt; to display in descending chronological order was very straightforward, except for one hiccup. Eleventy has a code snippet to show how to &lt;a href=&quot;https://www.11ty.dev/docs/collections/#sort-descending&quot;&gt;sort a collection in descending chronological order&lt;/a&gt;, and all you have to do is add another built-in filter into the templating language.&lt;/p&gt;
&lt;p&gt;I thought I had been working with Nunjucks in this file, because that&#39;s what I&#39;ve been writing my template files with. However it&#39;s a MarkDown file, so the templating language is specified somewhere other than the file extention. Eleventy gives most code examples in Liquid, Nunjucks, 11ty.js, and Handlebars. I kept trying the Nunjucks filter, but it kept silently failing. No error message, it just wouldn&#39;t sort! After a little tinkering, I decided I wasn&#39;t making some simple typo and decided to try Liquid, just in case. That worked.&lt;/p&gt;
&lt;h2 id=&quot;liquid-vs-nunjucks&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-16/#liquid-vs-nunjucks&quot;&gt;Liquid vs Nunjucks&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;From what I&#39;ve seen so far, &lt;a href=&quot;https://www.11ty.dev/docs/languages/liquid/&quot;&gt;Liquid&lt;/a&gt; syntax looks to me like a slightly &lt;a href=&quot;https://en.wikipedia.org/wiki/Syntactic_sugar&quot;&gt;sugarier&lt;/a&gt; version of &lt;a href=&quot;https://www.11ty.dev/docs/languages/nunjucks/&quot;&gt;Nunjucks&lt;/a&gt;. I don&#39;t have much knowledge about how they&#39;re different under the hood. The reference pages I linked earlier in this paragraph might be good future reading, to compare the two.&lt;/p&gt;
&lt;p&gt;As far as which one &lt;em&gt;Eleventy&lt;/em&gt; decides to use, here&#39;s what they have to say on their &lt;a href=&quot;https://www.11ty.dev/docs/languages/#special-case-pairing-a-templating-engine-with-md-markdown&quot;&gt;languages&lt;/a&gt; documentation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Special case: pairing a templating engine with md Markdown&lt;/p&gt;
&lt;p&gt;Remember that—by default—Markdown files are processed with an additional preprocessor template engine set globally with the markdownTemplateEngine configuration option. So, when using templateEngineOverride on markdown files be sure to list each templating engine you’d like to use.&lt;/p&gt;
&lt;p&gt;For example, you may want to process njk Nunjucks first and then md markdown afterwards. Markdown is supported either by itself or with another engine. No other templating engines can be combined in this way—Markdown is the exception here. Any other combination attempt will throw an error.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I have to look at what my &lt;code&gt;markdownTemplateEngine&lt;/code&gt; option is set to. Because my &lt;code&gt;.eleventy.js&lt;/code&gt; config file doesn&#39;t mention this setting anywhere, it&#39;s probably whatever&#39;s the default. I guess that means Liquid, considering that was what worked for my MarkDown file. I&#39;ll have to think about if I&#39;m okay with that, or if I want to change it.&lt;/p&gt;
&lt;h2 id=&quot;building-and-hosting&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-16/#building-and-hosting&quot;&gt;Building and Hosting&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I wanted to look into what options there were for automatically building a website project from a git hosting service. I know &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt; does that (I&#39;ve used it for tiny projects), but for Eleventy I saw a few blog posts complaining that route and no tutorials. I&#39;ve been seeing a few Eleventy blogs talk about using &lt;a href=&quot;https://docs.netlify.com/integrations/frameworks/eleventy/&quot;&gt;Netlify&lt;/a&gt; and I appreciate that they have documentation specfic to Eleventy.&lt;/p&gt;
&lt;p&gt;I thought I&#39;d try it to see how hard it would be, and set it up in like five minutes from my phone. What?? That&#39;s absolutely absurd. I wouldn&#39;t say that I &lt;em&gt;like&lt;/em&gt; Netlify, though. I don&#39;t trust them because you &lt;a href=&quot;https://docs.netlify.com/accounts-and-billing/billing-faq/#can-i-set-a-limit-on-my-usage&quot;&gt;can&#39;t set a limit on metered feature usage&lt;/a&gt;, and I don&#39;t fully understand what counts as metered. I don&#39;t need forms or user accounts or anything. Are simple page visits &#39;metered&#39;? Is there an auto-timeout if the auto-build gets stuck?&lt;/p&gt;
&lt;p&gt;I&#39;m still going to go ahead and try it out a bit more because it&#39;s extremely convenient and gets my page out there. I don&#39;t think there&#39;s that much risk because I intend to stay on the free tier which doesn&#39;t require a credit card, and because I can always leave. This is a website that can afford to be down for a few days as I locate a new service if needed.&lt;/p&gt;
&lt;p&gt;A text-based static site is also the tiniest kind of website, and Eleventy is supposedly pretty fast, so I had better stay well under their limits for the free tier anyways. I would just rather understand a bit more what&#39;s going on, and I think their FAQ could be clearer about this stuff.&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-16/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Download some nice syntax highlighting extensions for vim? It is really struggling with these mixed-language files. I need my syntax highlighting!&lt;/li&gt;
&lt;li&gt;Refactor log page-navigation into a partial&lt;/li&gt;
&lt;li&gt;Set up RSS feed (will probably generate multiple eventually?)&lt;/li&gt;
&lt;li&gt;Write description for the log index&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Friday, October 13, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-13/"/>
    <updated>2023-10-13T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-13/</id>
    <summary>
Commented on Eleventy performance improvements. Set intention for an ugly website.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Commented on Eleventy performance improvements. Set intention for an ugly website.&lt;/p&gt;
&lt;h2 id=&quot;todays-plan&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-13/#todays-plan&quot;&gt;Today&#39;s Plan&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Improve daily log template
&lt;ul&gt;
&lt;li&gt;Add hard-coded breadcrumb (I tried the eleventy navigation plugin and it did not look very automation-friendly, at least not to a beginner.)
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Note:&lt;/strong&gt; Instead of doing a breadcrumb, for now I am going to put a link to the Log index at the bottom of the page. Later this can be part of the pagination nav menu.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Move top-level header to template&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Done&lt;/strong&gt; Start writing about the project I hope to achieve during my batch at the Recurse Center&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;11ty-v2-performance&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-13/#11ty-v2-performance&quot;&gt;11ty v2 Performance&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A year or two ago I had worked with 11ty previously for my &lt;a href=&quot;https://craftinatorics.com/&quot;&gt;craft-and-math website&lt;/a&gt;, but it was with 11ty v1. It was very helpful, but I was frustrated by how hot my laptop would get while I was running Browsersync. With v2.0, there is a faster, &lt;a href=&quot;https://www.11ty.dev/docs/dev-server/&quot;&gt;custom-to-eleventy dev server&lt;/a&gt;, and I don&#39;t even notice it&#39;s running. Things go much more smoothly!&lt;/p&gt;
&lt;h2 id=&quot;on-choosing-to-be-a-little-ugly&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-13/#on-choosing-to-be-a-little-ugly&quot;&gt;On Choosing To Be A Little Ugly&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I am refraining from diving into the CSS of this blog right now. Pure HTML can be a little ugly at times, but it has built-in responsiveness and accessibility features. I think that&#39;s worth a little ugliness. I want to make sure to be careful that I am not accidentally undoing those features while making aesthetic &#39;improvements&#39;. In time, I will likely add some subtle CSS tweaks, like making the pagination nav element horizontal and hiding the (semantically important, visually distracting) &lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt; list decorations.&lt;/p&gt;
&lt;p&gt;I try to refer to Seirdy&#39;s opinionated and thorough &lt;a href=&quot;https://seirdy.one/posts/2020/11/23/website-best-practices/&quot;&gt;Best practices for inclusive textual websites&lt;/a&gt; when making a design decision. My previous website (about art) is very heavy on visuals. I am excited to experiment with the inclusivity of this blog, which is a primarily textual website.&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-13/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Look into pagination for log entries. Can I have a little &amp;quot;Latest, Next, Previous, Oldest&amp;quot; menu at the bottom of the page, like webcomics all have?&lt;/li&gt;
&lt;li&gt;I want the day of the week visible. I wonder how hard that would be.&lt;/li&gt;
&lt;li&gt;Add tags to log entries like &lt;code&gt;project:blog&lt;/code&gt; or &lt;code&gt;project:information-games&lt;/code&gt; so that they can be automatically linked to project pages later, when I have project pages.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Thursday, October 12, 2023</title>
    <link href="https://quin10ko9.com/log/2023-10-12/"/>
    <updated>2023-10-12T21:00:00Z</updated>
    <id>https://quin10ko9.com/log/2023-10-12/</id>
    <summary>
Introduced blog. Confused about Eleventy frontmatter for dates.

</summary>
    <content xml:lang="en" type="html">&lt;p&gt;Introduced blog. Confused about Eleventy frontmatter for dates.&lt;/p&gt;
&lt;p&gt;Today I created the very beginnings of this blog, which is generated with the static site generator &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;11ty&lt;/a&gt;. I started from scratch with the help of &lt;a href=&quot;https://11ty.recipes/&quot;&gt;11ty.Recipes&lt;/a&gt;. I am creating it in preparation for my upcoming batch at &lt;a href=&quot;https://www.recurse.com/&quot;&gt;the Recurse Center&lt;/a&gt;, so that it will be easy to keep a record of my time there from the very start.&lt;/p&gt;
&lt;h2 id=&quot;date-woes&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-12/#date-woes&quot;&gt;Date Woes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I got very muddled down with trying to manage the dates of these log entries in a pleasant way. I learned some about &lt;a href=&quot;https://11ty.rocks/eleventyjs/dates/&quot;&gt;date filters&lt;/a&gt; and &lt;a href=&quot;https://www.11ty.dev/docs/data-computed/&quot;&gt;computed data&lt;/a&gt;, but got too confused to really even understand if what I want is possible.&lt;/p&gt;
&lt;p&gt;Currently, my front matter looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;date: 2023-10-12 14:00:00-7
day: &amp;quot;2023-10-12&amp;quot;
eleventyComputed:
  title: &amp;quot;2023-10-12&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;I have to manually enter a time and timezone so that 11ty won&#39;t &lt;a href=&quot;https://www.11ty.dev/docs/dates/#dates-off-by-one-day&quot;&gt;think I&#39;m talking about UTC&lt;/a&gt; instead of my home timezone.&lt;/li&gt;
&lt;li&gt;I created a custom data key &lt;code&gt;day&lt;/code&gt; where I manually re-enter the date as a string. This is used for generating permalinks and the page title.&lt;/li&gt;
&lt;li&gt;I don&#39;t write the date in &lt;code&gt;title&lt;/code&gt; directly because I might want to change how the titles are generated in the future, but don&#39;t want the permalinks to change.&lt;/li&gt;
&lt;li&gt;11ty has a great variety of &lt;a href=&quot;https://www.11ty.dev/docs/dates/#setting-a-content-date-in-front-matter&quot;&gt;options for generating the date&lt;/a&gt; of a page, but I want a date option that is both stable under modification and can be retroactive (in case I forget to write a log for a day in time, but want to write it retrospectively).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This should be possible, right?&lt;/p&gt;
&lt;h2 id=&quot;task-ideas&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://quin10ko9.com/log/2023-10-12/#task-ideas&quot;&gt;Task Ideas&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;This section is for tasks I want on my radar, but haven&#39;t committed to yet.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a projects section&lt;/li&gt;
&lt;li&gt;Create an about&lt;/li&gt;
&lt;li&gt;Describe my web development approach for this blog&lt;/li&gt;
&lt;li&gt;Link to my craft/math site&lt;/li&gt;
&lt;li&gt;Publish this blog&lt;/li&gt;
&lt;li&gt;Write about my goals at RC&lt;/li&gt;
&lt;li&gt;Write a page for the event I want to facilitate&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
</feed>
