<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Miscellaneous on cornerboxes</title>
    <link>https://cornerboxes.com/misc/</link>
    <description>Recent content in Miscellaneous on cornerboxes</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language><atom:link href="https://cornerboxes.com/misc/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Running LLMs on Fedora 42 Kinoite with an AMD GPU using Ollama</title>
      <link>https://cornerboxes.com/misc/ollama-rocm-f42-kinoite/</link>
      <pubDate>Sun, 13 Jul 2025 13:19:29 +0300</pubDate>
      
      <guid>https://cornerboxes.com/misc/ollama-rocm-f42-kinoite/</guid>
      <description>&lt;p&gt;This is a short guide to getting Ollama working with an AMD GPU on a Fedora 42 Kinoite system. In practice, the methods discussed should work on any Fedora 42 immutable variant, including but not limited to Fedora 42 Silverblue.&lt;/p&gt;
&lt;p&gt;When attempting to install ROCm on Fedora 42 Kinoite (I&amp;rsquo;ll be referring to this as F42K from now on), I encountered several issues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The &lt;a href=&#34;https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/quick-start.html&#34;&gt;installation guide for ROCm&lt;/a&gt; does not include a Fedora version.&lt;/li&gt;
&lt;li&gt;Attempting to install the RHEL version leads to an error message stating it does not support the current distribution.&lt;/li&gt;
&lt;li&gt;Fedora packages &lt;a href=&#34;https://packages.fedoraproject.org/pkgs/rocm/rocm/&#34;&gt;does have&lt;/a&gt; a rocm meta package, however, it is currently only supported on Rawhide or EPEL 10.1 (which isn&amp;rsquo;t recommended on Fedora systems).&lt;/li&gt;
&lt;li&gt;Rebasing from F42K to Fedora Kinoite Rawhide is not feasible due to some layered packages having dependency issues due to missing packages in the Rawhide package repository.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Therefore, we need a workaround for installing ROCm: containers!&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This is a short guide to getting Ollama working with an AMD GPU on a Fedora 42 Kinoite system. In practice, the methods discussed should work on any Fedora 42 immutable variant, including but not limited to Fedora 42 Silverblue.</p>
<p>When attempting to install ROCm on Fedora 42 Kinoite (I&rsquo;ll be referring to this as F42K from now on), I encountered several issues:</p>
<ol>
<li>The <a href="https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/quick-start.html">installation guide for ROCm</a> does not include a Fedora version.</li>
<li>Attempting to install the RHEL version leads to an error message stating it does not support the current distribution.</li>
<li>Fedora packages <a href="https://packages.fedoraproject.org/pkgs/rocm/rocm/">does have</a> a rocm meta package, however, it is currently only supported on Rawhide or EPEL 10.1 (which isn&rsquo;t recommended on Fedora systems).</li>
<li>Rebasing from F42K to Fedora Kinoite Rawhide is not feasible due to some layered packages having dependency issues due to missing packages in the Rawhide package repository.</li>
</ol>
<p>Therefore, we need a workaround for installing ROCm: containers!</p>
<h1 id="method-1-using-ollama-with-alpaca">Method 1: Using Ollama with Alpaca</h1>
<p>For users of Fedora Immutable, this method will come most naturally; we&rsquo;re going to use <a href="https://containertoolbx.org/">Toolbx</a> (which is preinstalled on Fedora Immutable variants) to get ROCm installed.</p>
<p>Installing ROCm in a Toolbx container can be done as follows:</p>
<ol>
<li>Create your toolbox with <code>toolbox create &lt;name&gt;</code></li>
<li>Enter your toolbox with <code>toolbox enter &lt;name&gt;</code></li>
<li>Install the RHEL version of the AMDGPU installer within the toolbox with <code>sudo dnf install https://repo.radeon.com/amdgpu-install/6.4.1/rhel/9.6/amdgpu-install-6.4.60401-1.el9.noarch.rpm</code> (or follow AMD&rsquo;s official instructions <a href="https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/install-methods/amdgpu-installer/amdgpu-installer-rhel.html">here</a>)</li>
<li>Run <code>amdgpu-install --no-dkms --usecase=rocm -y</code></li>
</ol>
<p>Now, installing Ollama can be done as follows:</p>
<ol>
<li>Either download the latest Ollama version from <a href="https://ollama.com/download/ollama-linux-amd64.tgz">here</a> or use <code>curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz</code></li>
<li>Extract the archive somewhere.</li>
<li>Add the <code>bin</code> directory inside into your PATH.</li>
</ol>
<p>Running Ollama can now be done with <code>ollama serve</code> within your toolbox. It should properly detect and use AMD GPUs.</p>
<p>For the frontend, I like to use <a href="https://flathub.org/apps/com.jeffser.Alpaca">Alpaca</a> with this method, as the user interface is pleasant to use. Within Alpaca, you just need to go to the &ldquo;Manage Instances&rdquo; page and add Ollama as an instance. Select the one that is just &ldquo;Ollama&rdquo;, not &ldquo;Ollama (Managed)&rdquo;. The default settings should work just fine.</p>
<p>However, there are some downsides to using Alpaca, which is that thinking models generally don&rsquo;t seem to actually think (only Phi 4 Reasoning seemed to actually think from my testing). Additionally, web search seems to be broken as it does so with solely DuckDuckGo, which constantly gives me a rate limit error when I attempt to use it.</p>
<p>Well, what if I want a slightly more versatile user interface and a more seamless setup?</p>
<h1 id="method-2-using-ollama-and-open-webui-with-podman-compose">Method 2: Using Ollama and Open WebUI (with Podman Compose)</h1>
<p>There exists another very popular user interface for running LLMs known as Open WebUI. However, unlike Alpaca, it requires a server to be run, usually in the form of a Podman/Docker container. For this method, I&rsquo;ll be using Podman as it&rsquo;s preinstalled with F42K, but using Docker with the same approach should be doable.</p>
<p>It should also be noted that if we use Podman directly, we can utilize the <code>ollama:rocm</code> image, allowing us to skip the steps needed to install ROCm ourselves.</p>
<p>To make things even simpler to set up, I&rsquo;ll be using Podman Compose, which allows the creation of containers using a YAML file, making things more deterministic.</p>
<p>My <code>compose.yml</code> file is as follows:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yml" data-lang="yml"><span style="display:flex;"><span><span style="color:#f92672">version</span>: <span style="color:#e6db74">&#34;3.8&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">services</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">ollama</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">image</span>: <span style="color:#ae81ff">docker.io/ollama/ollama:rocm</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">container_name</span>: <span style="color:#ae81ff">ollama</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">restart</span>: <span style="color:#ae81ff">unless-stopped</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">volumes</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">ollama:/root/.ollama:Z</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">networks</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">common</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">devices</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">/dev/kfd:/dev/kfd</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">/dev/dri:/dev/dri</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">security_opt</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">label=type:container_runtime_t</span>
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">openwebui</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">image</span>: <span style="color:#ae81ff">ghcr.io/open-webui/open-webui:main</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">container_name</span>: <span style="color:#ae81ff">openwebui</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">restart</span>: <span style="color:#ae81ff">unless-stopped</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">ports</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">3000</span>:<span style="color:#ae81ff">8080</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">depends_on</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">ollama</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">volumes</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">openwebui_data:/app/backend/data:Z</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">networks</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">common</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">environment</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">OLLAMA_BASE_URL=http://ollama:11434</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">networks</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">common</span>:
</span></span><span style="display:flex;"><span><span style="color:#f92672">volumes</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">ollama</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">openwebui_data</span>:
</span></span></code></pre></div><p>(Special thanks to <a href="https://discussion.fedoraproject.org/t/fedora-silverblue-ollama-with-rocm-failed-to-check-permission-on-dev-kfd-open-dev-kfd-invalid-argument/131680/10">this comment</a> for solving the issue regarding device access.)</p>
<p>To use it:</p>
<ol>
<li>Put the <code>compose.yml</code> file somewhere.</li>
<li>In the same directory, run <code>podman compose up -d</code></li>
<li>If prompted to select a repository to download the images from, always select the docker one.</li>
<li>Now, if you go to <code>localhost:3000</code>, you should be able to access Open WebUI.</li>
<li>Create an admin account with an email address and password.</li>
<li>To add a model, simply go to the model selection area of the chat (should be on the top left), and in the &ldquo;Search a model&rdquo; field, type a model name from <a href="https://ollama.com/search">Ollama&rsquo;s models</a>. An option showing &ldquo;Pull &lt;model&gt; from Ollama.com&rdquo; should appear, and if you gave a valid model name, it should download it upon clicking.</li>
</ol>
<p>That should be all that&rsquo;s needed to get up and running with a model.</p>
<p>Something to note is that you can allow other devices you own to access Open WebUI by using <a href="https://tailscale.com/">Tailscale</a>. However, one issue with this is that you are required to spin up the compose file every time on your computer before being able to access it from your other devices.</p>
<p>What if we want to start the containers at boot? Doing so with Podman Compose is quite difficult, but there does exist an alternative that integrates more closely with systemd, enabling startup at boot: Podman Quadlets.</p>
<h1 id="method-3-starting-ollama-and-open-webui-at-boot-with-podman-quadlets">Method 3: Starting Ollama and Open WebUI at Boot (with Podman Quadlets)</h1>
<p>Podman Quadlets is like Podman Compose but managed by systemd. This allows our containers to be linked to systemd services, allowing them to be run at login time/boot (We&rsquo;ll get back to this later).</p>
<p>First, create the following files within the <code>~/.config/containers/systemd/</code> directory.</p>
<ol>
<li><code>ollama-webui.pod</code></li>
</ol>
<pre tabindex="0"><code>[Pod]
PodName=ollama-webui
PublishPort=3000:8080

[Install]
WantedBy=multi-user.target default.target
</code></pre><ol start="2">
<li><code>ollama-webui-ollama.container</code></li>
</ol>
<pre tabindex="0"><code>[Container]
AddDevice=/dev/kfd:/dev/kfd
AddDevice=/dev/dri:/dev/dri
ContainerName=ollama
Image=docker.io/ollama/ollama:rocm
Pod=ollama-webui.pod
Volume=ollama.volume:/root/.ollama:Z
SecurityLabelType=container_runtime_t

[Service]
Restart=always
</code></pre><ol start="3">
<li><code>ollama-webui-openwebui.container</code></li>
</ol>
<pre tabindex="0"><code>[Unit]
Requires=ollama-webui-ollama.service
After=ollama-webui-ollama.service

[Container]
ContainerName=openwebui
Environment=OLLAMA_BASE_URL=http://ollama:11434
Image=ghcr.io/open-webui/open-webui:main
Pod=ollama-webui.pod
Volume=openwebui.volume:/app/backend/data:Z

[Service]
Restart=always
</code></pre><ol start="4">
<li><code>ollama.volume</code></li>
</ol>
<pre tabindex="0"><code>[Volume]
</code></pre><ol start="5">
<li><code>openwebui.volume</code></li>
</ol>
<pre tabindex="0"><code>[Volume]
</code></pre><p>Your <code>~/.config/containers/systemd/</code> directory should now look like the following:</p>
<pre tabindex="0"><code>~/.config/containers/systemd
├── ollama.volume
├── ollama-webui-ollama.container
├── ollama-webui-openwebui.container
├── ollama-webui.pod
└── openwebui.volume
</code></pre><p>Next, run:</p>
<ol>
<li><code>systemctl --user daemon-reload</code></li>
<li><code>systemctl --user start ollama-webui-pod.service</code></li>
</ol>
<p>Open WebUI should now be accessible from <code>localhost:3000</code>. However, there is still one slight problem. The containers will only spin up at login time, not boot. To fix this, we need to run:</p>
<pre tabindex="0"><code>loginctl enable-linger &lt;your user&gt;
</code></pre><p>Now, Ollama and Open WebUI should launch at boot time, and combined with Tailscale, you may now use Open WebUI across devices in your Tailnet right after powering on your system.</p>
<p><strong>Edit</strong>: Do note that your computer (that&rsquo;s running Ollama + Open WebUI) needs to be able to have network access at boot, which may not be trivial especially when using WiFi. In my case, using an ethernet connection seems to work just fine.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Getting Nushell to run in an Alpine Linux container</title>
      <link>https://cornerboxes.com/misc/alpine-toolbx-nushell-starship/</link>
      <pubDate>Tue, 11 Jul 2023 13:11:22 +0300</pubDate>
      
      <guid>https://cornerboxes.com/misc/alpine-toolbx-nushell-starship/</guid>
      <description>&lt;p&gt;From my post about my digital setup, I wanted to quickly write a small post about getting nushell and starship working in an Alpine Linux &lt;a href=&#34;https://containertoolbx.org/&#34;&gt;Toolbx&lt;/a&gt; container.&lt;/p&gt;
&lt;p&gt;So, the problem is that Alpine Linux uses the musl C library instead of glibc. This causes a compatibility problem when running Rust programs that were compiled on the main system within the Alpine Linux container. In addition, the PATH environment variable is inherited from the host system due to how Toolbx works.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>From my post about my digital setup, I wanted to quickly write a small post about getting nushell and starship working in an Alpine Linux <a href="https://containertoolbx.org/">Toolbx</a> container.</p>
<p>So, the problem is that Alpine Linux uses the musl C library instead of glibc. This causes a compatibility problem when running Rust programs that were compiled on the main system within the Alpine Linux container. In addition, the PATH environment variable is inherited from the host system due to how Toolbx works.</p>
<p>Here&rsquo;s the workaround I found that seems to work:</p>
<ul>
<li>Inside the Alpine Linux container:
<ul>
<li>Enable the <code>testing</code> repository</li>
<li>Install both starship and nushell using the apk package manager.</li>
<li>In the file <code>~/.cache/starship/init.nu</code>, replace all occurrences of <code>^/home/&lt;user&gt;/.cargo/bin/starship</code> to just <code>starship</code>, and make sure that the starship executable is in the system path.</li>
</ul>
</li>
<li>On the host system:
<ul>
<li>Find the cargo env file located at <code>~/.cargo/env</code></li>
<li>Edit the line with <code>export PATH</code> such that it appends the <code>~/.cargo/bin</code> directory to the path instead of prepending it.
<ul>
<li>As the container will inherit the PATH from the host system, the <code>nu</code> and <code>starship</code> executables within the <code>~/.cargo/bin</code> directory will be deprioritized, allowing the system packages to take priority.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>However, one problem with this workaround is that when using <code>toolbox enter &lt;alpine linux container name&gt;</code> from nushell on the host system, it will try continuing to use the same nushell executable that&rsquo;s currently being used by the host system within the container. To work around this, you should first create a bash session with <code>bash</code>, then entering your toolbx container, and then using <code>nu</code> to start up nushell.</p>
<p>P.S. Since this is me trying to backtrack what I did, I may have left out some things. If it doesn&rsquo;t work out for you, please make a comment.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Previous Site Attempts</title>
      <link>https://cornerboxes.com/misc/site-history/</link>
      <pubDate>Thu, 22 Jun 2023 22:14:27 +0300</pubDate>
      
      <guid>https://cornerboxes.com/misc/site-history/</guid>
      <description>&lt;p&gt;If you haven&amp;rsquo;t already checked out the &lt;a href=&#34;https://cornerboxes.com/about/about-site/&#34;&gt;about site page&lt;/a&gt;, please read it first for some context.&lt;/p&gt;
&lt;h2 id=&#34;attempt-1-wordpress&#34;&gt;Attempt 1: Wordpress&lt;/h2&gt;
&lt;p&gt;Link to &lt;a href=&#34;https://wordpress.org/&#34;&gt;Wordpress&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When one usually looks to create a website as a complete newbie to the web development space, the first results usually tend to be either website services like Squarespace or Wix, or Wordpress (the open source web content management system, not the hosting service). Squarespace and Wix felt a little bit restrictive in terms of what type of content I could create with it, which made me attempt to work with Wordpress.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>If you haven&rsquo;t already checked out the <a href="/about/about-site/">about site page</a>, please read it first for some context.</p>
<h2 id="attempt-1-wordpress">Attempt 1: Wordpress</h2>
<p>Link to <a href="https://wordpress.org/">Wordpress</a>.</p>
<p>When one usually looks to create a website as a complete newbie to the web development space, the first results usually tend to be either website services like Squarespace or Wix, or Wordpress (the open source web content management system, not the hosting service). Squarespace and Wix felt a little bit restrictive in terms of what type of content I could create with it, which made me attempt to work with Wordpress.</p>
<p>I eventually gave up on Wordpress due to the following reasons:</p>
<ol>
<li>I spent way too much time configuring the site, since there are simply an overwhelming number of plugins and options.</li>
<li>Wordpress itself isn&rsquo;t very secure, and due to most websites being built on Wordpress, there are many malicious bots out there trying to crack the admin account to gain access to the site. I ended up spending days researching and implementing all sorts of security measures such as 2FA, relocating the admin login URL, lots of hardening plugins, and even setting up the Wordpress SMTP mailing service in order to get emails whenever suspicious activity was spotted. Suffice to say, I felt like I was living in fear of my site being breached, despite there not being any content on the site.</li>
<li>When I actually got around to building the website, I discovered the default page builder offered by Wordpress to be very restrictive, and when I went to look for alternative options, I found out that some types of content blocks were simply paywalled. It then became a game of &ldquo;finding the best page builder&rdquo;, which eventually led to some more analysis paralysis on my end.</li>
<li>I eventually realized that Wordpress is sorely overkill for the purpose I needed it to serve. I just wanted to create some content, yet this platform is geared up for creating e-commerce websites or other fancy applications.</li>
</ol>
<p>After going through the endless cases of analysis paralysis from all the options Wordpress had to offer, it was safe to say that my motivation was completely drained. Until&hellip;</p>
<h2 id="attempt-2-ghost">Attempt 2: Ghost</h2>
<p>Link to <a href="https://ghost.org/">Ghost</a>.</p>
<p>A couple months later, I watched a <a href="https://youtu.be/acBJsjCqgtM">video</a> from Ali Abdaal about how to build a website, where one of his recommendations was Ghost. At first glance, it appeared to be a more batteries-included version of Wordpress, which was great to hear as it removed all the hardships I had with Wordpress.</p>
<p>After setting up an instance of Ghost myself and starting to write content, I discovered a few things that really bugged me:</p>
<ol>
<li>There was no way to implement 2FA, and I really did not want my admin account to be secured solely by a password.</li>
<li>The page builder felt quite weird. it was not Markdown, but more like a locked-down version of Notion&rsquo;s editor. This annoyed me as it did not really offer the features I wanted for easily getting my ideas in text. There was a markdown block available, but writing in markdown in another editor just felt weird.</li>
</ol>
<p>It didn&rsquo;t help that back then, I also struggled really badly with getting my thoughts and ideas down in text, meaning that when it came to writing content, I always just blanked out.</p>
<h2 id="attempt-3-hugo">Attempt 3: Hugo</h2>
<p>Link to <a href="https://gohugo.io">Hugo</a>.</p>
<p>I caught wind of GitHub Pages from a classmate of mine, which prompted me to look into static site generators further. It is basically perfect security-wise, since static sites means that the entire site is just basic HTML with some very light JavaScript. In other words, there is no database behind the scenes that could be hacked.</p>
<p>Since all the content pages are written in Markdown, I found out that I could also use Obsidian to edit the files, making my writing experience significantly better.</p>
<p>On the hosting end, I decided to use Cloudflare Pages over GitHub Pages due to Cloudflare Pages&rsquo; more generous limits.</p>
<p>As for the theme, I initially tried to use the <a href="https://github.com/CaiJimmy/hugo-theme-stack">Stack theme</a>, but I found it quite difficult to configure and understand. Later, I tried the <a href="https://github.com/adityatelange/hugo-PaperMod">PaperMod theme</a>, but the complete lack of sidebars (table of contents could only be placed at the top of each page) made it feel too restrictive in my opinion. I eventually settled on a fork of the PaperMod theme, <a href="https://github.com/reorx/hugo-PaperModX">PaperModX</a>, which checked all my boxes. To add a little personal touch, I switched up the color scheme to the Nord theme, hence my personal fork, <a href="https://github.com/shzhe02/PaperModX-nordish">PaperModX-nordish</a>.</p>
<p>As for the comment system, I&rsquo;m using <a href="https://utteranc.es/">Utterances</a>, which uses GitHub issues to store the comments, allowing me to get away with not using a VPS. However, I hope to use <a href="https://remark42.com/">Remark42</a> eventually, as it allows for anonymous comments. But until I have more reasons to get an internet-connected VPS, I will be relying on Utterances.</p>
<p>And that&rsquo;s where we are now!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Behind &#34;A Guide to 3D Printing&#34;</title>
      <link>https://cornerboxes.com/misc/3dp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://cornerboxes.com/misc/3dp/</guid>
      <description>All the behind-the-scenes work of the &amp;#34;A Guide to 3D Printing&amp;#34; bundle.</description>
      <content:encoded><![CDATA[]]></content:encoded>
    </item>
    
    <item>
      <title>Exchange Journal</title>
      <link>https://cornerboxes.com/misc/exchange/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://cornerboxes.com/misc/exchange/</guid>
      <description>About my experience of going on an exchange semester at the National University of Singapore for the 2nd semester of the 2023/2024 academic year.</description>
      <content:encoded><![CDATA[<p>If you&rsquo;re a future exchanger to NUS, I recommend directly reading the <a href="/misc/exchange/5/">final report</a> as I basically cover everything previously written here in it.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
