<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>./techtipsy</title>
    
    
    
    <link>https://ounapuu.ee/</link>
    <description>Recent content on ./techtipsy, a blog written by Herman Õunapuu.</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</managingEditor>
    <webMaster>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</webMaster>
    <lastBuildDate>Wed, 16 Oct 2024 06:00:00 +0300</lastBuildDate>
    
	<atom:link href="https://ounapuu.ee/index.xml" rel="self" type="application/rss+xml" />
    
    
    
    <item>
      <title>ThinkPad as a server: third time&#39;s the charm</title>
      <link>https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/</link>
      <pubDate>Wed, 16 Oct 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;This is a follow-up to my two previous attempts on this topic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/&#34;&gt;Can a laptop from 2012 be a viable home server?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/&#34;&gt;ThinkPad as a server: the follow-up&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since then, I&amp;rsquo;ve had quite a few changes to my home server setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ounapuu.ee/posts/2023/09/07/ikea-powered-homelab/&#34;&gt;I put my home server stuff on an IKEA pegboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/&#34;&gt;I tried the Zimaboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;I switched back to the ASRock DeskMini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ounapuu.ee/posts/2024/06/24/back-to-roots/&#34;&gt;I got fiber again!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zimaboard was
great, &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard#2024-08-20-update&#34;&gt;until the CPU became just a little bit too slow for my needs.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ASRock Deskmini X300 was great, until I learned that it&amp;rsquo;s actually relatively bad at idle power usage due to lack of
lower sleep states.&lt;/p&gt;
&lt;p&gt;Combined with my recent tech cleanup, I am now proudly running all of my services on a single home server, powered by
&lt;a href=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/&#34;&gt;my trusty ThinkPad T430.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The promise of USB-C &lt;em&gt;everything&lt;/em&gt; was too good to pass up, so I stopped resisting.&lt;/p&gt;
&lt;p&gt;Doesn&amp;rsquo;t mean that I won&amp;rsquo;t run hardware into the ground.&lt;/p&gt;
&lt;p&gt;Compared to last two attempts, I&amp;rsquo;ve made a couple of important changes to the setup.&lt;/p&gt;
&lt;p&gt;There is a weekly &lt;code&gt;tlp recalibrate BAT0&lt;/code&gt; job scheduled that completely drains the battery and charges it up again, which
should make sure that the laptop battery survives for a longer time.
The battery charge threshold is set to 80%.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve used a knock-off Honeywell PTM7950 thermal pad on the CPU. The cooling performance is comparable to using thermal
paste, but hopefully it doesn&amp;rsquo;t drip out.&lt;/p&gt;
&lt;p&gt;The whole setup is mounted to an IKEA pegboard using
a &lt;a href=&#34;https://nillkin.org/accessories/nillkin-prodesk-adjustable-laptop-stand&#34;&gt;Nillkin ProDesk laptop stand&lt;/a&gt;
and a generous amount of zip ties. The combination of zip ties and the rubber feet on the stand result in the stand
barely moving once mounted. The laptop stand itself is very sturdy, and you&amp;rsquo;ll have to use a lot of force to change its
angle.&lt;/p&gt;
&lt;p&gt;The CPU uses less power compared to the previous one. The one in the server is
the &lt;a href=&#34;https://ark.intel.com/content/www/us/en/ark/products/71670/intel-core-i7-3632qm-processor-6m-cache-up-to-3-20-ghz-bga.html&#34;&gt;Intel i7-3632QM&lt;/a&gt;,
a quad-core CPU with a 35W TDP.&lt;/p&gt;
&lt;p&gt;I still have some scripts running to limit the CPU temperatures to 85°C, just to be on the safe side and avoid
overheating at all costs.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/media/setup-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/media/setup-1_hud9db09995f384671b89d5920fb866906_2499287_1000x1000_fit_q75_box.jpg&#34;
             width=&#34;1000&#34;
             height=&#34;750&#34;
             alt=&#34;Took me 20 minutes to migrate the server along with the drives, and 2 hours to get the zip tie mounting just right. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Took me 20 minutes to migrate the server along with the drives, and 2 hours to get the zip tie mounting just right. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/media/setup-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/media/setup-2_hu4fee9cca385a21ad4107c4ff8ca7db7a_2752694_1000x1000_fit_q75_box.jpg&#34;
             width=&#34;1000&#34;
             height=&#34;750&#34;
             alt=&#34;The small shelf attachment holds two external drives and the power adapter.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The small shelf attachment holds two external drives and the power adapter.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/media/setup-3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/media/setup-3_huc7d0e15f82e206c10f8af362a4f5eaf0_3875867_1000x1000_fit_q75_box.jpg&#34;
             width=&#34;750&#34;
             height=&#34;1000&#34;
             alt=&#34;Another angle.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Another angle.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/media/setup-4.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/16/third-times-the-charm/media/setup-4_hu1fbcdcbeb26be1109f6db464f372ebf2_3179306_1000x1000_fit_q75_box.jpg&#34;
             width=&#34;750&#34;
             height=&#34;1000&#34;
             alt=&#34;Plenty of clearance for adequate cooling.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Plenty of clearance for adequate cooling.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The power consumption is improved on this setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mean: 27 W&lt;/li&gt;
&lt;li&gt;min: 23 W&lt;/li&gt;
&lt;li&gt;max: 70 W&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Results on the DeskMini on a typical day:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mean: 34.8 W&lt;/li&gt;
&lt;li&gt;min: 28 W&lt;/li&gt;
&lt;li&gt;max: 89 W&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All measurements include the power consumption of the UPS, fiber PON and the router, which is around 10 W.&lt;/p&gt;
&lt;p&gt;And the performance is good enough.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m happy with it.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also handy that I now have that one laptop that I can sticker bomb without feeling guilty about removing them later
on.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>The Fedora Linux starter pack: everything you need for a smooth experience</title>
      <link>https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/</link>
      <pubDate>Mon, 14 Oct 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;I like &lt;a href=&#34;https://fedoraproject.org/&#34;&gt;Fedora Linux.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the Linux distro that stopped my habit of &lt;a href=&#34;https://en.wiktionary.org/wiki/distro-hopping&#34;&gt;distro-hopping.&lt;/a&gt; Big
deal? Ooh, big deal!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s stable in day-to-day use, ships with up-to-date software, and the software selection is adequate out of the box.&lt;/p&gt;
&lt;p&gt;It also ships with a fresh Linux kernel version&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, resulting in a good experience even on modern hardware.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been happily using it for about 4 years at this point, both on personal and work computers.&lt;/p&gt;
&lt;p&gt;However, every time I recommend it to my friends, family and colleagues, I have to mention a few things that a new
Fedora Linux user might want to do first so that the experience is as smooth as possible.&lt;/p&gt;
&lt;p&gt;If it weren&amp;rsquo;t for those aspects, Fedora would be pretty much perfect.&lt;/p&gt;
&lt;h3 id=&#34;set-up-rpm-fusion&#34;&gt;Set up RPM Fusion&lt;/h3&gt;
&lt;p&gt;There are some packages that are not available on Fedora by default, likely as a result of copyright laws, lawyers and
Red Hat (IBM) not having the appetite to fight it out in the courts.&lt;/p&gt;
&lt;p&gt;This is why &lt;a href=&#34;https://rpmfusion.org/&#34;&gt;RPM Fusion&lt;/a&gt; exists:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RPM Fusion provides software that the Fedora Project or Red Hat doesn&amp;rsquo;t want to ship.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The installation instructions are &lt;a href=&#34;https://rpmfusion.org/Configuration&#34;&gt;here&lt;/a&gt;, and I personally prefer this one-liner
setup:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This step is a prerequisite to the next one.&lt;/p&gt;
&lt;h3 id=&#34;enable-hardware-accelerated-video-playback&#34;&gt;Enable hardware accelerated video playback&lt;/h3&gt;
&lt;p&gt;This is the part where I blame lawyers.&lt;/p&gt;
&lt;p&gt;To have a good chance at smoothly playing back videos in a browser or using VLC, you have to do a few extra steps,
because someone fucked up.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://rpmfusion.org/Howto/Multimedia&#34;&gt;Check this guide for up-to-date information.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Switch to the full version of &lt;code&gt;ffmpeg&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo dnf swap ffmpeg-free ffmpeg --allowerasing&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AMD GPU users:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo dnf swap mesa-va-drivers mesa-va-drivers-freeworld&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo dnf swap mesa-vdpau-drivers mesa-vdpau-drivers-freeworld&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Intel GPU users (Broadwell and newer, 2014+):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo dnf install intel-media-driver&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Old Intel GPU users (Ivy Bridge and older, &amp;lt;=2013):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo dnf install libva-intel-driver&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NVIDIA GPU users: good luck.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;You can verify the enabled profiles using &lt;code&gt;vainfo&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the output on my machine before completing the steps (AMD GPU).&lt;/p&gt;
&lt;p&gt;Note the lack of H.264 and HEVC profiles.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;me@mymachine:~$ vainfo
Trying display: wayland
libva info: VA-API version 1.21.0
libva info: Trying to open /usr/lib64/dri-nonfree/radeonsi_drv_video.so
libva info: Trying to open /usr/lib64/dri-freeworld/radeonsi_drv_video.so
libva info: Trying to open /usr/lib64/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_21
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.21 (libva 2.21.0)
vainfo: Driver version: Mesa Gallium driver 24.1.7 for AMD Radeon 780M (radeonsi, gfx1103_r1, LLVM 18.1.6, DRM 3.57, 6.10.8-200.fc40.x86_64)
vainfo: Supported profile and entrypoints
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD
      VAProfileAV1Profile0            :	VAEntrypointVLD
      VAProfileAV1Profile0            :	VAEntrypointEncSlice
      VAProfileNone                   :	VAEntrypointVideoProc
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here&amp;rsquo;s what it looks like after the tweaks are applied.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;me@mymachine:~$ vainfo
Trying display: wayland
libva info: VA-API version 1.21.0
libva info: Trying to open /usr/lib64/dri-nonfree/radeonsi_drv_video.so
libva info: Trying to open /usr/lib64/dri-freeworld/radeonsi_drv_video.so
libva info: Trying to open /usr/lib64/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_21
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.21 (libva 2.21.0)
vainfo: Driver version: Mesa Gallium driver 24.1.7 for AMD Radeon 780M (radeonsi, gfx1103_r1, LLVM 18.1.6, DRM 3.57, 6.10.8-200.fc40.x86_64)
vainfo: Supported profile and entrypoints
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD
      VAProfileAV1Profile0            :	VAEntrypointVLD
      VAProfileAV1Profile0            :	VAEntrypointEncSlice
      VAProfileNone                   :	VAEntrypointVideoProc
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;enable-flathub&#34;&gt;Enable Flathub&lt;/h3&gt;
&lt;p&gt;This step is only necessary if you did not enable &lt;a href=&#34;https://github.com/minosimo&#34;&gt;third-party repositories&lt;/a&gt; during the
inital setup of your Fedora Linux installation.&lt;/p&gt;
&lt;p&gt;Setting up Flathub is just one command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Check &lt;a href=&#34;https://flathub.org/setup/Fedora&#34;&gt;the Flathub setup instructions for Fedora&lt;/a&gt; for up-to-date info.&lt;/p&gt;
&lt;h3 id=&#34;-specific-to-estonia-id-card-support&#34;&gt;🇪🇪 Specific to Estonia: ID card support&lt;/h3&gt;
&lt;p&gt;Estonia has &lt;a href=&#34;https://www.id.ee/en/&#34;&gt;an ID Card system&lt;/a&gt; (&lt;em&gt;Eesti ID kaart&lt;/em&gt;), and the desktop application is
also officially supported on Linux. &lt;em&gt;&lt;strong&gt;Ubuntu&lt;/strong&gt;&lt;/em&gt; Linux.&lt;/p&gt;
&lt;p&gt;To use the ID card in Fedora, you&amp;rsquo;ll need to install the necessary packages:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo dnf install -y open-eid&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Firefox users will need to make sure that the Web eID extension is installed. If
it wasn&amp;rsquo;t installed with the above
command, &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/web-eid-webextension/&#34;&gt;you can also get it here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The desktop application used for opening and digitally signing documents, DigiDoc4, has a bad habit of breaking
sometimes due to changes. Luckily there exists an unofficial version of DigiDoc4 as a Flatpak
and &lt;a href=&#34;https://flathub.org/apps/ee.ria.qdigidoc4&#34;&gt;it&amp;rsquo;s available on Flathub.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s mentioned
in &lt;a href=&#34;https://github.com/open-eid/linux-installer/wiki/Linux-Packages&#34;&gt;the official open-eid/linux-installer repo&lt;/a&gt; as
well, which lends some credibility (plus I know
the person that built it).&lt;/p&gt;
&lt;p&gt;As of 2024-10-14, ID card works on Firefox and the DigiDoc4 client from the Fedora official repository does not crash
and burn.&lt;/p&gt;
&lt;h3 id=&#34;gnome-fix-the-alttab-behaviour&#34;&gt;GNOME: fix the &amp;ldquo;Alt+Tab&amp;rdquo; behaviour&lt;/h3&gt;
&lt;p&gt;GNOME is a great desktop environment, but it, too, has its quirks.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re used to &amp;ldquo;Alt+Tab&amp;rdquo; keyboard shortcut simply switching windows, then you&amp;rsquo;ll have to tweak it in settings.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open &amp;ldquo;Settings&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Navigate to &amp;ldquo;Keyboard&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Click on &amp;ldquo;View and Customize shortcuts&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Use the search bar to:
&lt;ul&gt;
&lt;li&gt;disable &amp;ldquo;Switch applications&amp;rdquo; shortcut&lt;/li&gt;
&lt;li&gt;set the &amp;ldquo;Switch windows&amp;rdquo; shortcut to &amp;ldquo;Alt+Tab&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&amp;rsquo;s what it looks like on GNOME 46.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/shortcuts-1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/shortcuts-1_huc46aef82dfe3ce571b16d816d9e67657_70027_1000x1000_fit_box_3.png&#34;
             width=&#34;979&#34;
             height=&#34;642&#34;
             alt=&#34;Navigate to &amp;#39;Keyboard&amp;#39; and click on &amp;#39;View and Customize shortcuts&amp;#39;&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Navigate to &amp;#39;Keyboard&amp;#39; and click on &amp;#39;View and Customize shortcuts&amp;#39;
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/shortcuts-2.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/shortcuts-2_hu6080947670539e1aecfcda33203058bf_64102_1000x1000_fit_box_3.png&#34;
             width=&#34;979&#34;
             height=&#34;642&#34;
             alt=&#34;Select &amp;#39;Navigation&amp;#39;&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Select &amp;#39;Navigation&amp;#39;
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/shortcuts-3.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/shortcuts-3_huc5fbab252ad54a6adafc629d69a76b44_79026_1000x1000_fit_box_3.png&#34;
             width=&#34;979&#34;
             height=&#34;642&#34;
             alt=&#34;Disable &amp;#34;Switch applications&amp;#34; shortcut.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Disable &amp;#34;Switch applications&amp;#34; shortcut.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/shortcuts-4.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/shortcuts-4_hu25440a6a93ef002c15fc07d4bfb82e39_78245_1000x1000_fit_box_3.png&#34;
             width=&#34;979&#34;
             height=&#34;642&#34;
             alt=&#34;Set the &amp;#34;Switch windows&amp;#34; shortcut to &amp;#34;Alt&amp;#43;Tab&amp;#34;.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Set the &amp;#34;Switch windows&amp;#34; shortcut to &amp;#34;Alt&amp;#43;Tab&amp;#34;.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;gnome-minimize-maximize-buttons-on-windows&#34;&gt;GNOME: minimize, maximize buttons on windows&lt;/h3&gt;
&lt;p&gt;By default, you&amp;rsquo;ll only see the &amp;ldquo;Close&amp;rdquo; button on windows, but it is possible to also show minimize and maximize
buttons.&lt;/p&gt;
&lt;p&gt;Install GNOME tweaks with &lt;code&gt;sudo dnf install -y gnome-tweaks&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Open it, navigate to &lt;code&gt;Windows&lt;/code&gt;, and toggle &lt;code&gt;Maximize&lt;/code&gt; and &lt;code&gt;Minimize&lt;/code&gt; settings.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/min-max.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/min-max_hub6f75d2c0d967d59f8274a81449f4189_60772_1000x1000_fit_box_3.png&#34;
             width=&#34;984&#34;
             height=&#34;647&#34;
             alt=&#34;GNOME tweaks settings as of GNOME 40.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      GNOME tweaks settings as of GNOME 40.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;gnome-app-status-indicators&#34;&gt;GNOME: app status indicators&lt;/h3&gt;
&lt;p&gt;Some apps, such as Solaar, like to run in the background and show you a status indicator on your taskbar.
This functionality is not present on GNOME by default, but you can easily fix it with
the &lt;a href=&#34;https://extensions.gnome.org/extension/615/appindicator-support/&#34;&gt;AppIndicator and KStatusNotifierItem Support&lt;/a&gt;
extension.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/appindicator.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/10/14/fedora-starter-pack/media/appindicator_hub899e60a51c1d2d15831606aaee389dd_20029_1000x1000_fit_box_3.png&#34;
             width=&#34;525&#34;
             height=&#34;262&#34;
             alt=&#34;I used to install a handful of extensions in the past to &amp;#34;fix&amp;#34; GNOME, but in 2024 this is the only one I actually need.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I used to install a handful of extensions in the past to &amp;#34;fix&amp;#34; GNOME, but in 2024 this is the only one I actually need.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;gnome-corner-tiling&#34;&gt;GNOME: corner tiling&lt;/h3&gt;
&lt;p&gt;As of GNOME 46, you cannot do corner tiling out of the box. The best you can do is split windows horizontally, which
is fine for single ultra-wide monitor setups. There are situations where corner tiling comes in really handy.&lt;/p&gt;
&lt;p&gt;The best solution I have found so far seems to
be the &lt;a href=&#34;https://extensions.gnome.org/extension/3733/tiling-assistant/&#34;&gt;Tiling Assistant&lt;/a&gt;
extension. It&amp;rsquo;s configurable and will probably suit your workflow well.&lt;/p&gt;
&lt;p&gt;At the time of writing, it does have a few small but annoying enough bugs that are a show-stopper for me, but compared
to other solutions this one at least works.&lt;/p&gt;
&lt;h3 id=&#34;optional-disable-selinux&#34;&gt;Optional: disable SELinux&lt;/h3&gt;
&lt;p&gt;There are two types of people: those that swear by &lt;a href=&#34;https://github.com/SELinuxProject&#34;&gt;SELinux&lt;/a&gt;, and those that swear
&lt;em&gt;due to&lt;/em&gt; SELinux.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re running into weird issues and you don&amp;rsquo;t know why, then see if SELinux is to blame.&lt;/p&gt;
&lt;p&gt;I run into issues with SELinux every time I try to move files around with &lt;code&gt;rsync&lt;/code&gt;, resulting in a simple
&lt;code&gt;rsync -aAXv source/ destination/&lt;/code&gt; command becoming &lt;code&gt;rsync -aAXv --filter=&#39;-x security.selinux&#39; source/ destination/&lt;/code&gt;.
It&amp;rsquo;s frustrating.&lt;/p&gt;
&lt;p&gt;To fix this, I simply disable SELinux. Open up &lt;code&gt;/etc/selinux/config&lt;/code&gt;, find the line &lt;code&gt;SELINUX=enforcing&lt;/code&gt; and change it to
&lt;code&gt;SELINUX=disabled&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll need to restart your machine for it to take effect.&lt;/p&gt;
&lt;h3 id=&#34;dont-use-zfs&#34;&gt;Don&amp;rsquo;t use ZFS&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/openzfs/zfs&#34;&gt;ZFS&lt;/a&gt; is a great filesystem, but not on distros that ship new kernel versions.&lt;/p&gt;
&lt;p&gt;This is due to OpenZFS needing to be built against the Linux kernel, and new kernel releases often break compatibility.
Those breakages may lead to your ZFS pools not being imported at boot as a result.&lt;/p&gt;
&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; use ZFS if you use LTS kernels built by someone else, or if you simply don&amp;rsquo;t update your system, but I don&amp;rsquo;t
recommend either approach.&lt;/p&gt;
&lt;p&gt;Use a different distribution, such as Debian, if you really need to use ZFS daily.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t care for ZFS but like data integrity checks, snapshots and don&amp;rsquo;t use a lot of disks in an array, then
&lt;code&gt;btrfs&lt;/code&gt; &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard#fedora-server-and-btrfs&#34;&gt;is totally fine.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;dont-use-nvidia-gpu-s&#34;&gt;Don&amp;rsquo;t use NVIDIA GPU-s&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve never had a good experience with the open source driver &lt;code&gt;nouveau&lt;/code&gt;, and the proprietary drivers are a headache and
break things.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://developer.nvidia.com/blog/nvidia-transitions-fully-towards-open-source-gpu-kernel-modules/&#34;&gt;This might be about to change,&lt;/a&gt;
but I&amp;rsquo;ll believe it when I see it.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I hope that this has made your Fedora Linux experience just a little bit better.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s to hoping that IBM does not fuck up Fedora
Linux. &lt;a href=&#34;https://www.redhat.com/en/blog/message-red-hat-associates-today&#34;&gt;My expectations are low.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you have any other tips to share then please contact me! You can find the contact details below.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;one thing that I appreciate with Fedora is that the kernel versions are ever-so-slightly lagging behind the likes
of Arch Linux, meaning that you&amp;rsquo;ll be less likely to hit any kernel bugs, and yet you don&amp;rsquo;t have to worry about being
too far behind (like on Ubuntu or Debian).&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;no, seriously, I wish you all the luck in the world. I have never managed to have a good experience with NVIDIA on
Linux. I&amp;rsquo;ve completely given up.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;use whatever desktop environment floats your boat, I don&amp;rsquo;t judge!&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>So you want to migrate to Kubernetes: observations from a software developer</title>
      <link>https://ounapuu.ee/posts/2024/10/01/kubernetes/</link>
      <pubDate>Tue, 01 Oct 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/10/01/kubernetes/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/10/01/kubernetes/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;Kubernetes: everyone wants to do it, regardless of their scale and business objectives.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Common justifications include better scalability, cost savings, standardization and being super modern and stuff. It&amp;rsquo;s
the future!&lt;/p&gt;
&lt;p&gt;In my personal experience, Kubernetes is far from the magical uptime machine that a lot of people think it is, and
migrating it to it comes with a lot of hidden costs and potential downtime.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not a Kubernetes expert, but I&amp;rsquo;ve been involved in a few Kubernetes migration projects and I have
&lt;em&gt;&lt;strong&gt;opinions.&lt;/strong&gt;&lt;/em&gt; Here are all the learnings and observations that I&amp;rsquo;ve personally witnessed.&lt;/p&gt;
&lt;h3 id=&#34;migrations-are-complex&#34;&gt;Migrations are complex&lt;/h3&gt;
&lt;p&gt;For most companies, using Kubernetes will mean planning and executing a migration project.&lt;/p&gt;
&lt;p&gt;Assumptions will be made, estimates communicated and then the work begins. 90% of the migration will likely go
relatively smoothly, but the last
10% will result in the migration project blowing past any initial estimates that you had.&lt;/p&gt;
&lt;p&gt;There will always be those teams and services that require more time due to conflicting priorities or unexpected
technical nuances popping up during testing.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the long tail that gets you.&lt;/p&gt;
&lt;h3 id=&#34;kubernetes-is-complex&#34;&gt;Kubernetes is complex&lt;/h3&gt;
&lt;p&gt;Kubernetes is so complex that most people point you towards managed Kubernetes clusters provided by the big cloud
providers
as a starting point.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; To me, this is the best indication that we&amp;rsquo;ve lost the plot.&lt;/p&gt;
&lt;p&gt;Kubernetes is an abstraction layer on an already complicated
stack, and &lt;a href=&#34;https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/&#34;&gt;abstractions tend to leak&lt;/a&gt; at the
most inconvenient time.&lt;/p&gt;
&lt;p&gt;There is nothing wrong about running plain old virtual machines as container hosts and scaling them vertically. Load
balancers and containers
are a stable and reliable technology by now, and individual servers have made a big
leap in performance over the past decade.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;re going to have to know about the fundamentals of where your service is running either way, so you might as well
keep the stack simple, understandable and easily debuggable, avoiding all the extra complexity.&lt;/p&gt;
&lt;p&gt;There is no shame in &lt;a href=&#34;https://boringtechnology.club/&#34;&gt;choosing boring technology.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Shout-out to all the madlads who run Kubernetes at home &lt;em&gt;&lt;strong&gt;for fun.&lt;/strong&gt;&lt;/em&gt; I respect the hustle.&lt;/p&gt;
&lt;h3 id=&#34;kubernetes-will-only-start-making-sense-at-scale&#34;&gt;Kubernetes will only start making sense at scale&lt;/h3&gt;
&lt;p&gt;If your company doesn&amp;rsquo;t have a fully staffed platform team (6-8 full-time employees), then you probably don&amp;rsquo;t need
Kubernetes.&lt;/p&gt;
&lt;p&gt;If you do, then you can start considering it, but know that it won&amp;rsquo;t magically solve every issue that you have in your
tech organization. Your time might be better spent on tackling &lt;em&gt;those&lt;/em&gt; issues first.&lt;/p&gt;
&lt;p&gt;Kubernetes is great if you want to standardize how your workloads run, and with additional tooling and setup you can
end up with a pretty neat system where developers can set up new services on their own and easily monitor them
using your observability stack (Grafana, Prometheus etc.).&lt;/p&gt;
&lt;p&gt;This requires a lot of effort though, from both your platform team and developers. This effort will be unreasonably high
for small startups and organizations, and my guesstimate is that using Kubernetes will start making sense if you have
100+ developers in your tech organization.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a small team that has a setup that works for you, then continue using it. You&amp;rsquo;re doing great!&lt;/p&gt;
&lt;p&gt;If you only need a few Kubernetes features, such as autoscaling, health checks and rolling deployments, then you can
probably find a simple solution that works on your existing stack.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re just starting up, then don&amp;rsquo;t use Kubernetes. My recommendation is to start
with a stupid simple stack that you know really well and scale it up vertically for as long as possible. Once that setup
does not work for you, you will probably have enough money and people to do the Kubernetes migration. It&amp;rsquo;s a good
problem to have!&lt;/p&gt;
&lt;h3 id=&#34;let-your-developers-learn-kubernetes-before-migrating-to-it&#34;&gt;Let your developers learn Kubernetes before migrating to it&lt;/h3&gt;
&lt;p&gt;If you skip this part, then expect a lot of questions, blocking issues, missed deadlines, hasty debugging, lost
productivity and multiple production outages.&lt;/p&gt;
&lt;p&gt;When I first dealt with Kubernetes, I had no idea what I was doing. I barely got to search what was the difference
between pods and nodes, how to package applications into containers and what the hell an ingress was&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;. There was no
formal training or opportunities to take a few days to play around with Kubernetes before rolling it out to production.
I had to make sure my other work commitments got done in parallel.&lt;/p&gt;
&lt;p&gt;It &lt;em&gt;&lt;strong&gt;sucked&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I eventually got better at working with Kubernetes, mainly as a result of learning from production outages. This is
also training, but much more expensive compared to simply giving developers the opportunity to learn and experiment
in a sandbox.&lt;/p&gt;
&lt;p&gt;After doing most of &lt;a href=&#34;https://github.com/indrekots/kubernetes-the-much-harder-way&#34;&gt;&amp;ldquo;Kubernetes The Much Harder Way&amp;rdquo;&lt;/a&gt;, I
have a
vague understanding of what I&amp;rsquo;m doing, but if the Kubernetes cluster were to completely fall over in an unexpected way,
I would still have no idea on how to even approach fixing it, or how to make sure that the cluster is properly secured.&lt;/p&gt;
&lt;p&gt;One day long Kubernetes workshop organized by the company can go a long way in helping everyone get up to speed.
Just organize one &lt;em&gt;&lt;strong&gt;before&lt;/strong&gt;&lt;/em&gt; the migration.&lt;/p&gt;
&lt;h3 id=&#34;your-overworked-developers-wont-like-it&#34;&gt;Your overworked developers won&amp;rsquo;t like it&lt;/h3&gt;
&lt;p&gt;During my 8+ years as a software developer, there was a push for developers to be full stack and to embrace the
operational side. I don&amp;rsquo;t have anything against that, developers should be responsible for what they deploy and observe
the behaviour of their services diligently.&lt;/p&gt;
&lt;p&gt;However, I&amp;rsquo;ve also learned that a good chunk of developers don&amp;rsquo;t want to mess with the full stack and want to focus on
their area of responsibility, which may involve more product-focused work. Throw in some inefficient meetings,
absurdly high expectations from the business side, and the time and tolerance for handling anything else goes way down.&lt;/p&gt;
&lt;p&gt;The cognitive capacity for the average developer is limited. If your developers are already on that limit, and you
decide that &lt;strong&gt;&lt;em&gt;we need some Kubernetes&lt;/em&gt;&lt;/strong&gt; and developers need to be responsible for their own deployments, then you need
to expect some resistance and contempt towards you.&lt;/p&gt;
&lt;p&gt;Even before you get to the Kubernetes part, you may also have to make sure that developers know the fundamentals about
where their service runs and what amount of resource consumption is appropriate for their service. Turns
out that this is not a given, especially in a fast-growth environment where teams and ownerships change often.&lt;/p&gt;
&lt;p&gt;Oh, and developers might get very angry with you as every
Kubernetes-related frustration will be attributed to your platform team, even if it&amp;rsquo;s an issue they themselves caused.
It&amp;rsquo;s not fair, but it&amp;rsquo;s how it may play out.&lt;/p&gt;
&lt;h3 id=&#34;your-application-code-has-made-assumptions-about-the-platform-its-running-on&#34;&gt;Your application code has made assumptions about the platform it&amp;rsquo;s running on&lt;/h3&gt;
&lt;p&gt;If you don&amp;rsquo;t have expert knowledge about the service that you&amp;rsquo;re about to migrate to Kubernetes, then you&amp;rsquo;ll likely
miss any assumptions that have been made in the application code itself.&lt;/p&gt;
&lt;p&gt;Most common one is the assumption that there exists only one instance of your service at any time. You can
lift-and-shift
it to Kubernetes &lt;em&gt;as-is&lt;/em&gt;, but then you won&amp;rsquo;t be taking advantage of any scalability benefits that Kubernetes offers, so
what&amp;rsquo;s the point?&lt;/p&gt;
&lt;p&gt;There was also a case where a service was relying on local storage for temporarily storing tasks that had to be
picked up later. This made perfect sense on a virtual machine, but on Kubernetes the storage on the pods
is ephemeral, and pods have a habit of restarting for all sorts of reasons. This issue went unnoticed for quite a while
and
only became known after someone familiar with the service asked about it.
Adding a &lt;a href=&#34;https://kubernetes.io/docs/concepts/storage/persistent-volumes/&#34;&gt;persistent volume&lt;/a&gt;
fixed this issue.&lt;/p&gt;
&lt;p&gt;Some libraries and solutions can also make assumptions about the number of instances that your service has, or the
internal IP addresses that point to your service being static and predictable. Kubernetes breaks all of those
assumptions.&lt;/p&gt;
&lt;h3 id=&#34;you-still-need-a-platform-team&#34;&gt;You still need a platform team&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve seen claims that using Kubernetes will mean that you&amp;rsquo;ll need fewer people on your platform team, especially if you
use a managed Kubernetes offering.&lt;/p&gt;
&lt;p&gt;The reality is that you still need someone to make sure that even a managed Kubernetes instance stays up and running.
This involves mundane work, such as making sure that updates are applied correctly without breaking every workload,
or making sure that additional tooling bolted on to your Kubernetes cluster doesn&amp;rsquo;t wreck the services that are running
on it.&lt;/p&gt;
&lt;p&gt;Before the migration, your platform team answered questions and requests from developers, and wrangled whatever
infrastructure you had running.&lt;/p&gt;
&lt;p&gt;During the migration, your platform team will be answering questions and requests for both setups while also setting up
Kubernetes and related infrastructure-as-code solutions, and unless you brought in more people before the migration,
they&amp;rsquo;ll be overworked.&lt;/p&gt;
&lt;p&gt;After the migration, your platform team will still be answering questions and requests, maintaining whatever
infrastructure-as-code
solutions you put in place, and making sure that Kubernetes stays running, which seems to take about the same number
of people as before, if not more.&lt;/p&gt;
&lt;p&gt;If you managed to avoid burning out any engineers during the migration, then that&amp;rsquo;s great!&lt;/p&gt;
&lt;p&gt;If you managed to reduce headcount &lt;em&gt;after&lt;/em&gt; a Kubernetes migration and it did not bite you in the ass years after the
fact, then please do let me know.&lt;/p&gt;
&lt;h3 id=&#34;kubernetes-wont-fix-your-legacy-monolith&#34;&gt;Kubernetes won&amp;rsquo;t fix your legacy monolith&lt;/h3&gt;
&lt;p&gt;Kubernetes works really well with small services that start up within seconds and use relatively few resources.&lt;/p&gt;
&lt;p&gt;The start-up time of your monolith is probably measured in minutes, and it likes to use all the CPU cores and RAM that
you
give it.&lt;/p&gt;
&lt;p&gt;It can still run on Kubernetes, but certain aspects, such as scaling up fast in response to a spike in load, won&amp;rsquo;t work
due to the long start-up time, or due to existing Kubernetes nodes not being able to accommodate your monolith without
slowly starting up new nodes. By the time more instances of your service start up, that temporary increase in load
might have already passed. Your performance still sucks and your resource usage graphs look like a poorly maintained
saw.&lt;/p&gt;
&lt;p&gt;Your platform team will also be unhappy with these types of services as these big resource-hungry monoliths tend to
require the use of bigger nodes, and they might even end up impacting neighboring pods if configured improperly.&lt;/p&gt;
&lt;p&gt;If you have set up tooling to ship service logs from your pods to a centralized location, then you might also find
that your high-traffic monolith is logging so much that the tooling can&amp;rsquo;t keep up, resulting in logs going missing.
The root cause can be something as basic
as &lt;a href=&#34;https://vector.dev/docs/reference/configuration/sources/kubernetes_logs/#glob_minimum_cooldown_ms&#34;&gt;a default configuration value not working out&lt;/a&gt;
for your &lt;em&gt;thicc&lt;/em&gt; monolith, but by the time you get to that discovery, you&amp;rsquo;ll have wasted a good number of hours or days
of productive work time.&lt;/p&gt;
&lt;h3 id=&#34;kubernetes-wont-magically-fix-your-performance-issues&#34;&gt;Kubernetes won&amp;rsquo;t magically fix your performance issues&lt;/h3&gt;
&lt;p&gt;Autoscaling is one of the features that a lot of Kubernetes users like.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;re having lunch and your service got really popular all of a sudden? No problem, your properly configured
&lt;a href=&#34;https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/&#34;&gt;HorizontalPodAutoscaler&lt;/a&gt; can take care of
it!&lt;/p&gt;
&lt;p&gt;Autoscaling can save your butt, but it can also introduce additional issues.&lt;/p&gt;
&lt;p&gt;For example, deploying a new version of your service can fail
because you have too many instances of the service running. Databases, such
as &lt;a href=&#34;https://www.postgresql.org/&#34;&gt;PostgreSQL&lt;/a&gt;,
have a limited number of database connections available. Each instance of your service using up N database connections.
If you don&amp;rsquo;t account for deployments or autoscaling scenarios, then the new instances
will fail to start up because they cannot establish new database connections. It&amp;rsquo;s a good idea to have a few instances&#39;
worth of database connections set aside as a buffer.&lt;/p&gt;
&lt;p&gt;Unless you&amp;rsquo;re actually limited by physical constraints, such as CPU time, memory and network bandwidth, then Kubernetes
is unlikely to fix any performance issues. You&amp;rsquo;re better off profiling your application, network and database
performance first and making sure that your observability stack gives you enough information to troubleshoot
performance issues.&lt;/p&gt;
&lt;h3 id=&#34;kubernetes-is-not-a-magical-uptime-machine&#34;&gt;Kubernetes is not a magical uptime machine&lt;/h3&gt;
&lt;p&gt;It really isn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;At some point, you will have downtime because of a Kubernetes configuration issue, taking down your whole service.&lt;/p&gt;
&lt;p&gt;Sometimes you&amp;rsquo;ll involve additional tooling to make working with Kubernetes easier. That can also horrifically backfire
due to &lt;a href=&#34;https://ounapuu.ee/posts/2024/04/04/helm-rollbljat/&#34;&gt;circumstances not under your control.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll probably have system-wide latency spikes because a critical service got its pods restarted one by one,
and the new pods need to warm up their caches again. This is especially true
for &lt;a href=&#34;https://en.wikipedia.org/wiki/Java_virtual_machine&#34;&gt;JVM&lt;/a&gt;-based services.&lt;/p&gt;
&lt;p&gt;Misconfigured tooling can wreak havoc on your Kubernetes cluster. It&amp;rsquo;s not fun to troubleshoot why all your pods
suddenly disappeared, only to find out later that &lt;a href=&#34;https://karpenter.sh/&#34;&gt;Karpenter&lt;/a&gt; went on a pod massacre.&lt;/p&gt;
&lt;h3 id=&#34;vertical-scaling-can-go-a-long-way&#34;&gt;Vertical scaling can go a long way&lt;/h3&gt;
&lt;p&gt;If your current stack has a load balancer and a few containers, and you&amp;rsquo;re not doing anything too inefficient,
then you can probably scale up vertically for a very long time.&lt;/p&gt;
&lt;p&gt;Servers have made a big leap in performance and capability, resulting in
machines with 128+ CPU cores, &lt;em&gt;terabytes&lt;/em&gt; of fast memory and lots of room for adding ridiculously fast SSD-based
storage.&lt;/p&gt;
&lt;p&gt;You can already take advantage of this using your favourite cloud provider by picking a higher-tiered VM. You&amp;rsquo;ll still
be
paying the cloud tax, but it&amp;rsquo;s going to be cheaper than a Kubernetes cluster, and your stack will remain simple, fast
and portable.&lt;/p&gt;
&lt;p&gt;If you want to go even further, you can buy 2+ physical servers, find a suitable location to host them,
and take full advantage of modern hardware. At a certain scale, this will be much cheaper than &lt;em&gt;the cloud&lt;/em&gt;,
even if you need to hire somebody to manage, maintain and replace them. Physical servers aren&amp;rsquo;t scary, and you&amp;rsquo;ll need
knowledgeable platform people working for you either way, so why not cut out the complexity and expense of the cloud?&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Kubernetes is a perfectly good option to go with, but only at the right level of organizational size and maturity.
Unless you&amp;rsquo;re at that level, you really don&amp;rsquo;t need to worry about using it.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;right after they&amp;rsquo;re done implementing &amp;ldquo;AI&amp;rdquo; and LLM-s on a completely unsuitable use case.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;the only thing worse than managed Kubernetes is a poorly managed self-hosted one.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;turns out that it&amp;rsquo;s a fancy name for a reverse proxy. You know, like &lt;code&gt;nginx&lt;/code&gt;.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;there are benefits to using the cloud, but just like Kubernetes, cloud services have a narrow set of circumstances
where their use is appropriate.&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>My blog successfully survived a scheduled power outage</title>
      <link>https://ounapuu.ee/posts/2024/09/14/look-ma-no-downtime/</link>
      <pubDate>Sat, 14 Sep 2024 11:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/09/14/look-ma-no-downtime/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/09/14/look-ma-no-downtime/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;I had the opportunity to test the resiliency of my home server setup due to a scheduled power outage on 2024-09-13.&lt;/p&gt;
&lt;p&gt;It was also Friday the 13th. &lt;a href=&#34;https://youtu.be/39uoolmtjSA&#34;&gt;I&amp;rsquo;m not superstitious, but I&amp;rsquo;m a little stitious.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My setup usually consists of the home server, a Wifi AP/router combo box, a converter box for the fiber line, and a
CyberPower UT850EG UPS.&lt;/p&gt;
&lt;p&gt;The planned power outage was communicated a week in advance and was supposed to take up to two hours. It ended up taking
about 1 hour 20 minutes.&lt;/p&gt;
&lt;p&gt;The CyberPower UPS is good for temporary loss of power and can probably run my whole networking and home server setup
for about 10-15 minutes, which is not enough. Luckily I have one of those Jackery power banks that can provide 230V
output
for a much longer time. During a trial run, I found that this Jackery box can sustain my homelab for about 4 hours
without
any issues.&lt;/p&gt;
&lt;p&gt;At 11:02, the power went out and UPS did its thing and kept the setup alive. I then turned on the Jackery power bank,
connected the UPS to the 230 V power line and everything remained operational. I continued working on my laptop
as usual.&lt;/p&gt;
&lt;p&gt;My blog and all the other services I run on my home server kept working.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/14/look-ma-no-downtime/media/grafana.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/14/look-ma-no-downtime/media/grafana_hu965618a44bebe184ee395dc11dec8248_170201_1000x1000_fit_box_3.png&#34;
             width=&#34;1000&#34;
             height=&#34;289&#34;
             alt=&#34;Great success!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Great success!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I hope to one day do something similar but on a bigger scale, involving solar panels and big batteries. Would be
wicked cool to keep a whole building running off of batteries during outages.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>I encourage you to write a blog</title>
      <link>https://ounapuu.ee/posts/2024/09/06/blog/</link>
      <pubDate>Fri, 06 Sep 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/09/06/blog/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;It&amp;rsquo;s been over 4 years since &lt;a href=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/&#34;&gt;my first post&lt;/a&gt; on this blog.&lt;/p&gt;
&lt;p&gt;During those 4 years I&amp;rsquo;ve written over 90 posts, received over 1 million clicks,
a dozen legitimate reader e-mails and thousands of spam e-mails.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;And I love it!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve found that writing can be very fulfilling and I encourage you to at least
give it a try.&lt;/p&gt;
&lt;p&gt;This post covers the reasons why I write, how I write and some tips on how you can get started writing one yourself.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Blogging is so &lt;del&gt;2004&lt;/del&gt; 2024.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;why-i-write&#34;&gt;Why I write&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m a software developer by trade. However, some might find it surprising that
I actually write very little code in my free time.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/github.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/github_hubc1bca17c386c208501091df555f3137_36989_800x800_fit_box_3.png&#34;
             width=&#34;800&#34;
             height=&#34;213&#34;
             alt=&#34;My GitHub activity.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      My GitHub activity.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Instead, I play around with computer hardware, self-host some services on my
machines, and make stupid experiments that often result in interesting findings.&lt;/p&gt;
&lt;p&gt;Most of that work had been invisible, until I started writing about them on my blog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I write because other people find my posts useful.&lt;/strong&gt; I&amp;rsquo;ve learned that
some of my posts have been really useful to people who&amp;rsquo;ve faced similar problems
in the past or who want to learn more about a relatively obscure piece of hardware.
Tools like &lt;a href=&#34;https://search.marginalia.nu/site/ounapuu.ee?view=links&#34;&gt;Marginalia search&lt;/a&gt;,
&lt;a href=&#34;https://search.google.com/search-console/&#34;&gt;Google Search Console&lt;/a&gt; and &lt;code&gt;goaccess&lt;/code&gt;
have been great sources for finding where my content has been referenced.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve found my content linked in all sorts of places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.gentoo.org/wiki/Lenovo_Thinkpad_T430&#34;&gt;Gentoo wiki entry for the Lenovo ThinkPad T430&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://libreboot.org/docs/install/&#34;&gt;Libreboot installation instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/ZQX4FLrm9ac?t=288&#34;&gt;a YouTube video with almost a million views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/MaOORTLJyzk?t=505&#34;&gt;a YouTube video with ~1400 views&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;it&amp;rsquo;s properly sourced, I love it!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.marbu.eu/posts/2023-08-02-btrfs-backup/&#34;&gt;other small blogs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://changelog.com/news/66&#34;&gt;link aggregators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;various forums, including &lt;a href=&#34;https://forums.thinkpads.com/viewtopic.php?p=875876&amp;amp;sid=5e0633b0f018cce81294cfbbac0b46b2#p875876&#34;&gt;the ThinkPad one&lt;/a&gt; and &lt;a href=&#34;https://forum.qubes-os.org/t/convert-x230-into-a-certified-laptop/12341/3&#34;&gt;QubesOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/thinkpad/comments/xv9qp3/comment/ir20gh1/&#34;&gt;Reddit&lt;/a&gt;, even &lt;a href=&#34;https://www.reddit.com/r/AMDLaptops/comments/11indpx/comment/jb08s1v/&#34;&gt;the really obscure stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hackaday.com/2024/06/13/raspberry-pi-saves-printer-from-junk-pile/&#34;&gt;even Hackaday!&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;also got &lt;a href=&#34;https://openprinting.github.io/OpenPrinting-News-June-2024/#raspberry-pi-saves-old-printers&#34;&gt;a mention from the OpenPrinting project leader!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;same post was also featured on &lt;a href=&#34;https://www.xda-developers.com/raspberry-pi-unsupported-printer-on-windows/&#34;&gt;XDA Developers&lt;/a&gt; and &lt;a href=&#34;https://www.hackster.io/news/herman-ounapuu-brings-an-abandoned-printer-back-from-the-brink-with-a-raspberry-pi-90701ccb1ab9&#34;&gt;hackster.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;there was even a case
where &lt;a href=&#34;https://www.golem.de/news/notebook-warum-ich-jetzt-wieder-ein-thinkpad-von-2012-nutze-2209-166195.html&#34;&gt;my post was translated into German and published on golem.de&lt;/a&gt;,
with my written permission.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Seeing my work out there helping people gives me an immense sense of accomplishment
and motivates me to write about the challenges I face. It really does mean a lot
to me. It&amp;rsquo;s not quite on the level of &lt;a href=&#34;https://github.com/geerlingguy&#34;&gt;Jeff Geerling and the work that he has published,&lt;/a&gt;
but perhaps I&amp;rsquo;ll get there one day.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/nfscars.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/nfscars_hu1c6e304e391b548d7e9ae180f61d46ca_106792_800x800_fit_box_3.png&#34;
             width=&#34;772&#34;
             height=&#34;620&#34;
             alt=&#34;People on Reddit finding my archival efforts to be useful. I love to see this!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      People on Reddit finding my archival efforts to be useful. I love to see this!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I also often end up looking up my own posts because of some technical details
that I&amp;rsquo;ve written down, or to share a post in a discussion because of its
relevance. The one
about &lt;a href=&#34;https://ounapuu.ee/posts/2022/09/26/minimum-viable-fan-control-script/&#34;&gt;the minimum viable fan control script&lt;/a&gt;
has been very handy, for example.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-zfs.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-zfs_hu6bbfdebd27b2d7dc1f7f9f9370afc39b_98772_800x800_fit_box_3.png&#34;
             width=&#34;800&#34;
             height=&#34;439&#34;
             alt=&#34;This post has been performing well consistently for years!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      This post has been performing well consistently for years!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Quite often I end up finding solutions in other indie blogs myself. There&amp;rsquo;s something
special and authentic about those, and they often go more in-depth than places like
StackOverflow. Ads and inappropriate sponsorships are also rare on those.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I write because I forget things.&lt;/strong&gt; My blog serves as a public diary of sorts,
and it has been extremely helpful in reminding me about all the fun things I&amp;rsquo;ve
worked on, or experiences I&amp;rsquo;ve had. I sometimes revisit my older posts and
I still find it surprising how much I&amp;rsquo;ve managed to do, or what I&amp;rsquo;ve worked on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I write because I can do what I want.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No &lt;a href=&#34;https://ludic.mataroa.blog/blog/synergy-greg/&#34;&gt;Synergy Greg.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;No managers.&lt;/p&gt;
&lt;p&gt;No meetings.&lt;/p&gt;
&lt;p&gt;No quarterly plannings.&lt;/p&gt;
&lt;p&gt;No unpleasant colleagues.&lt;/p&gt;
&lt;p&gt;No conflicts.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s really nice.&lt;/p&gt;
&lt;h3 id=&#34;rules-of-engagement&#34;&gt;Rules of engagement&lt;/h3&gt;
&lt;p&gt;Whenever I write something, I try to follow a set of principles. These have been
influenced by my own ideological views and content creators that I look up to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Write content that I would like to read myself.&lt;/strong&gt; I love stumbling upon well-written
posts covering topics that the author is passionate about. These posts have a
special energy in them, which is very infectious and motivates me to put more
effort into my own writing.&lt;/p&gt;
&lt;p&gt;If you want to know what I like to read, then check out the list of good posts &lt;a href=&#34;https://ounapuu.ee/misc/good-reads/&#34;&gt;here&lt;/a&gt;,
and anything else that&amp;rsquo;s cool goes &lt;a href=&#34;https://ounapuu.ee/misc/cool-projects/&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;https://ounapuu.ee/misc/cool-links/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Straight to the point.&lt;/strong&gt; I try to avoid unnecessary word salad whenever
possible and try to get my point across in a clear and concise way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Make the content accessible.&lt;/strong&gt; The person reading my blog might be a seasoned
developer, or someone just starting out in IT. It&amp;rsquo;s a balancing act and I&amp;rsquo;m
unlikely to ever get it just right, but I try to remind myself of what I knew
back when I was just starting out and try to address that person in my writing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Listen to the audience.&lt;/strong&gt; If the readers demand to see the cute cats you mentioned
in a post, &lt;a href=&#34;https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/#2023-12-19-update&#34;&gt;then you better deliver.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep performance in mind.&lt;/strong&gt; I do my best to keep the page size down to a reasonable
size. This results in my own bandwidth requirements being lower, allowing me to
serve more traffic over the same connection. It is also helpful to readers who
are on a slower network connection or are running slower
hardware.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://infrequently.org/series/performance-inequality&#34;&gt;The Performance Inequality Gap&lt;/a&gt;
series has inspired me a lot in this area. I&amp;rsquo;m not going to do every
micro-optimization that tools
like &lt;a href=&#34;https://developer.chrome.com/docs/lighthouse/performance/performance-scoring&#34;&gt;Lighthouse&lt;/a&gt;
complain about, but I will do what I consider reasonable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No ads.&lt;/strong&gt; A couple of dollars a month is not worth compromising the privacy
of my readers. Relevant and up-front collaborations with manufacturers in the
style of Level1Techs and Jeff Geerling are still OK in my view.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No shady sponsors.&lt;/strong&gt; Most sponsorship offers that I get involve gambling, and
gambling but with extra steps (crypto-&amp;ldquo;currencies&amp;rdquo;). Anyone working in an area
that exploits human psychology to make obscene amounts of money (at the cost of
ruining actual human lives) should really reconsider their life choices.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No so-called &amp;ldquo;guest posts&amp;rdquo; or backlinks.&lt;/strong&gt; I have received hundreds of these SEO
spam e-mails at this point, and the pattern is the same:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;hey ounapuu.ee, we really love your site about &lt;code&gt;$NOT_WHAT_I_ACTUALLY_WRITE_ABOUT&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;are you ok with linking to &lt;code&gt;$SHADY_SITE&lt;/code&gt; or a guest post? what&amp;rsquo;s your asking price?&lt;/p&gt;
&lt;p&gt;Latifi Hamilton, SEO Spam Corp. Ltd&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I am 100% convinced that SEO optimization in this form is an absolutely
useless &amp;ldquo;job&amp;rdquo; and a net negative to the world. Please stop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No generative AI garbage.&lt;/strong&gt; It conflicts with the reasons why I write a blog
in the first place. I&amp;rsquo;ve tried things like GPT-3 to see what it regurgitates, and
it has been the most unoriginal, fluffy drivel that gets all the important details
wrong.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also seen the same-looking generative AI imagery in lots of blog posts
and presentations, it&amp;rsquo;s really off-putting and shows a lack of care and effort
by the author, even if the rest of the content is solid.&lt;/p&gt;
&lt;h3 id=&#34;getting-started&#34;&gt;Getting started&lt;/h3&gt;
&lt;p&gt;So you&amp;rsquo;ve finally decided to start your own blog. Great!
Here are the steps that I believe make sense to someone just starting up.&lt;/p&gt;
&lt;h4 id=&#34;why-are-_you_-writing&#34;&gt;Why are &lt;em&gt;you&lt;/em&gt; writing?&lt;/h4&gt;
&lt;p&gt;This is the most important step. Don&amp;rsquo;t skip this.&lt;/p&gt;
&lt;p&gt;A lot of techy people (myself included) get carried away with the technical details before writing the first post.
It&amp;rsquo;s understandable, the technology aspect can be very exciting on its own. However, focusing on the
blog setup itself distracts from the core of your blog: the content.&lt;/p&gt;
&lt;p&gt;Start by figuring out the reasons why you want to write in the first place.&lt;/p&gt;
&lt;p&gt;It could be anything:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you have a fun hobby that deserves more coverage&lt;/li&gt;
&lt;li&gt;you find that there are products in your niche that don&amp;rsquo;t have any proper reviews&lt;/li&gt;
&lt;li&gt;you want to share some stories and lessons learned from your professional career&lt;/li&gt;
&lt;li&gt;you want to create content on a platform that you have full control over&lt;/li&gt;
&lt;li&gt;you just want to share your work with the world&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now that you&amp;rsquo;ve got that figured out, I recommend writing up your first draft, even before
you know where you&amp;rsquo;re going to host it. Any plain-text file will be fine for
this purpose, and you&amp;rsquo;ll most definitely rewrite most of it and touch it up
once you know where you&amp;rsquo;re going to host your blog anyway.&lt;/p&gt;
&lt;h4 id=&#34;find-a-place-to-host-your-blog&#34;&gt;Find a place to host your blog&lt;/h4&gt;
&lt;p&gt;You have your goals in place and you have the draft for your first post. Great!&lt;/p&gt;
&lt;p&gt;There are a lot of options out there for hosting your blog, each with their
own strengths and weaknesses. You should pick the option that fits your needs
the best.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Indie blogging platforms&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Examples: &lt;a href=&#34;https://mataroa.blog/&#34;&gt;Mataroa&lt;/a&gt;, &lt;a href=&#34;https://bearblog.dev/&#34;&gt;Bear Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;These come in all sorts of flavours and offer different functionalities for free or a
small nominal fee. Usually run by one or more people as a passion project or side-gig.
Easy to start out with, and the good ones offer easy ways to take your posts with
you if you ever decide to move to another platform.&lt;/p&gt;
&lt;p&gt;If I didn&amp;rsquo;t already host my blog on my own server, then I&amp;rsquo;d probably use one of
these types of services.&lt;/p&gt;
&lt;p&gt;Fun fact: &lt;a href=&#34;https://bearblog.dev/&#34;&gt;Bear Blog&lt;/a&gt; is run by another Herman!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Big blogging platforms&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Examples: &lt;a href=&#34;https://medium.com/&#34;&gt;Medium&lt;/a&gt;, &lt;a href=&#34;https://substack.com/&#34;&gt;Substack&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Quite popular and likely have good tooling for writing content easily, but you
usually have less control over your work and you are at
the whims of the platform. If they ever decide to completely change their
business model and start charging you much higher prices for hosting your work there, then
you better hope that they have an easy way to export your content.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dynamic site generators&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Examples: WordPress, Drupal, Joomla&lt;/p&gt;
&lt;p&gt;You can host these on your own server, or pay someone else to do the hosting
for you. Can be easily customized and should be quite beginner-friendly for
content creation. Pages are created on the fly, so these are often not the most performant option. Can easily fall over under
high traffic if the setup is not optimized and your post gets linked on a popular platform (&amp;ldquo;hug of death&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;If you ever have to pick one of these types of services, then you must make sure
to keep it up to date. WordPress vulnerabilities can be exploited &lt;strong&gt;within hours&lt;/strong&gt; after a vulnerability disclosure.&lt;/p&gt;
&lt;p&gt;The performance and security considerations are the main reason why I avoid these
options.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Static site generators&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Examples: &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt;, &lt;a href=&#34;https://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt; and many, many more&lt;/p&gt;
&lt;p&gt;With static site generators, you build the site once and copy the contents to
your web server. This comes with great performance benefits as serving static
files on a web server is really darn fast. Even the cheapest virtual private
server at any cloud provider can likely handle more than a gigabit of
SSL-encrypted traffic with this option.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Security is also less of an issue. As long as your web server is up to date, then
you don&amp;rsquo;t have much to worry about, just make sure to not accidentally push any sensitive
files and information along with your blog.&lt;/p&gt;
&lt;p&gt;These benefits come with a few trade-offs. The content is written in Markdown and while you can embed
code examples and images, it&amp;rsquo;s not as user-friendly as other platforms. Adding dynamic content and comment sections
is not included by default.&lt;/p&gt;
&lt;p&gt;This is the option I&amp;rsquo;ve chosen. The site is built with Hugo, the web server part
is handled by Fedora Server, Docker
and &lt;a href=&#34;https://docs.linuxserver.io/general/swag/&#34;&gt;this container&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pages.github.com/&#34;&gt;It&amp;rsquo;s also possible to host your static site on GitHub&lt;/a&gt;, if you don&amp;rsquo;t want to
deal with the hassle of having a web server around. The downside of this approach is that
GitHub is quite often down, and their downtime is now your downtime.&lt;/p&gt;
&lt;h4 id=&#34;just-do-it&#34;&gt;Just do it.&lt;/h4&gt;
&lt;p&gt;Go ahead, write that first post! &lt;a href=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/&#34;&gt;Here&amp;rsquo;s mine for reference,&lt;/a&gt; not great, not terrible.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t worry, even I started a blog and abandoned it &lt;a href=&#34;https://web.archive.org/web/20190325122634/https://blog.ounapuu.ee/&#34;&gt;on my first attempt.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sometimes I start writing when I don&amp;rsquo;t feel like it. If there&amp;rsquo;s a 20 minute time window, I can write the skeleton
for a new post, or finalize a work-in-progress one. Once I get past the hurdle of starting, I&amp;rsquo;m in the zone.
Some of my best posts have been written under these conditions.&lt;/p&gt;
&lt;p&gt;Daniel Stenberg had &lt;a href=&#34;https://daniel.haxx.se/blog/2024/02/06/fosdem-2024-you-too-could-have-made-curl/&#34;&gt;a talk at FOSDEM 2024&lt;/a&gt;
that incidentally covered similar time management techniques that help him get work done on &lt;code&gt;curl&lt;/code&gt;, I highly recommend
giving it a listen.&lt;/p&gt;
&lt;h4 id=&#34;build-a-habit&#34;&gt;Build a habit&lt;/h4&gt;
&lt;p&gt;I have a goal to write at least two posts per month and I&amp;rsquo;ve mostly stuck to it, with a few exceptions.
Internal deadlines help me actually get my thoughts and work out there in a somewhat timely manner.&lt;/p&gt;
&lt;p&gt;Having this cadence also helps in situation where I expect a busy schedule, as I can try to finish a few posts in advance.&lt;/p&gt;
&lt;p&gt;A post can take anywhere from 1 to 4 hours in my experience. Some can take a few days, such as &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/&#34;&gt;my FOSDEM 2024 post.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One post per month can be a good goal for a first time writer.&lt;/p&gt;
&lt;h4 id=&#34;tooling&#34;&gt;Tooling&lt;/h4&gt;
&lt;p&gt;You don&amp;rsquo;t need anything special for writing. Use whatever works for you. If it supports spell-check, then that&amp;rsquo;s even better.&lt;/p&gt;
&lt;p&gt;I write my posts in Markdown and the best tool I&amp;rsquo;ve found for that happens to be IntelliJ IDEA.
I already use it for development work and its Markdown support is good. That&amp;rsquo;s it.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve used tools like MarkText &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/13/oops/&#34;&gt;but it went really poorly the last time.&lt;/a&gt;
Other text editors haven&amp;rsquo;t worked for me for various reasons.&lt;/p&gt;
&lt;h4 id=&#34;optional-buy-a-domain-name&#34;&gt;Optional: buy a domain name&lt;/h4&gt;
&lt;p&gt;You may want to get a domain name for your blog. Depending on your setup, it can make transferring your
blog to a different provider or service much easier, simply point your domain to a new IP address!&lt;/p&gt;
&lt;p&gt;This does add a yearly cost that might not be acceptable for everyone.&lt;/p&gt;
&lt;h4 id=&#34;optional-use-a-completely-separate-contact-e-mail&#34;&gt;Optional: use a completely separate contact e-mail&lt;/h4&gt;
&lt;p&gt;If you add a contact e-mail to your blog, then you will get spam, guaranteed.&lt;/p&gt;
&lt;p&gt;I use a completely different e-mail because of this, it helps me easily see where the spammers got my e-mail.
I also find it funny that every time a spammer e-mails me, they&amp;rsquo;re blatantly lying without even trying. You see, my e-mail
is &lt;code&gt;ihavesomethoughtsonyourblog@ounapuu.ee&lt;/code&gt; and it&amp;rsquo;s rarely the case that they actually have thoughts on my blog.&lt;/p&gt;
&lt;p&gt;If you have a domain name and a decent e-mail service provider, then adding additional e-mails should be quite easy.&lt;/p&gt;
&lt;h4 id=&#34;optional-self-host-at-home&#34;&gt;Optional: self-host at home&lt;/h4&gt;
&lt;p&gt;A small blog is a great first-time project for someone that wants to get into self-hosting and building a homelab.&lt;/p&gt;
&lt;p&gt;All you need are ways to open port 80 and 443 for HTTP and HTTPS.&lt;/p&gt;
&lt;p&gt;A residential connection will likely have a dynamic IP address. It might be possible to pay extra to have a static
IP address. It&amp;rsquo;s also possible to sign up with a dynamic DNS provider that handle IP address changes for you.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve gone one step further and written a DNS updater Python script against my domain registrar. If you can read this
text, then it means that the script works!&lt;/p&gt;
&lt;h3 id=&#34;how-i-write&#34;&gt;How I write&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m not going to tell you how to write because I can barely manage to do it myself, and there are smarter people out
there from whom you can learn that.&lt;/p&gt;
&lt;p&gt;What I &lt;em&gt;can&lt;/em&gt; do is to share my writing process in the hopes that there are a few tech tips that you find useful.&lt;/p&gt;
&lt;h4 id=&#34;writing&#34;&gt;Writing&lt;/h4&gt;
&lt;p&gt;I have a list of ideas that I have written down. When I get the opportunity or
inspiration to write, I look at the list and pick something from it.&lt;/p&gt;
&lt;p&gt;Every post starts with a draft title and a bulleted list of points to cover in a post. That list is like a table of
contents for the post, and then I start expanding on them in writing.&lt;/p&gt;
&lt;p&gt;Pictures are usually added after the first draft is done.&lt;/p&gt;
&lt;h4 id=&#34;sharing-my-work&#34;&gt;Sharing my work&lt;/h4&gt;
&lt;p&gt;I believe in &lt;a href=&#34;https://indieweb.org/POSSE&#34;&gt;POSSE&lt;/a&gt;: &lt;em&gt;Publish (on your) Own Site, Syndicate Elsewhere&lt;/em&gt;.
I have full control over my blog and can link to it on all sorts of platforms. Screw &amp;ldquo;big tech&amp;rdquo;!&lt;/p&gt;
&lt;p&gt;Sharing my work has been tricky, however. I can always share it in platforms like LinkedIn,
but links like that get down ranked compared  to &amp;ldquo;native&amp;rdquo; posts on the platform itself.&lt;/p&gt;
&lt;p&gt;Link aggregators, such as Hacker News and Reddit, discourage or forbid sharing your own content. I have done it, but only
with content that I think is relevant to the communities. There&amp;rsquo;s a reason these rules are in place, simply check
&lt;a href=&#34;https://news.ycombinator.com/newest&#34;&gt;the newest posts on Hacker News&lt;/a&gt; to understand why.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t recommend this type of behaviour, but if you have a good understanding of the community and what content they
like to see, then it can be a good way to get some eyes on your content.&lt;/p&gt;
&lt;p&gt;Once you get a following, you don&amp;rsquo;t have to worry much about sharing
your work as your readers will probably do it for you.&lt;/p&gt;
&lt;h4 id=&#34;how-readers-keep-up-with-my-blog&#34;&gt;How readers keep up with my blog&lt;/h4&gt;
&lt;p&gt;I&amp;rsquo;ve seen two ways that readers follow blogs: mailing lists and RSS feeds.&lt;/p&gt;
&lt;p&gt;Readers can follow my blog using &lt;a href=&#34;https://ounapuu.ee/index.xml&#34;&gt;the RSS feed.&lt;/a&gt;
For those that are unfamiliar with RSS, I link to &lt;a href=&#34;https://aboutfeeds.com/&#34;&gt;aboutfeeds.com&lt;/a&gt; at the bottom of my posts.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s harder to track the number of subscribers with an RSS feed, but I believe it&amp;rsquo;s the approach that best preserves
reader privacy.&lt;/p&gt;
&lt;p&gt;Some feed reader services, such as Feedly, Inoreader and Feedbin, have a neat little feature where
they actually send the number of subscribers in the user agent when making a request towards your RSS feed, and that user agent
is visible in your web server logs:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;127.0.0.1 - - [21/Aug/2024:10:40:19 +0300] &amp;quot;GET /index.xml HTTP/1.1&amp;quot; 304 0 &amp;quot;-&amp;quot; &amp;quot;Feedly/1.0 (+http://www.feedly.com/fetcher.html; 72 subscribers; )&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Mailing lists are also quite common for blogs, but I never found a good mailing list provider that costs a reasonable
amount of money, so I never started one. I&amp;rsquo;m also not going to manually maintain one or build a solution myself.&lt;/p&gt;
&lt;h3 id=&#34;analytics&#34;&gt;Analytics&lt;/h3&gt;
&lt;p&gt;My main analytics tool is &lt;code&gt;goaccess&lt;/code&gt;, a handy terminal UI tool that reads &lt;code&gt;nginx&lt;/code&gt; web server logs and outputs basic
statistics. This is just enough information for getting a basic understanding about how well my posts are doing.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;goaccess&lt;/code&gt; can also track incoming requests live, which is very cool to observe when your post has gained traction on
Hacker News.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/goaccess.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/goaccess_hu7e688f9217c0f9c551f0993a0de94dbc_100338_800x800_fit_box_3.png&#34;
             width=&#34;709&#34;
             height=&#34;568&#34;
             alt=&#34;Small glimpse of what goaccess can show.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Small glimpse of what goaccess can show.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I also check in on Google Search Console from time to time. It&amp;rsquo;s been quite handy for understanding how well my posts
are doing in Google Search.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-console.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-console_hue398647cbef0294c5aefc0ce09f155d0_85888_800x800_fit_box_3.png&#34;
             width=&#34;800&#34;
             height=&#34;353&#34;
             alt=&#34;Example of Google Search Console results.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Example of Google Search Console results.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I can also get an understanding how my content is doing elsewhere. I don&amp;rsquo;t have Google Analytics on my page, but I can
still see when my posts have gained traction on Hacker News or elsewhere.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-console-discover.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-console-discover_hu600a865253206135bcd5976c807f6ea7_54131_800x800_fit_box_3.png&#34;
             width=&#34;800&#34;
             height=&#34;353&#34;
             alt=&#34;I guess they track popular HN posts.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I guess they track popular HN posts.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;observations-and-tech-tips&#34;&gt;Observations and tech tips&lt;/h3&gt;
&lt;p&gt;My years of running a blog have resulted in some potentially interesting tidbits and tips that I can share.&lt;/p&gt;
&lt;h4 id=&#34;hacker-news&#34;&gt;Hacker News&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://news.ycombinator.com/news&#34;&gt;Hacker News&lt;/a&gt;
likes &lt;a href=&#34;https://news.ycombinator.com/item?id=38695029&#34;&gt;cats&lt;/a&gt;, &lt;a href=&#34;https://news.ycombinator.com/item?id=37819114&#34;&gt;cool hardware&lt;/a&gt;, &lt;a href=&#34;https://news.ycombinator.com/item?id=37565688&#34;&gt;tech museums&lt;/a&gt;
and &lt;a href=&#34;https://news.ycombinator.com/item?id=39342109&#34;&gt;FOSDEM&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And they sure love &lt;a href=&#34;https://news.ycombinator.com/item?id=29871693&#34;&gt;old ThinkPads&lt;/a&gt;, including
those &lt;a href=&#34;https://news.ycombinator.com/item?id=34542920&#34;&gt;that act like a server.&lt;/a&gt; &lt;a href=&#34;https://news.ycombinator.com/item?id=33187494&#34;&gt;Any old ThinkPad, really.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m happy with it because the discussions that spawn from these topics are great to read and I learn new things almost every time.
Sometimes people post comments without reading the post and that kind of pisses me off, but overall it&amp;rsquo;s a nice
community that has done a decent job moderating itself.&lt;/p&gt;
&lt;p&gt;What I also like about Hacker News is that they also have a second chance pool. If your submission was great but didn&amp;rsquo;t get much
traction initially, then it might end up being given a second chance to get to the front page. Two of my submissions have
gone through this process, it&amp;rsquo;s a really nice feeling to be acknowledged like that.&lt;/p&gt;
&lt;h4 id=&#34;people-like-hardware&#34;&gt;People like hardware&lt;/h4&gt;
&lt;p&gt;I&amp;rsquo;ve noticed that no matter what hardware I talk about, there is someone out there interested in it.&lt;/p&gt;
&lt;p&gt;For example, most clicks coming in from Google are related to products like &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/&#34;&gt;Fairphone 5&lt;/a&gt;
and &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/&#34;&gt;Zimaboard.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-fairphone.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-fairphone_huc8c7fba11c94bd0b7c1f0a7f4f9052f1_228477_800x800_fit_box_3.png&#34;
             width=&#34;747&#34;
             height=&#34;800&#34;
             alt=&#34;Screenshot taken in Firefox Private mode. It&amp;#39;s beating The Verge!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Screenshot taken in Firefox Private mode. It&amp;#39;s beating The Verge!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Niche products, &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/&#34;&gt;such as ExpressCard to NVMe adapters&lt;/a&gt;, are
also bringing
in a solid number of clicks.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-expresscard.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/06/blog/media/google-search-expresscard_hu2a57d4c131e07d74bd5e8a47a859b8a6_223614_800x800_fit_box_3.png&#34;
             width=&#34;766&#34;
             height=&#34;800&#34;
             alt=&#34;Screenshot taken in Firefox Private mode.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Screenshot taken in Firefox Private mode.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I wouldn&amp;rsquo;t want to be a full-time reviewer like how most tech YouTubers operate, but it could be fun to get access
to cool hardware that I could then &lt;del&gt;do incredibly dumb things with&lt;/del&gt; test.&lt;/p&gt;
&lt;h4 id=&#34;feedback&#34;&gt;Feedback&lt;/h4&gt;
&lt;p&gt;You&amp;rsquo;ll probably get feedback.&lt;/p&gt;
&lt;p&gt;Most of it will be good, constructive and informative.&lt;/p&gt;
&lt;p&gt;Some of it will be from people who are complete tools.&lt;/p&gt;
&lt;p&gt;The most important step is to figure out which bucket the feedback falls into.&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t have to address any of the feedback. You don&amp;rsquo;t owe anyone anything. It&amp;rsquo;s your blog.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re brave, you can consider &lt;a href=&#34;https://ludic.mataroa.blog/compliments/&#34;&gt;showcasing uninformed takes on your blog, in the style of Ludicity.&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;follow-your-own-blog&#34;&gt;Follow your own blog&lt;/h4&gt;
&lt;p&gt;I use &lt;a href=&#34;https://miniflux.app/&#34;&gt;Miniflux&lt;/a&gt; as my feed reader because it&amp;rsquo;s simply the best one out there.&lt;/p&gt;
&lt;p&gt;Counterintuitively, I also follow my own blog there as it helps me catch any issues with my RSS feed.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve caught a few issues, such as &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/13/oops/&#34;&gt;my drafts being accidentally published,&lt;/a&gt; or new pages on
my site being present in the RSS feed.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also just a good way to see if the feed is OK.&lt;/p&gt;
&lt;h3 id=&#34;other-blogs-that-i-like&#34;&gt;Other blogs that I like&lt;/h3&gt;
&lt;p&gt;I follow a lot of blogs, but the ones that have had the biggest influence on my own blog are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.jeffgeerling.com/blog&#34;&gt;Jeff Geerling&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;he covers a lot of cool single board computers and actually uses Ansible correctly!&lt;/li&gt;
&lt;li&gt;he also has an accompanying &lt;a href=&#34;https://www.youtube.com/c/JeffGeerling&#34;&gt;YouTube channel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://solar.lowtechmagazine.com/&#34;&gt;Low-tech Magazine&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I love the concept of a solar-powered website and hope to do something similar in the future&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://solar.lowtechmagazine.com/2020/12/how-and-why-i-stopped-buying-new-laptops/&#34;&gt;this post&lt;/a&gt; is what inspired me
to write &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/&#34;&gt;my most successful post to date&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://louwrentius.com/&#34;&gt;Louwrentius&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;lovely little blog that covers all sorts of homelab-ish topics&lt;/li&gt;
&lt;li&gt;this one is also solar-powered!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ludic.mataroa.blog/&#34;&gt;Ludicity&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;the aggressive tone is refreshing and gives me courage to say what I actually think&lt;/li&gt;
&lt;li&gt;the blogging platform itself is also very opinionated and minimal, which I love to see!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;discovering-new-blogs&#34;&gt;Discovering new blogs&lt;/h3&gt;
&lt;p&gt;Sometimes I am bored. Happens rarely, but when it does, I like to look around to see what other blogs are
out there.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve used the following tools to find new blogs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cloudhiker.net/explore&#34;&gt;Cloudhiker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://indieblog.page/&#34;&gt;indieblog.page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kagi.com/smallweb/&#34;&gt;Kagi Small Web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blogs.hn/&#34;&gt;blogs.hn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It requires intent and time to go through these, but that&amp;rsquo;s also part of the fun. Similar to a dedicated music discovery
and active listening session, if you think about it.&lt;/p&gt;
&lt;h3 id=&#34;closing-thoughts&#34;&gt;Closing thoughts&lt;/h3&gt;
&lt;p&gt;I find writing to be incredibly fulfilling, and I hope that at least some of you end up writing about the topics that
you are passionate about.&lt;/p&gt;
&lt;p&gt;If you feel that there&amp;rsquo;s a topic that I didn&amp;rsquo;t cover, or you have additional questions related to writing a blog, then
don&amp;rsquo;t be afraid to reach out to me!&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;the cheapest ARM-based VM at Hetzner Cloud could easily serve 1.6 Gbit/s of HTTPS traffic, benchmarked using &lt;code&gt;wrk&lt;/code&gt; against my own blog.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>How to copy media off of an iPhone the hard way (using Linux)</title>
      <link>https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/</link>
      <pubDate>Mon, 02 Sep 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;I helped a family member upgrade to a newer iPhone and make some room so that the internal storage does not run out.&lt;/p&gt;
&lt;p&gt;They had &lt;a href=&#34;https://nextcloud.com/&#34;&gt;Nextcloud&lt;/a&gt; installed on the current phone, but due to limitations of the Nextcloud iOS
app, the backups only take place if the app itself is open, meaning that we had hundreds of photos and videos that were
not yet backed up.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The network was slow and I was in a time crunch, so I opted to copy the media off of the phone by connecting the iPhone
to my laptop over
a Lightning cable. After entering the PIN on the phone again and approving the connection, I could see the iPhone
in my file manager, but opening it would show nothing at all. This was very unusual as other iPhones I used in the past
just worked on my laptop.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/happypath.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/happypath_hu5d1bb8a2eff3e63a9d0a26e3cb4c8ad9_43529_800x800_fit_box_3.png&#34;
             width=&#34;482&#34;
             height=&#34;378&#34;
             alt=&#34;This is what you&amp;#39;d expect to see when connecting an iPhone to a PC.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      This is what you&amp;#39;d expect to see when connecting an iPhone to a PC.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Rebooting the phone and connecting it again did nothing. Different known good Lightning cables did not improve things,
either.
Even a separate Windows 10 machine could not see any images, so it wasn&amp;rsquo;t a Linux thing.&lt;/p&gt;
&lt;p&gt;Various Apple-related posts online were devoid of useful advice.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I was not ready to give up just yet and I finally stumbled
upon &lt;a href=&#34;https://askubuntu.com/a/1159559&#34;&gt;this Ask Ubuntu answer&lt;/a&gt;.
This had potential, so I gave it a go, and I&amp;rsquo;m happy to report that it worked on my Fedora Linux machine!&lt;/p&gt;
&lt;p&gt;These are the steps that I took. The commands need to be run in a terminal window.&lt;/p&gt;
&lt;p&gt;Tested with Fedora Linux 40.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;install the necessary packages
&lt;ul&gt;
&lt;li&gt;on Fedora, run &lt;code&gt;sudo dnf install -y ifuse libimobiledevice libimobiledevice-utils&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;connect your iPhone to your PC
&lt;ul&gt;
&lt;li&gt;if your phone is not yet paired, then run &lt;code&gt;idevicepair pair&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;if it&amp;rsquo;s already paired, verify the connection by running &lt;code&gt;idevicepair validate&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;mount your phone to an empty folder of your choice
&lt;ul&gt;
&lt;li&gt;if an empty folder does not exist, run &lt;code&gt;mkdir ~/my-iphone&lt;/code&gt; (use any folder name that you want)&lt;/li&gt;
&lt;li&gt;to mount the phone, run &lt;code&gt;ifuse ~/my-iphone&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;you can now browse your media via your file manager or terminal by navigating to &lt;code&gt;~/my-iphone&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;photos and videos taken by the camera will be in the &lt;code&gt;DCIM&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;other folders, such as &lt;code&gt;Photos&lt;/code&gt; and &lt;code&gt;Downloads&lt;/code&gt; may also interest you&lt;/li&gt;
&lt;li&gt;to make a full copy of your phone to a folder named &lt;code&gt;iphone-backup&lt;/code&gt;, run &lt;code&gt;cp -r ~/my-iphone ~/iphone-backup&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;alternative way to create a full backup: &lt;code&gt;rsync -aAXv ~/my-iphone ~/iphone-backup&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;once you&amp;rsquo;re done, unmount the iPhone by running &lt;code&gt;umount ~/my-iphone&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;it is now safe to disconnect your iPhone from the PC&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/iphone-contents.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/iphone-contents_huaacea151b94f28019acec89dbd3ad9b9_29307_800x800_fit_box_3.png&#34;
             width=&#34;556&#34;
             height=&#34;515&#34;
             alt=&#34;The directory listing of an iPhone.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The directory listing of an iPhone.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/iphone-photos.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/iphone-photos_hue8b49f5e2aab1f33769a4421f24772fe_32364_800x800_fit_box_3.png&#34;
             width=&#34;556&#34;
             height=&#34;515&#34;
             alt=&#34;Photos are located under DCIM folder, nested into a bunch of subfolders.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Photos are located under DCIM folder, nested into a bunch of subfolders.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/iphone-transfer.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/iphone-transfer_hu1f0e0917a6f0398d7a8f1352ff64d2b4_46127_800x800_fit_box_3.png&#34;
             width=&#34;593&#34;
             height=&#34;252&#34;
             alt=&#34;Ah yes, USB 2.0 speeds.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Ah yes, USB 2.0 speeds.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;If you have copied everything over and want to make more space on your phone using this method, then you need to delete
files under
the &lt;code&gt;DCIM&lt;/code&gt; folder &lt;em&gt;&lt;strong&gt;and&lt;/strong&gt;&lt;/em&gt; the cached thumbnails under the &lt;code&gt;PhotoData&lt;/code&gt; folder. iOS seems to generate thumbnails for
the photos you take and even if you delete all the actual photos off of the device, then the photo thumbnails will still
show up in the Photos app and elsewhere. This confused the hell out of me after I deleted the backed up photos off the phone the first time.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/iphone-thumbnails.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/09/02/iphone-media-recovery/media/iphone-thumbnails_hu246dc51845d37ee151acd2ff1914374c_67191_800x800_fit_box_3.png&#34;
             width=&#34;800&#34;
             height=&#34;235&#34;
             alt=&#34;Thumbnails are in a separate folder.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Thumbnails are in a separate folder.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Alternatively, you can just delete files from the Photos app on the phone itself to avoid this nuance.&lt;/p&gt;
&lt;p&gt;Linux has its flaws, but at least it provides you with the power and tools needed to get you out of tricky situations.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I can&amp;rsquo;t wait for &lt;a href=&#34;https://immich.app/&#34;&gt;Immich&lt;/a&gt; to get a stable release&amp;hellip;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Apple and Microsoft related forums are &lt;em&gt;the worst&lt;/em&gt; for getting an actual solution to your problem, which is in stark
contrast to FOSS/Linux related discussions.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>How I ended up working as a software developer</title>
      <link>https://ounapuu.ee/posts/2024/08/16/career/</link>
      <pubDate>Fri, 16 Aug 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/08/16/career/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;I&amp;rsquo;ve officially worked as a software developer since August 2016, and by now I
have a fair share of stories to tell from those years. But those are stories for
another time.&lt;/p&gt;
&lt;p&gt;Today I&amp;rsquo;d like to focus on where it all got started.&lt;/p&gt;
&lt;h3 id=&#34;the-early-days&#34;&gt;The early days&lt;/h3&gt;
&lt;p&gt;I never considered myself good with computers, or a nerd, or anything like that
during my childhood. All my computing experiences can be summed up in a pretty
short list, and most of the memories are around computer games.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/petthekitty.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/petthekitty_huf70faaa7ead7be6eb37760dac0b5f328_8079894_1200x800_fit_q75_box.jpg&#34;
             width=&#34;1184&#34;
             height=&#34;800&#34;
             alt=&#34;I was simply too busy petting the kitty.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I was simply too busy petting the kitty.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Starting off, there was that one Windows 95 box with no internet connection at
home. Me and my younger brother defaced the startup screen in Paint because it
was just one of the images on the drive, and there wasn&amp;rsquo;t anything else
interesting
for us to do there.&lt;/p&gt;
&lt;p&gt;Then there was that one laptop the family had temporarily. It ran Windows XP,
which felt really modern because the user interface had actual colors.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; I
remember
being fascinated by one game on
it: &lt;a href=&#34;https://www.myabandonware.com/game/siia-sinna-laebi-linna-s-e32&#34;&gt;Siia sinna läbi linna.&lt;/a&gt;
It was a simple educational game where you had to follow traffic rules as a
pedestrian
and walk around. I had the most fun with it when I tried to illegally cross the
road and barely miss the cars.&lt;/p&gt;
&lt;p&gt;My aunt had a desktop PC that I rarely could play with, but it had some great
games, like The Need for Speed (the very first one!) and a PC port of Sonic the Hedgehog 3.&lt;/p&gt;
&lt;p&gt;Later on there was a Compaq Armada 1592DT. It ran &lt;a href=&#34;https://en.wikipedia.org/wiki/Windows_Me&#34;&gt;Windows Millenium Edition,&lt;/a&gt;
which is commonly regarded as &lt;strong&gt;the worst&lt;/strong&gt; Windows release ever. It was not great, I can tell you
that.&lt;/p&gt;
&lt;p&gt;It was around this time that I also got into gaming more. I played through the
demos
of Need for Speed III Hot Pursuit and Sports Car GT&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;&lt;strong&gt;hundreds&lt;/strong&gt;&lt;/em&gt; of times.
Free demos
was all I got, and not many games even ran on the laptop. The two games in
question
also ran slowly, but I still loved them.&lt;/p&gt;
&lt;p&gt;Then there was a Windows 98 desktop PC that I got around 2004-2005. This time
in my life was characterized by family drama, so it was great to have a place
to escape. My fondest memories include &lt;em&gt;finally&lt;/em&gt; playing the full version of
Need for
Speed III Hot Pursuit, and hours and hours of RuneScape.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; I still remember one
random event occurring in RuneScape where a tree pops up and you have to
interact
with them or try to kill them, however my computer froze at the time and no
amount
of hitting it with my foot helped. Lost my full mithril armor that day. The
computer eventually gave up with what I
assume was a hard drive failure.&lt;/p&gt;
&lt;p&gt;Then we got an actual new computer for the first time in my life. It was 2006
and we got a Fujitsu tower PC with an AMD Athlon 64 X2 4200+ and an Nvidia
GeForce 7300. The GPU was passively
cooled and died soon, and the warranty service put in a Nvidia GeForce 6500
instead.
That ran &lt;em&gt;much&lt;/em&gt; better. This was the era of more unpleasant life events, working
summers
as a newspaper seller&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;, and playing a lot of GTA San Andreas and Need for
Speed World.
I could spend 9 hours playing every day while still keeping my grades up at
school.&lt;/p&gt;
&lt;p&gt;I had the time of my life playing games, and it&amp;rsquo;s probably what saved me from
making stupid, irreversible decisions.&lt;/p&gt;
&lt;h3 id=&#34;school-computers-and-me&#34;&gt;School, computers and me&lt;/h3&gt;
&lt;p&gt;I went to first grade in 2002.&lt;/p&gt;
&lt;p&gt;The first time I could use a computer in a classroom was in &lt;strong&gt;2010.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There was one classroom full of Windows XP boxes, and with something like 256 MB of RAM in them.
The UI was very gray, likely as a result of switching to a &amp;ldquo;classic&amp;rdquo; theme to
save some resources.&lt;/p&gt;
&lt;p&gt;I remember two items from the curriculum:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;creating a Word document&lt;/li&gt;
&lt;li&gt;creating some pixel art in Paint&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We had to remember which computer we used and hide our files somewhere in the
folder structure if we didn&amp;rsquo;t want to lose it between classes. USB sticks
were very expensive and not that popular as well.&lt;/p&gt;
&lt;p&gt;Our teacher was what you&amp;rsquo;d think of when you thought of the most stereotypical
sysadmin: probably good at their day job, but maybe not the best teacher. At least
they did show us the insides of a PC, and I remember how they were raving about
their IBM ThinkPad T20-series laptop and how the new ones were trash. I guess some
things never change.&lt;/p&gt;
&lt;p&gt;There was also a short robotics course where we could do things with LEGO
Mindstorms robots, but we never quite understood what we were doing.&lt;/p&gt;
&lt;p&gt;Not all schools in Estonia are made equal, and I experienced it first-hand. My
next school was a completely different experience, as they had &lt;em&gt;two&lt;/em&gt; computer classes, and
the machines they were replacing were still years ahead of what we had at the
previous school.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m very happy to see that we have companies like &lt;a href=&#34;https://greendice.com/projects/&#34;&gt;GreenDice&lt;/a&gt;
who are motivated by similar experiences and want to make sure that everyone
has access to computers. Most media consumption happens on phones, but the real
work still gets done on PC-s.&lt;/p&gt;
&lt;h3 id=&#34;the-part-where-i-started-programming&#34;&gt;The part where I started programming&lt;/h3&gt;
&lt;p&gt;When I went to 10th grade, I did so at a new school. It is considered one of the &amp;ldquo;elite&amp;rdquo; ones in Estonia,
and I got there by pure accident.&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Ah, 2011. The iPhone was new, smartphones were evolving fast and I definitely
did not know how to talk to girls.&lt;/p&gt;
&lt;p&gt;Around 2012, our class teacher sent out a notice saying that Tartu University
was offering a free extracurricular course named &lt;em&gt;&amp;ldquo;Teeme ise arvutimänge&amp;rdquo;&lt;/em&gt;
(roughly translates to &amp;ldquo;Let&amp;rsquo;s build computer games&amp;rdquo;).
It was fully online with no scheduled mandatory hours and I liked games, so I
signed up.&lt;/p&gt;
&lt;p&gt;The course was about 7 weeks long. Every week you&amp;rsquo;d focus on one area, starting
with the basics of Python 3, building up your knowledge with more complex
parts of the language and creating a text-based game. At the end of the course
you had the choice of building a text-based game or a 2D game
with &lt;a href=&#34;https://www.pygame.org/&#34;&gt;Pygame.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I had discovered retro gaming around this time, so I went ahead and
recreated the final boss level of Sonic the Hedgehog 3. I &amp;ldquo;borrowed&amp;rdquo; sprites and
the official soundtrack from various places online, and at the end I had
something
that didn&amp;rsquo;t run very well, but it &lt;em&gt;ran&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;And it still runs on my Fedora Linux 40 laptop!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/game-level1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/game-level1_hu0c1abcf380d36434248d861ee14dd6ea_159822_1200x800_fit_box_3.png&#34;
             width=&#34;1026&#34;
             height=&#34;800&#34;
             alt=&#34;I got a bit excited replaying this.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I got a bit excited replaying this.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/game-title.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/game-title_hu941107c0f5725f40755dd68df515bb4c_1559113_1200x800_fit_box_3.png&#34;
             width=&#34;1026&#34;
             height=&#34;800&#34;
             alt=&#34;&amp;#34;original content do not steal&amp;#34;&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      &amp;#34;original content do not steal&amp;#34;
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;After the final project was completed, everyone who participated shared their
games with the group. I liked seeing a few games there where it was obvious
that the author had put actual effort in and loved working on it.&lt;/p&gt;
&lt;p&gt;I passed, in spite of the obscene number of copyright violations that I had committed.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/whatthehellisgit.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/whatthehellisgit_huab37e271fdd668630109eb8af78b60c3_22091_1200x800_fit_box_3.png&#34;
             width=&#34;378&#34;
             height=&#34;223&#34;
             alt=&#34;It&amp;#39;s clear that git was not part of the course.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      It&amp;#39;s clear that git was not part of the course.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Before I went to university, I also attended a one-off extracurricular
programming
class offered by the school. During that time, I showed my game to a classmate
there
and they were absolutely horrified at the code. For good reason. Whatever I did
there, it was horribly inefficient. At least my modern CPU can now chomp
through all that inefficiency.&lt;/p&gt;
&lt;p&gt;With that feedback in mind, I rewrote the game from scratch, made fewer stupid
mistakes
and added new features as well. It was still around the same concept of the
Sonic the Hedgehog 3 final boss level, but the obstacles and enemies were more
varied
and the game ran at 60 FPS even on an old laptop.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s funny is that the &lt;em&gt;new&lt;/em&gt; version of the game doesn&amp;rsquo;t run. I had to
manually
set the resolution of the game, and even after that the game crashes randomly
after 5-10 seconds.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-crash.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-crash_hu0ca3e77edfcbaa9917c3c6bc0a38a293_259014_1200x800_fit_box_3.png&#34;
             width=&#34;1200&#34;
             height=&#34;750&#34;
             alt=&#34;Definitely not future-proof.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Definitely not future-proof.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;But hey, it looks so much better!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-title.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-title_hu5b6d2d66dd6e806d8b1b616c2d63f923_117798_1200x800_fit_box_3.png&#34;
             width=&#34;1200&#34;
             height=&#34;750&#34;
             alt=&#34;I even commissioned a drawing for the title screen. Big budget stuff!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I even commissioned a drawing for the title screen. Big budget stuff!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-levelselect.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-levelselect_hu952f0986f86c556038d329886d5ec94d_122297_1200x800_fit_box_3.png&#34;
             width=&#34;1200&#34;
             height=&#34;750&#34;
             alt=&#34;Ain&amp;#39;t nobody got time for replaying the whole game to debug the final boss!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Ain&amp;#39;t nobody got time for replaying the whole game to debug the final boss!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-level1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-level1_hud1d2654165297999d060cb0468c1c681_181245_1200x800_fit_box_3.png&#34;
             width=&#34;1200&#34;
             height=&#34;750&#34;
             alt=&#34;The sprites are animated now!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The sprites are animated now!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-boss1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-boss1_hu91a930626081b36f89a883ff1aa82e81_129581_1200x800_fit_box_3.png&#34;
             width=&#34;1200&#34;
             height=&#34;750&#34;
             alt=&#34;Variety in bosses!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Variety in bosses!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-boss2.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-boss2_hu336ded8020538d07644916e1e5779f9b_130051_1200x800_fit_box_3.png&#34;
             width=&#34;1200&#34;
             height=&#34;750&#34;
             alt=&#34;A bit harder to hit now.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      A bit harder to hit now.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-finalboss.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/16/career/media/newgame-finalboss_huc5cfb9156302c4d944269389411b10d1_130520_1200x800_fit_box_3.png&#34;
             width=&#34;1200&#34;
             height=&#34;750&#34;
             alt=&#34;The orange ones follow a sine wave pattern. Very advanced AI!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The orange ones follow a sine wave pattern. Very advanced AI!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This Pygame adventure also spawned the only two StackOverflow questions that I
have ever
asked: &lt;a href=&#34;https://stackoverflow.com/questions/23571956/pygame-way-to-create-more-userevent-type-events&#34;&gt;the one where I ran into limitations of the library,&lt;/a&gt;
and another
one &lt;a href=&#34;https://stackoverflow.com/questions/22287975/background-in-pygame-causes-graphical-issues&#34;&gt;where I couldn&amp;rsquo;t understand why my background was funny.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I also ended up attending an event&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt; where I could show my game to others, and
&lt;a href=&#34;https://level1.ee/2014/06/eesti-indie-mangud-mangutisel-doomsday-zone/&#34;&gt;the article about it is still up!&lt;/a&gt;
You might need to use your favourite translation service to understand it
though.&lt;/p&gt;
&lt;p&gt;This one course is the sole reason I chose computer science in university and
ended up as a software developer. This sequence of events is purely accidental,
and yet it sparked this fire in me that thrives on building new things and
troubleshooting issues. I &lt;em&gt;&lt;strong&gt;loved&lt;/strong&gt;&lt;/em&gt; the immediate visual feedback that I got
when
building the game and had a lot of fun trying to figure out how to make the
computer do what I want.&lt;/p&gt;
&lt;p&gt;A lot of what made me love programming was also what I enjoyed during my first
actual job as a software developer. I started out as a front-end developer,
working with Angular 2 right when it got the first official stable release.
It wasn&amp;rsquo;t easy to start with something like that as a junior developer, but
I loved the immediate visual feedback and learning how to use the browser
tooling to troubleshoot issues.&lt;/p&gt;
&lt;p&gt;For a few years I also considered pursuing a career in game development. I love
playing games, I love programming, so it would have made perfect sense, right?&lt;/p&gt;
&lt;p&gt;Unfortunately the only things I kept hearing about game development were
negative ones, involving
poor working conditions, &amp;ldquo;crunch time&amp;rdquo;, and how most game developers end up
with mental illnesses and severe burnout, all because some people in suits
want to make even more money.&lt;/p&gt;
&lt;h3 id=&#34;things-i-wish-i-knew&#34;&gt;Things I wish I knew&lt;/h3&gt;
&lt;p&gt;The lead-up to my first actual job as a software developer included a lot of unknowns, anxiety and comparisons to more
successful students, which is why I&amp;rsquo;d like to share some tech tips for those just starting out in this field or IT in
general.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It&amp;rsquo;s OK to try out this role and end up deciding that it&amp;rsquo;s not for you.&lt;/strong&gt; I
know quite a few
people that started out as software developers, but ended up transitioning into
a different role that suited their interests better, such as team lead, product
manager or data engineering. Even I had a two-year gig as a team lead! Change
can be scary, but it might end up being the right thing to do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t feel pressured to do &lt;em&gt;anything.&lt;/em&gt;&lt;/strong&gt; Some YouTuber just posted a video
that you &lt;em&gt;have&lt;/em&gt; to learn this new framework or programming language or you will never get
a job? Someone on Twitter keeps insisting that the blockchain is the future and everything
else is now obsolete? That is pure grade-A clickbaity bullcrap that plays on the fear of
missing out. Don&amp;rsquo;t fall for it.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s also a subset of developers who have an expectation that you also write
code in your free time and regularly contribute to open source projects. Unless
you
want to work at Google, Meta or any of the other &amp;ldquo;big tech&amp;rdquo; companies, then
you really don&amp;rsquo;t need to cave in to this unreasonable pressure. You&amp;rsquo;ll be fine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do things because you &lt;em&gt;love&lt;/em&gt; to do them.&lt;/strong&gt;  I have the opportunity to do
software development stuff 32 hours a week&lt;sup id=&#34;fnref:7&#34;&gt;&lt;a href=&#34;#fn:7&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;7&lt;/a&gt;&lt;/sup&gt;, why would I want to do even &lt;em&gt;more&lt;/em&gt; of it?
In my free time I want to do dumb experiments with my hardware and try out new ideas in my homelab. I also like writing a lot, so that&amp;rsquo;s what I end up doing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Take care of yourself&lt;/strong&gt;, and learn about the symptoms of burnout. It&amp;rsquo;s OK to
take a rest if you need it. I wish someone told me this while I was in
university,
would have prevented quite a few chronic health issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Programming skills don&amp;rsquo;t matter as much as think they do.&lt;/strong&gt; They still
matter, don&amp;rsquo;t get me wrong, but it&amp;rsquo;s a relatively small part of the job. The
ability to work well with others and a problem-solving mindset will take you
very far, and you&amp;rsquo;ll figure out the technical details along the way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t do it for the money.&lt;/strong&gt; The money won&amp;rsquo;t cover the therapy that you&amp;rsquo;re
going
to need to get over the soul-crushing agony that you experience every day if you
secretly hate software development and everything around it. There&amp;rsquo;s a lot to dislike
in the industry even if you like this role, so I can&amp;rsquo;t imagine how bad it might
be as someone who isn&amp;rsquo;t able to enjoy the good parts of it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ounapuu.ee/misc/good-reads/&#34;&gt;I also have a list of good articles&lt;/a&gt; that will &lt;em&gt;hopefully&lt;/em&gt;
give you a better idea about the industry, the role and the expectations to a
software developer.&lt;/p&gt;
&lt;p&gt;Everyone has their own path to becoming a software developer, and this one
is mine. Yours will probably be different, and that is perfectly fine.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;if you only knew grayscale interfaces all your life, then you&amp;rsquo;d be excited
about a change like that as well.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Sports Car GT launcher also went from reporting 1 MB of VRAM, to -1 MB, to
-1535 MB. For some reason it&amp;rsquo;s a core memory of mine. I don&amp;rsquo;t know why, either.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;it&amp;rsquo;s called Old-School RuneScape now. I&amp;rsquo;m not old, you&amp;rsquo;re old!&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;and I was damn good at it, too.&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;it&amp;rsquo;s not a weird flex, I just never planned on switching schools, but the
grades were good and the toilets in the new school weren&amp;rsquo;t thick with smoke, so I
switched.&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:6&#34;&gt;
&lt;p&gt;it&amp;rsquo;s been 10 years. That&amp;rsquo;s a long-ass time.&amp;#160;&lt;a href=&#34;#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:7&#34;&gt;
&lt;p&gt;if you haven&amp;rsquo;t tried a proper 4-day work week, and you have the means
to do it even with an effective 20% pay cut, then try it, it will be
life-changing.&amp;#160;&lt;a href=&#34;#fnref:7&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Running my ThinkPad T430 with an eGPU in 2024</title>
      <link>https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/</link>
      <pubDate>Wed, 07 Aug 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;I probably shouldn&amp;rsquo;t have written down &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/&#34;&gt;my notes on the eGPU setup I had years ago.&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’d be lying if I wasn’t considering remaking this setup with everything I’ve learned 6 years later.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Oops.&lt;/p&gt;
&lt;p&gt;I got access to an allegedly-faulty AMD Radeon RX 480 and an NVIDIA GTX 1650 for free thanks to my friend, so I ordered
the EXP GDC Beast v8.5c, two sorts of 6/8pin power cables, and a 12V 12A DC power supply.&lt;/p&gt;
&lt;p&gt;The idea was to take a ThinkPad T430, bolt a GPU to it, and use it as a stationary workstation until the laptop
dies or gets too slow for modern tasks. The resale value of the T430 is too low for me to justify selling it, and if there&amp;rsquo;s anyone
out there who can run a T430 into the ground 5+ years from now, then it&amp;rsquo;s probably going to be me.&lt;/p&gt;
&lt;p&gt;Quick specs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU: Intel i7-3820QM&lt;/li&gt;
&lt;li&gt;RAM: 16GB DDR3&lt;/li&gt;
&lt;li&gt;Storage: 4TB Samsung 870 QVO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Side-note: I also went ahead and replaced the thermal paste with a bootleg Honeywell PTM7950 phase-changing
thermal pad. It works just as well as fresh thermal paste, but hopefully it won&amp;rsquo;t drip out if the laptop is running
up-right, in a vertical laptop stand.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-adapter-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-adapter-1_huca007be77dc39e9f6eda48f8c3afa8da_3569805_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;Side-view of the EXP GDC Beast adapter.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Side-view of the EXP GDC Beast adapter.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-adapter-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-adapter-2_hu54b018421a0b033a795b64c264e9294e_3155559_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;Top-down view.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Top-down view.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-adapter-3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-adapter-3_hu2bdb586cbc463bc374394725cd0ff34e_4522400_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;Backside of the adapter, with the AMD RX 480 attached.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Backside of the adapter, with the AMD RX 480 attached.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-closeup.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-closeup_hu728be903b5709a1c781e4130848e2327_4537105_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;The extra power cable was barely long enough to fit.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The extra power cable was barely long enough to fit.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;testing&#34;&gt;Testing&lt;/h3&gt;
&lt;p&gt;My testing with the GTX 1650 was brief, as the open source &lt;code&gt;nouveau&lt;/code&gt; driver crashed on the Wayland desktop&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, the proprietary
drivers under Fedora did not seem to work, and under Windows
the NVIDIA driver intentionally triggers the &lt;code&gt;error code 43&lt;/code&gt; issue. &lt;a href=&#34;https://egpu.io/forums/expresscard-mpcie-m-2-adapters/script-nvidia-error43-fixer/&#34;&gt;A tweak exists for the Windows issue,&lt;/a&gt; but
that didn&amp;rsquo;t help much either.&lt;/p&gt;
&lt;p&gt;The AMD Radeon RX 480 seems to work well out of the box on Windows 11, plug-and-play. However, it wasn&amp;rsquo;t that stable,
but that could be related to the possibly faulty GPU itself or the power supply that can barely drive it under load.
Or the fact that Windows itself was running off of a 128GB Samsung USB 3.0 flash drive. Probably the latter, given that the
USB stick died as a result of this experiment.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-win11.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-win11_hud39125e6b1621f399829065b97ad2bb7_3539828_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;Microsoft does not approve of this setup for at least 3 reasons.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Microsoft does not approve of this setup for at least 3 reasons.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;On Fedora Linux 40, I discovered that eGPU-s aren&amp;rsquo;t really plug and play. Sure, the image is there, but on my
ultrawide monitor I saw a whopping 11 frames per second! Turns out that by default GNOME on Wayland doesn&amp;rsquo;t like
to use the eGPU as the main rendering device, even on more legitimate Thunderbolt-based eGPU setups.
It&amp;rsquo;s a common enough problem that there exist &lt;a href=&#34;https://github.com/hertg/egpu-switcher&#34;&gt;multiple&lt;/a&gt; &lt;a href=&#34;https://github.com/ewagner12/all-ways-egpu&#34;&gt;solutions&lt;/a&gt; to this issue.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t like any of them&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;, so I disabled the &lt;code&gt;i915&lt;/code&gt; kernel driver responsible for driving the iGPU, which did the trick.
The 3440x1440p ultrawide monitor was being rendered by the eGPU and for the most part the experience was very smooth.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-linux.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-linux_hu4614f6e617dc99fec02a46040603e51f_3593023_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;It&amp;#39;s booting Linux!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      It&amp;#39;s booting Linux!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The iGPU in the T430 can also run the ultrawide monitor at 60 Hz via the DisplayPort port on the dock, but it can&amp;rsquo;t
run things at 60 FPS at all times because it&amp;rsquo;s really, really weak.&lt;/p&gt;
&lt;p&gt;The eGPU ran things much smoother, which made the whole setup feel more responsive
and great to use. It&amp;rsquo;s not the fastest setup in the world, but the GUI running smoothly certainly makes it feel like one.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t have a ton of games installed for testing, but I did give Minecraft a try, and it ran just fine. The CPU was
struggling when building new parts of the map, but the visuals were doing fine and I could see myself playing on this
setup for hours.&lt;/p&gt;
&lt;p&gt;There were some things that weren&amp;rsquo;t running smoothly even with the eGPU. For example, 1080p H.265 video playback was awfully
choppy. Using &lt;code&gt;radeontop&lt;/code&gt; revealed around 80% GPU usage, so either the decoding engine is crap on this GPU, or the very limited
PCIe bandwidth and CPU-GPU data transferring is the culprit.&lt;/p&gt;
&lt;p&gt;I also tested LibreELEC to see how it handles the eGPU and I&amp;rsquo;m happy to report that it renders Kodi on it by default,
with the UI running very smoothly.&lt;/p&gt;
&lt;p&gt;On Linux I also saw some stability issues and crashes, but those could also be down to the faulty GPU or the PSU
being underpowered. I can probably rule out the latter by limiting the GPU clock speeds, and &lt;a href=&#34;https://wiki.archlinux.org/title/AMDGPU#Manually&#34;&gt;the Arch wiki&lt;/a&gt;
has some great instructions for that. Those toggles do work, but I noticed that GNOME can be a bit choppier when the GPU
switches between lower power states to higher ones.&lt;/p&gt;
&lt;p&gt;The physical stability of this setup is questionable, especially if you use a bigger GPU. Most prefabricated cases
for this eGPU adapter assume that you&amp;rsquo;re running it with an ATX/SFX PSU, so those are out of the question for me.
There exist some 3D printable designs out there, but they can sometimes be very specific to a particular setup or GPU,
so I&amp;rsquo;d have to design my own.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-setup-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-setup-2_hu37f449b8c595fe98795430ae4130277f_3527335_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;Work in progress.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Work in progress.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-setup-3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-setup-3_hu22470718d5aa2158ec153ca7e3699efb_3230728_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;I really like the look of the GPU, no need to worry about a case. Unless you have cats, which I do have. Uh-oh.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I really like the look of the GPU, no need to worry about a case. Unless you have cats, which I do have. Uh-oh.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-setup-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-setup-1_hu810e68e18c2d90763f52ed33100a226c_2940145_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;The final setup.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The final setup.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The power consumption of this setup isn&amp;rsquo;t great, unfortunately. Using a smart plug I measured the idle power of the
eGPU component to be about 20W. Typical desktop usage and video playback results in around 50W and peaks around 120-130W,
which is right on the limit of the shoddy PSU I&amp;rsquo;m using.&lt;/p&gt;
&lt;p&gt;If I had the choice to pick any GPU for this setup, then I&amp;rsquo;d likely opt for a modern AMD GPU that didn&amp;rsquo;t require additional
power via the 6/8 pin power connector as that option would likely be a lot more efficient while yielding similar performance.&lt;/p&gt;
&lt;p&gt;I ended up disassembling the setup in the end, partly because I
misdiagnosed &lt;a href=&#34;https://gitlab.freedesktop.org/mesa/mesa/-/issues/11566&#34;&gt;a Mesa bug&lt;/a&gt; to be a GPU issue,
and because the RX 480 really was acting weird from time to time, even with LibreELEC.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-error.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/08/07/thinkpad-t430-egpu/media/egpu-error_hude98597ec154bc4f0252a3de22d4b943_3478039_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;That can&amp;#39;t be good.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      That can&amp;#39;t be good.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Not all experiments end up being successful.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I think that these types of eGPU adapters are great even in 2024, but only for a small number of very specific use cases,
and with GPU-s that actually work.&lt;/p&gt;
&lt;p&gt;If you already have an older laptop around, and a compatible spare GPU collecting dust, then this setup will make sense for
desktop or media playback machines, and perhaps gaming if your demands are not very high.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t suggest building this setup from scratch, it&amp;rsquo;s probably not worth the money and hassle. Used gaming PC-s
that have similar specifications to this eGPU build, but with no funny PCIe bandwidth limitations, go for less than
200 EUR at this point.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;code&gt;nouveau&lt;/code&gt;? More like &lt;code&gt;novideo&lt;/code&gt;, am I right?&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;not that they&amp;rsquo;re bad, they are just made for a different type of setup.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>No HDMI port on the ThinkPad T430? No problem!</title>
      <link>https://ounapuu.ee/posts/2024/07/08/thinkpad-t430-hdmi/</link>
      <pubDate>Mon, 08 Jul 2024 13:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/07/08/thinkpad-t430-hdmi/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/07/08/thinkpad-t430-hdmi/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;The ThinkPad T430 has a few options for running it with an external display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VGA port, which is pretty much obsolete at this point&lt;/li&gt;
&lt;li&gt;mini DisplayPort connector on the laptop itself&lt;/li&gt;
&lt;li&gt;DVI or DisplayPort on a dock&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The mini DisplayPort port has annoyed me for as long as I&amp;rsquo;ve had this machine.&lt;/p&gt;
&lt;p&gt;Most places where I&amp;rsquo;ve had to present something only offer an HDMI cable,
which means that I always have to carry a dongle around, and I keep forgetting
to bring one everywhere I happen to go.&lt;/p&gt;
&lt;p&gt;Until now.&lt;/p&gt;
&lt;p&gt;I have a few of these SATA HDD adapters that replace the optical drive on
the ThinkPad T430, and I discovered that my mini DisplayPort to HDMI adapter
can fit in one without a problem.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/08/thinkpad-t430-hdmi/media/adapter-out.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/07/08/thinkpad-t430-hdmi/media/adapter-out_hu9bacd13bfd6ab4f0eb439904d8fd66fa_4140798_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;It&amp;#39;s a snug fit so it doesn&amp;#39;t fall out.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      It&amp;#39;s a snug fit so it doesn&amp;#39;t fall out.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/08/thinkpad-t430-hdmi/media/adapter-closed.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/07/08/thinkpad-t430-hdmi/media/adapter-closed_hu4541a0abf8b34307cb0aeb05e38337a9_2653611_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;You&amp;#39;d never know the adapter was in here.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      You&amp;#39;d never know the adapter was in here.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I don&amp;rsquo;t currently have a need for a second SSD in my T430, so this &amp;ldquo;mod&amp;rdquo;
makes perfect sense to me.&lt;/p&gt;
&lt;p&gt;I bet there is someone out there who is capable of routing an &lt;em&gt;actual&lt;/em&gt; HDMI
port in place of this adapter. The existence of FHD mods for this laptop
suggests that this is possible. If you&amp;rsquo;re &lt;em&gt;that&lt;/em&gt; person and created that mod,
let me know.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>About the time my ThinkPad T430 ran with an external GPU</title>
      <link>https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/</link>
      <pubDate>Wed, 03 Jul 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;The ThinkPad T430 is not a remarkable laptop. It&amp;rsquo;s thick, bulky and built like
a tank. I got mine in 2016 when the first university scholarship money dropped,
and it&amp;rsquo;s still my backup laptop of choice.&lt;/p&gt;
&lt;p&gt;Around 2017 I did something every reasonable poor computer science student
would do: I got an eGPU adapter for it to play some games. I never ended up
playing many games, but I loved tinkering with and testing this setup a lot.&lt;/p&gt;
&lt;p&gt;These are my notes on the setup that I used to have. The notes used to be on
Reddit, but after yet another user-hostile change&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; I deleted my account
and all the content associated with it.&lt;/p&gt;
&lt;h3 id=&#34;the-specs&#34;&gt;The specs&lt;/h3&gt;
&lt;p&gt;The ThinkPad T430 that I used had a CPU swap at one point, running an Intel
i7-3820QM. This upgrade doubled the CPU performance on the laptop compared
to the dual-core CPU that was in it before. This change was critical because
it opened the door to running lots of modern games at reasonable performance.&lt;/p&gt;
&lt;p&gt;The eGPU adapter I ran with was the EXP GDC Beast v8.4, using the ExpressCard34
connector. This adapter turned the ExpressCard34 slot into a PCIe 2.0 x1 slot.
It&amp;rsquo;s not really hotpluggable, but using this connector instead of something
like the internal Wi-Fi adapter slot made this setup much more portable. Done
gaming? Shut down, disconnect the ExpressCard cable and you&amp;rsquo;re good to go!&lt;/p&gt;
&lt;p&gt;This adapter is also a good example of connector reuse. The other end of the
ExpressCard plug is an HDMI port. Video signals require good quality cables, and
so does PCI Express.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-connector.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-connector_hu57d20024d6eedf4f8fd310ae2d8a6c1b_496554_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;Close-up of the ExpressCard34 connector.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Close-up of the ExpressCard34 connector.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The eGPU was once powered by a simple ATX PSU with the jumper wire set on the
24-pin connector, but eventually I bought a Dell DA-2 power supply. The adapter
has a power connector designed specifically for that pinout and it made the setup
a lot cleaner.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-atx.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-atx_huc5761fb6925c648f3a2825a4ee5151d1_3200508_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;The setup with an ATX PSU.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The setup with an ATX PSU.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-psu.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-psu_hu36215aedae3f36783e04602067b7f995_496411_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;The setup with a Dell DA-2 PSU. Much cleaner, isn&amp;#39;t it?&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The setup with a Dell DA-2 PSU. Much cleaner, isn&amp;#39;t it?
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;At one point I got a fully metal case for the eGPU. It made the setup a lot cleaner
and the risk of the GPU tipping over while turned on was also substantially reduced.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-case.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-case_hua680d3c448e8c285c0f3e3e4085bbc2a_511808_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;The case had no right to be this good for a janky setup.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The case had no right to be this good for a janky setup.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I tested a few GPU-s:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AMD Radeon HD 6870&lt;/li&gt;
&lt;li&gt;nVidia GTX 950&lt;/li&gt;
&lt;li&gt;nVidia GTX 1080&lt;/li&gt;
&lt;li&gt;AMD Radeon RX 480&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The HD 6870 was an old card back in 2017, and it did not run great at all with
this eGPU adapter. It was buggy and the performance sucked.&lt;/p&gt;
&lt;p&gt;Loaner GPU-s, such as the RX 480 and GTX 1080 were much better experiences, as
long as you output the video signal to an external display right from the GPU.&lt;/p&gt;
&lt;p&gt;The nVidia GTX 950 was the card I ran with for the longest time in this setup.
It worked well with this setup and had decent gaming performance.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/gpuz-info.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/gpuz-info_hu0134d5711fed938ad2101fbe071491dd_506894_800x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;GPU-z info while the GPU is idle. Note that the PCIe link speed is set to gen 1.1 under &amp;#34;Bus Interface&amp;#34;.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      GPU-z info while the GPU is idle. Note that the PCIe link speed is set to gen 1.1 under &amp;#34;Bus Interface&amp;#34;.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/gpuz-linkspeed.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/gpuz-linkspeed_hu25c6c6a1ed6cfb2e47c961db57f9c908_484792_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;When the GPU is under load, the PCIe connection switches to PCIe 2.0.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      When the GPU is under load, the PCIe connection switches to PCIe 2.0.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;egpu-tech-tips&#34;&gt;eGPU tech tips&lt;/h3&gt;
&lt;p&gt;You will want to use an eGPU adapter with an external monitor for the best performance.
The PCIe bandwidth is very limited in a setup like this. Using the internal
display of the laptop will mean that the final rendered image will have to be
sent back from the eGPU to the CPU. 1x PCIe 2.0 lane is about 500 MB/s of bandwidth.
Sending 60+ frames in the native resolution (1600x900) will eat it all up.
The higher the resolution on the internal display, the fewer frames you&amp;rsquo;ll get.&lt;/p&gt;
&lt;p&gt;I tested out these two scenarios in CSGO. The internal display yielded about 61 FPS
while an external display would result in 100-180+ FPS.&lt;/p&gt;
&lt;p&gt;The PCIe link bandwidth was not actually that noticeable in a lot of games, such
as GTA V, Rocket League and Dirt 3.&lt;/p&gt;
&lt;p&gt;In some games, such as Dirt Rally (2015), it did not matter what settings
you went with, something about the game made it run poorly no matter what
graphics settings you went with. In cases like that you might as well cap the
framerate to something tolerable like 30 FPS and crank the graphics settings up.&lt;/p&gt;
&lt;h3 id=&#34;vfio-on-a-laptop&#34;&gt;VFIO on a laptop???&lt;/h3&gt;
&lt;p&gt;This setup was also around the time when I first learned about &lt;a href=&#34;https://youtu.be/16dbAUrtMX4&#34;&gt;the magical world
of VFIO and GPU passthrough.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The logical continuation of that discovery was to try it out on my laptop, and
to my surprise it actually worked. I could pass the eGPU to a VM and play GTA V
on it!&lt;/p&gt;
&lt;p&gt;This setup ran on Antergos OS, a flavor of Arch Linux. &lt;a href=&#34;https://en.wikipedia.org/wiki/Antergos&#34;&gt;It&amp;rsquo;s been so long since then that the flavor
of Arch Linux is now discontinued.&lt;/a&gt;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-vfio.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/07/03/thinkpad-t430-egpu/media/egpu-vfio_huf5467b5ff8b9b2ccc65874f32e354453_554194_800x800_fit_q75_box.jpg&#34;
             width=&#34;800&#34;
             height=&#34;600&#34;
             alt=&#34;Antergos OS on the host, Windows 10 on the guest VM running Furmark.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Antergos OS on the host, Windows 10 on the guest VM running Furmark.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The laptop was ideal for this purpose as well. You have the integrated GPU, display,
keyboard and mouse for the host system, and you can pass USB devices and the eGPU
to the VM.&lt;/p&gt;
&lt;p&gt;There were the usual VFIO tricks that I had to try out to avoid the dreaded
&lt;code&gt;error code 43&lt;/code&gt; issue, but after that it was smooth sailing.&lt;/p&gt;
&lt;p&gt;The performance was very similar to what I saw on the host system.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;media/egpu.webm&#34;&gt;Here&amp;rsquo;s a clip of me recording this setup while playing GTA V.&lt;/a&gt; Smartphone cameras have
come a long way since then.&lt;/p&gt;
&lt;h3 id=&#34;expresscard-egpu-s-in-2024&#34;&gt;ExpressCard eGPU-s in 2024?&lt;/h3&gt;
&lt;p&gt;What got me started with writing down my notes were &lt;a href=&#34;https://youtu.be/390FuyadPIw&#34;&gt;some YouTube videos that were
made on this topic recently.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A pimped-out ThinkPad T430 can still be a perfectly serviceable computer in 2024,
and an eGPU will completely sidestep the problem of the weak integrated GPU.&lt;/p&gt;
&lt;p&gt;The T430 is not powerful enough to natively run a 3440x1440 ultrawide monitor at
60 Hz. It is even struggling to do it at 30 Hz. An eGPU adapter with a modern
low-power GPU, such as the AMD Radeon RX 6400, could solve this issue nicely and
give the ThinkPad T430 a new lease of life.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d be lying if I wasn&amp;rsquo;t considering remaking this setup with everything I&amp;rsquo;ve
learned 6 years later. GPU pricing sucks, though.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;
They still sell these eGPU kits in various forms, however the price has doubled
or even tripled over the years.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in building a similar setup, then do check out &lt;a href=&#34;https://egpu.io/&#34;&gt;egpu.io&lt;/a&gt;.
With an M.2 or Thunderbolt connector you can build a much more capable eGPU setup.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=SH9RUpK4SsM&#34;&gt;If you can get a PCI Express signal out of a computer, then you can probably
rig a GPU up to it.&lt;/a&gt; Unless you&amp;rsquo;re
Jeff Geerling, in which case you might need to &lt;a href=&#34;https://www.jeffgeerling.com/blog/2023/external-gpus-working-on-raspberry-pi-5&#34;&gt;recompile the kernel a few times.&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;guess which one.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;validates my view that it&amp;rsquo;s still a good idea to stick to the big distros
that these short-lived Linux distros are based off of.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;I&amp;rsquo;ve survived two cryptocurrency mining hype cycles, and now we are in an
LLM bubble. Great.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Back to roots</title>
      <link>https://ounapuu.ee/posts/2024/06/24/back-to-roots/</link>
      <pubDate>Mon, 24 Jun 2024 14:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/06/24/back-to-roots/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/06/24/back-to-roots/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;This blog is running on a home server &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/&#34;&gt;again.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have once again gained access to a competent internet connection&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, and
I think I have figured out the IPv6 setup as well&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;, leading to this change.&lt;/p&gt;
&lt;p&gt;The IP address is dynamic, there are occasional power outages and I might just
mess up my configuration and bring it all down, but I get to brag about this
setup so it all balances out.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;it&amp;rsquo;s fiber, baby!&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;the software support for IPv6 is a goddamn mess and I regret learning
about it.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>How to save an old printer from the e-waste pile with a Raspberry Pi</title>
      <link>https://ounapuu.ee/posts/2024/06/12/save-old-printer/</link>
      <pubDate>Wed, 12 Jun 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/06/12/save-old-printer/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/06/12/save-old-printer/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;A family member has a Canon PIXMA MP250 printer, originally released in 2009.
It has been a very reliable piece of hardware, especially for a printer.&lt;/p&gt;
&lt;p&gt;Then came Windows 10. The printer would not work out of the box with it and
the official drivers got stuck during installation. Fiddling with the printer
in device manager, trying to install drivers via Windows Update and stars
aligning
got the printer to work again.&lt;/p&gt;
&lt;p&gt;Then came Windows 11. Nothing I did could get it working now, and the printer
is not even officially supported by Canon on this version of Windows.&lt;/p&gt;
&lt;p&gt;This printer works out of the box on any mainstream Linux distribution, and
the family member had been using the printer with Ubuntu for years,
but &lt;a href=&#34;https://www.id.ee/en/article/install-id-software/&#34;&gt;a certain piece
of important software in Estonia&lt;/a&gt;
was not working properly a lot of the time, which triggered a switch to Windows.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Quick searches online suggested that I could turn this printer into a network
printer, as long as I had some patience and a spare computer.&lt;/p&gt;
&lt;p&gt;The idea is simple: take a spare computer, hook it up to the printer, install
CUPS on it, configure it and you&amp;rsquo;re good to go!&lt;/p&gt;
&lt;p&gt;I initially tested this setup with a Zimaboard running Fedora Server, but the
final solution used an old Raspberry Pi B+ running the latest version of
Raspberry Pi OS.&lt;/p&gt;
&lt;h3 id=&#34;how-to-set-it-up&#34;&gt;How to set it up&lt;/h3&gt;
&lt;p&gt;The steps will be similar with other pieces of hardware and Linux distributions,
you may just need to adjust a few commands and package names.&lt;/p&gt;
&lt;p&gt;The steps are roughly based on these two guides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://m-hussainul-islam.medium.com/setting-up-network-printer-with-raspberry-pi-and-cups-d5a18e91b1f3&#34;&gt;Setting up Network Printer with Raspberry Pi and CUPS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pimylifeup.com/raspberry-pi-print-server/&#34;&gt;Raspberry Pi Print Server: Setup a Network Printer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;re following along with a Raspberry Pi, set up your OS first. A minimal
installation with no graphical interface will be just fine.&lt;/p&gt;
&lt;p&gt;Next, install &lt;a href=&#34;https://www.cups.org/&#34;&gt;CUPS&lt;/a&gt; and optionally the right printer
drivers for your printer. The Canon PIXMA MP250 requires the
package &lt;code&gt;printer-driver-gutenprint&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install -y cups printer-driver-gutenprint
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Make sure that CUPS is running.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo systemctl enable --now cups.service
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next, allow your user to manage printing. In this example, the username is &lt;code&gt;pi&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo usermod -a -G lpadmin pi
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next, make sure that CUPS allows connections from other machines in your
network, and then restart it.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo cupsctl --remote-any
sudo systemctl restart cups
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Find out the IP address of the Pi and navigate to it in your browser.
It will look something like &lt;code&gt;https://192.168.0.49:631&lt;/code&gt;. The browser will likely
warn you about a self-signed certificate. It&amp;rsquo;s safe to proceed.&lt;/p&gt;
&lt;p&gt;If you haven&amp;rsquo;t already connected your printer to the Raspberry Pi via USB, then
do so now.&lt;/p&gt;
&lt;p&gt;Use the graphical interface to add a new printer under the &lt;code&gt;Administration&lt;/code&gt;
section.
You&amp;rsquo;ll need to enter the username and password for your user here. It&amp;rsquo;s the same
user we used earlier, so in this example it&amp;rsquo;s &lt;code&gt;pi&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you can&amp;rsquo;t find your printer model listed in the &lt;code&gt;Add printer&lt;/code&gt; view, then you
are probably missing the proper driver package, or your printer simply isn&amp;rsquo;t
supported.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/12/save-old-printer/media/add-printer.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/12/save-old-printer/media/add-printer_hua18259d9e4d0a7c574c69a5b0ba9eb81_132612_800x800_fit_box_3.png&#34;
             width=&#34;800&#34;
             height=&#34;780&#34;
             alt=&#34;You should be able to find your printer in this view.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      You should be able to find your printer in this view.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;After adding your printer, you can use the CUPS web interface to print a test
page.&lt;/p&gt;
&lt;p&gt;If that worked, then you should now be able to use any other device on the
network
to print!&lt;/p&gt;
&lt;p&gt;On Linux and Windows, open the settings section that handles printing, and add a
new printer.
This networked printer should appear automagically, no additional configuration
required.&lt;/p&gt;
&lt;p&gt;I also did testing using a Fairphone 5 running Android 13, and an iPhone X
running iOS 16. In both
cases the printing just worked.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/12/save-old-printer/media/test-page-windows.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/12/save-old-printer/media/test-page-windows_hu63c2178c366ad8f3428cfd344a378ff6_3414761_800x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Test page printed using Windows 11.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Test page printed using Windows 11.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/12/save-old-printer/media/test-page-fedora.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/12/save-old-printer/media/test-page-fedora_hu2d89439e10c1881b5895c4ecd039e603_2848800_800x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Test page printed using Fedora. Yes, most of the colors in the colored ink
cassette have run out.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Test page printed using Fedora. Yes, most of the colors in the colored ink
cassette have run out.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I&amp;rsquo;ve used the scanning functionality of this particular printer on Linux and it
has worked, however I forgot to test this out using this setup. I&amp;rsquo;ll try to
test that out once I get the chance to try the printer out again.&lt;/p&gt;
&lt;h3 id=&#34;hardware-tech-tips&#34;&gt;Hardware tech tips&lt;/h3&gt;
&lt;p&gt;I first ran this setup with a Zimaboard to test the idea out. It worked very
well,
but as a simple print server it is a bit overkill.&lt;/p&gt;
&lt;p&gt;I then replaced it with a Raspberry Pi B+, and while the printing works, I
discovered that a single ARM CPU core is apparently a limiting factor during
printing. A simple test page print pegged the CPU at 100%, and that&amp;rsquo;s with the
700-&amp;gt;1000 MHz overclock applied.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/12/save-old-printer/media/cups-high-cpu.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/12/save-old-printer/media/cups-high-cpu_hue5068e9a8b5e26dc19edd154010886bf_325078_800x800_fit_box_3.png&#34;
             width=&#34;800&#34;
             height=&#34;435&#34;
             alt=&#34;Raspberry Pi B&amp;#43; struggling during printing.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Raspberry Pi B&amp;#43; struggling during printing.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;If you don&amp;rsquo;t mind a slower printing speed, then any Raspberry Pi will be
absolutely OK.
More performant versions of Raspberry Pi will likely fare even better.&lt;/p&gt;
&lt;p&gt;If you already have a small home server running, then you may want to hook the
printer up to that and set up the printer there. It&amp;rsquo;s already running 24/7, so
it would be a perfect match.&lt;/p&gt;
&lt;p&gt;One useful aspect of this setup is that you can queue up print jobs even when
the printer itself is powered off. Once you turn it on, the print jobs will
start, assuming that you have enough paper and ink.&lt;/p&gt;
&lt;p&gt;Free open source software prolongs the useful life of hardware once again.
&lt;a href=&#34;https://www.canalys.com/insights/end-of-windows-10-support-could-turn-240-million-pcs-into-e-waste&#34;&gt;See y&amp;rsquo;all in October 2025!&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;2024-06-15-update&#34;&gt;2024-06-15 update&lt;/h3&gt;
&lt;p&gt;This post got featured on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.xda-developers.com/raspberry-pi-unsupported-printer-on-windows/&#34;&gt;XDA Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.hackster.io/news/herman-ounapuu-brings-an-abandoned-printer-back-from-the-brink-with-a-raspberry-pi-90701ccb1ab9&#34;&gt;hackster.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hackaday.com/2024/06/13/raspberry-pi-saves-printer-from-junk-pile/&#34;&gt;Hackaday&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=40657753&#34;&gt;Hacker News&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://ubuntu.social/@till/112616367405119050&#34;&gt;And even the leader of OpenPrinting, Till Kamppeter, chimed in!&lt;/a&gt;
They also held a talk about &lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1930-openprinting-we-make-printing-just-work-/&#34;&gt;OpenPrinting at FOSDEM 2024.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Regarding scanning, seems like there&amp;rsquo;s a separate project for that called &lt;a href=&#34;http://www.sane-project.org/&#34;&gt;SANE - Scanner Access Now Easy.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://openprinting.github.io/&#34;&gt;Find out more about OpenPrinting here.&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;that might be about to change as there is an &lt;a href=&#34;https://flathub.org/apps/ee.ria.qdigidoc4&#34;&gt;unofficial Flatpak version&lt;/a&gt; out there.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>They make USB-C cables with displays now!</title>
      <link>https://ounapuu.ee/posts/2024/06/05/usb-c-cables/</link>
      <pubDate>Wed, 05 Jun 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/06/05/usb-c-cables/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/06/05/usb-c-cables/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;I&amp;rsquo;ve reached a point in my setup where most of the devices that I use are
based around the coveted USB-C port. This meant that I had a valid reason to get
a few extra because I didn&amp;rsquo;t yet have a stockpile of good USB-C cables.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s when I found out that there exist cables that have little screens on them
that show the power consumption of the connected device. This is a great little
addition
to &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/&#34;&gt;my power consumption monitoring addiction.&lt;/a&gt;
It&amp;rsquo;s also a simple way to understand if your device is charging at the speed
that you expect it to.&lt;/p&gt;
&lt;p&gt;The cable I ordered cost 6.72 EUR. It is a bit stiff and hard to work with,
probably due to its supposed USB 4 support requiring actually good cabling and
shielding. It works well enough for an USB-C dock with a DisplayPort
connection that&amp;rsquo;s running a 3440x1440 display at 60 Hz.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s too early to give a definitive answer about the longevity of the cable.&lt;/p&gt;
&lt;p&gt;You should be able to find these types of cables with a search query like &amp;ldquo;USB 4
Cable with LED Display&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The paranoid side of me suspects that a cable like this one would be an ideal
place to hide a malicious chip. That&amp;rsquo;s the only downside that I can think of.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in going more in depth with measuring the power consumption
over USB, then you might want to look at other options.
&lt;a href=&#34;https://github.com/fqueze/usb-power-profiling?tab=readme-ov-file#power-meters-known-to-work&#34;&gt;This GitHub repository lists a few examples of these types of measuring devices.&lt;/a&gt;&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Steam Deck: I like it</title>
      <link>https://ounapuu.ee/posts/2024/06/02/steam-deck/</link>
      <pubDate>Sun, 02 Jun 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/06/02/steam-deck/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;I got a &lt;a href=&#34;https://store.steampowered.com/steamdeck&#34;&gt;Steam Deck&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Only took me a year or so of contemplating getting
one, &lt;a href=&#34;https://ounapuu.ee/posts/2022/12/01/holoiso-steam-deck-experience/&#34;&gt;and trying out HoloISO, the unofficial SteamOS installer&lt;/a&gt;
finally convinced me to get one.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;It took another year to actually get down to writing down my thoughts on it.&lt;/p&gt;
&lt;p&gt;This post is written from the perspective of a software developer who used to play video games a lot as a teenager,
less so as an adult, and as someone who dabbles with Linux as a hobby.&lt;/p&gt;
&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&#34;https://www.steamdeck.com/en/oled&#34;&gt;Steam Deck OLED exists now&lt;/a&gt;, but back when I got my Steam Deck, it came in three flavours, and in the interests of my
budget I opted for the cheapest option that came with
only 64 GB of storage (eMMC based).&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-packaging.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-packaging_hu38ac570093a7fbfdf275beee30f671e6_3103802_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Steam Deck, the packaging, and cat.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Steam Deck, the packaging, and cat.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I also got a 512 GB microSD card to hold all the games.
All in all, this setup cost about 470 EUR. Certainly cheaper than the 512 GB NVMe SSD model that sold for 679 EUR at
the time of writing. The shipping estimate to Estonia was about 1-2 weeks, and mine arrived in almost exactly 1 week,
which was nice. And in one piece as well!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-storage.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-storage_hu28acd6ecf93809607feb809e9ba8bb9a_3927430_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Half a terabyte of games, all in that small microSD card.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Half a terabyte of games, all in that small microSD card.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I don&amp;rsquo;t have the official &lt;a href=&#34;https://www.steamdeck.com/en/dock&#34;&gt;Steam Deck Dock&lt;/a&gt; (try saying that 10 times in a row), but what I do have is a vertical laptop
stand and a Dell WD19TB dock. As long as you leave a gap for airflow, then this combination works quite well if you
want to use the Steam Deck in a docked mode. The combination of this dock and the Steam Deck also works nicely, the
3440x1440p ultrawide monitor gets picked up fine and even the gigabit Ethernet port works at the rated speed.&lt;/p&gt;
&lt;p&gt;However, it seems like the Steam Deck USB-C compatibility can be dependent on your monitor and dock choice. While the Dell
WD19TB dock worked great with an ultrawide monitor, a Lenovo Thinkpad USB-C dock would fail to output anything to
the same monitor quite often. Turning on the setting to enable safe resolutions for the external display
and setting the resolution manually usually fixes it, but it&amp;rsquo;s still quite annoying.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-dock.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-dock_hu2cefbdd9478e97f5e23c792a17e03d0f_2498083_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Steam Deck docked. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Steam Deck docked. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;its-booting-linux&#34;&gt;It&amp;rsquo;s booting Linux!&lt;/h3&gt;
&lt;p&gt;Not long after I set the Steam Deck up, I switched to desktop mode and opened a terminal window to confirm that yes,
this thing is running Linux. Arch Linux, in fact, or at least a modified version of it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-terminal.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-terminal_hu3b05f7a59c52c068e86e0ca25fc9f8af_2843301_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;btw I run Arch&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      btw I run Arch
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;But in all other aspects, it&amp;rsquo;s just like a normal computer, with an actual UEFI setup that you can browse.
With the Steam Deck, you get the polished experience of a gaming console and the
freedom to do whatever you want to with the software and hardware.&lt;/p&gt;
&lt;p&gt;You can also boot any x86-based Linux distro, like Fedora Linux.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-fedora.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-fedora_hu5cb6bd10a61444c868a37c8e49a097f1_3219040_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;If all my other computers stopped working, then I could totally work out of a Steam Deck.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      If all my other computers stopped working, then I could totally work out of a Steam Deck.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Or if SteamOS 3 is too limiting for you, then check out projects like &lt;a href=&#34;https://bazzite.gg/&#34;&gt;Bazzite.&lt;/a&gt;
The experience will be very similar, but it&amp;rsquo;s easier to tweak the setup to your
liking. Bazzite also allows you to format storage as &lt;code&gt;btrfs&lt;/code&gt; with compression
enabled, meaning that you can fit more games on your device with a very slight
increase in CPU usage. I&amp;rsquo;m sticking with the official Steam Deck experience for
now, but I&amp;rsquo;m tempted to try Bazzite for the &lt;code&gt;btrfs&lt;/code&gt; aspect alone.&lt;/p&gt;
&lt;p&gt;The desktop experience on the Steam Deck is quite nice. You can easily boot into it
from the graphical interface, and it runs on KDE Plasma. The design language of KDE is an eyesore, but it makes up for it with the responsive UI.&lt;/p&gt;
&lt;p&gt;The touchpads are not that big, but they&amp;rsquo;re plenty good for
clicking around. Manually popping up the on-screen keyboard by pressing &lt;code&gt;STEAM + X&lt;/code&gt; is a bit annoying at first,
but it gets the job done.&lt;/p&gt;
&lt;p&gt;Installing software can be done in the graphical environment via the &amp;ldquo;Discover&amp;rdquo; app that ships with the desktop
environment.
One thing you&amp;rsquo;ll probably notice is that the selection of software is a bit limited, and that&amp;rsquo;s mainly down to how
the Steam Deck is set up by default. All the apps you install are installed via &lt;a href=&#34;https://flatpak.org/&#34;&gt;Flatpak&lt;/a&gt; and while the selection of apps
that are available as a Flatpak grows with time, not everything is yet present there.&lt;/p&gt;
&lt;p&gt;I was surprised to see that the &lt;a href=&#34;https://help.steampowered.com/en/faqs/view/671A-4453-E8D2-323C&#34;&gt;Steam Deck Desktop FAQ&lt;/a&gt;
actually has useful information for an enthusiast like myself, even mentioning what a flatpak is.&lt;/p&gt;
&lt;h3 id=&#34;peeking-under-the-hood&#34;&gt;Peeking under the hood&lt;/h3&gt;
&lt;p&gt;During the first couple of months I went the tinkerers&amp;rsquo; path, enabled the SSH server, unlocked the root partition for
modifications and automated the setup of my Steam Deck. While this thing is running a flavor of Arch Linux, it&amp;rsquo;s not
really designed for these types of manual modifications. I had to mess around to get the Arch default package manager
&lt;code&gt;pacman&lt;/code&gt; to work, but at one point messing with &lt;code&gt;pacman&lt;/code&gt; and running commands that I didn&amp;rsquo;t know much about, I blew up
the OS by force-installing some packages and throwing out a crucial dependency. Whoops.&lt;/p&gt;
&lt;p&gt;Well, at least the Steam Deck OS recovery setup is quite straightforward. Download the OS recovery image, put it on an
USB stick, boot it on the Steam Deck and re-image the OS. There are also options to attempt repairs or open a terminal
window in case you know how to fix the mess you&amp;rsquo;ve created.&lt;/p&gt;
&lt;p&gt;One downside of the SteamOS recovery setup became apparent when Valve released a buggy software update around
summer/fall of 2023. The update was buggy for many users, including myself, with games crashing or running poorly. On my
Deck the SD card was also automatically reformatted for some reason so I had to redownload all the games I had on that. When I went to
download the recovery image, I discovered that you could only go back to the current, buggy version of Steam Deck OS.&lt;/p&gt;
&lt;p&gt;By fiddling with the download link I could navigate to a web directory where older recovery images were present. Those
weren&amp;rsquo;t much help though. Although you could boot into an older version during the initial Steam Deck setup, it would
auto-update to the newest version automatically, with no obvious way to bypass it.&lt;/p&gt;
&lt;p&gt;The real workaround would have been
to manually boot into the older version of the OS that sits on the other partition and not update for a while. I unfortunately
discovered that &lt;em&gt;after&lt;/em&gt; I had re-imaged the Steam Deck, which formats the whole drive.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve now stopped with the tinkering. I still have an SSH server running on it, but it&amp;rsquo;s
there so that I can install my favourite applications as flatpaks and deploy the
backup script, via Ansible. That&amp;rsquo;s it.&lt;/p&gt;
&lt;h3 id=&#34;its-booting-windows&#34;&gt;It&amp;rsquo;s booting&amp;hellip; Windows?&lt;/h3&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-windows.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-windows_hu1aa0101be327f63898d13f9727af7a13_3166258_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Cursed Steam Deck.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Cursed Steam Deck.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Don&amp;rsquo;t worry, Valve doesn&amp;rsquo;t even officially support running Windows on this thing,
and &lt;a href=&#34;https://store.steampowered.com/news/app/1675200/view/3131696199122435099&#34;&gt;while you can do it&lt;/a&gt;, I don&amp;rsquo;t
really recommend it. You&amp;rsquo;ll be giving up all the nice things about SteamOS while
also taking on the hassle of running Windows, including unexpected Windows updates.&lt;/p&gt;
&lt;h3 id=&#34;games-are-too-damn-big&#34;&gt;Games are too damn big&lt;/h3&gt;
&lt;p&gt;512 GB of storage on something as small as a fingernail was something I would have never expected to see 10 years ago,
but here we are. There are even bigger microSD cards out there, but those also cost a lot more.&lt;/p&gt;
&lt;p&gt;And even with this marvel of technology I ran into issues when installing games. Install GTA V, Forza Horizon 4, and
God of War, and just like that about half of all that storage is gone.&lt;/p&gt;
&lt;p&gt;The 64 GB internal drive was also quite limiting, especially due to shader cache and compatibility layer (Proton) related
files taking up a majority of it. The situation has improved now, but I still went ahead and replaced it with a 1 TB
M.2 2230 NVMe SSD that I ordered online for 74 EUR in May 2023, which still makes it a cheaper option than the 512 GB model sold at the time.&lt;/p&gt;
&lt;p&gt;The new SSD works well, it&amp;rsquo;s fast and doesn&amp;rsquo;t seem to affect battery life negatively.
Changing it was quite simple, all you need is an appropriate screwdriver, good fingernails or a plastic spudger to get
the case off, and some delicate care when working inside the Steam Deck.&lt;/p&gt;
&lt;p&gt;Before I replaced my SSD, I tried all sorts of wild-ass ideas to fit more games on my Steam Deck.&lt;/p&gt;
&lt;p&gt;First, I tried &lt;a href=&#34;https://nextcloud.com/&#34;&gt;Nextcloud&lt;/a&gt;.
The idea is simple: I&amp;rsquo;m not going to be playing all my games all the time, so it makes sense to offload some of those
to my home server and retrieve them over the fast local network whenever I want to play them. This idea makes even more
sense
if your internet speeds are not that great.&lt;/p&gt;
&lt;p&gt;The results were mixed. The syncing part was working surprisingly well with the transfer speeds capping out at 1 Gbit/s
over Ethernet
and actually being faster than the microSD card itself at times. However, the usability of this setup is not that great.
You can select which folders to sync in the Nextcloud Client application, but Steam will still believe that a game is
installed even if the game files are missing as long as the app manifest file is present. This can lead to annoying
situations where you try to play a game and discover that the games files are not present on your Steam Deck.&lt;/p&gt;
&lt;p&gt;The second solution I tried out was &lt;code&gt;iSCSI&lt;/code&gt;. I
followed &lt;a href=&#34;https://www.reddit.com/r/SteamDeck/comments/z7sh8v/how_to_connect_to_an_iscsi_disk/&#34;&gt;this guide on Reddit&lt;/a&gt;.
Getting iSCSI to work was tricky even for someone like myself who should be able to do this technical stuff properly,
but I ended up getting it working. I formatted the iSCSI device as ext4, mounted it and made it a Steam library folder
in Steam desktop mode.&lt;/p&gt;
&lt;p&gt;The benefit of this solution is that as long as you have access to the server, the iSCSI storage device will show up
on your Steam Deck as any other drive and games will just work. If your network is good enough, you can play games that
are stored on your server, which might make a lot of sense for games that you generally play in docked mode.
Transferring games to your internal storage is also simple, performant and can be done entirely within the Steam UI.
The iSCSI setup is not that great mainly due to the technical complexity of the setup, making it a no-go for the more
casual audience. The performance over Wi-Fi was also lousy, and it&amp;rsquo;s also difficult to justify having a good chunk of
your
home server storage being permanently held up by Steam games.&lt;/p&gt;
&lt;p&gt;After all that hassle, I went with the solution that most people would have gone with already: store games on an
external SSD. Duh. It has the same benefits as the iSCSI setup, but it&amp;rsquo;s faster and you can bypass
a lot of the technical complexity. The external SSD is also automatically mounted
when you connect it to the Steam Deck if it&amp;rsquo;s formatted as &lt;code&gt;ext4&lt;/code&gt;, making it a very convenient option for docked play.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-extra-ssd.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-extra-ssd_hu33ed7799ffb2115d1869aa3949e005fc_2440583_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Not as janky as you&amp;#39;d think.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Not as janky as you&amp;#39;d think.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;If you happen to have a fast desktop PC with plenty of storage, or a home server,
then consider using the &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/&#34;&gt;Steam local network game transfers.&lt;/a&gt;
You won&amp;rsquo;t fit more games onto the Steam Deck, but redownloading them will be
much faster.&lt;/p&gt;
&lt;p&gt;We really need to start decoupling high resolution textures and other high quality assets from the base game at some
point because the current approach is just silly. For a device like Steam Deck you&amp;rsquo;re rarely going to run those games with
the highest quality settings, meaning that those assets will just sit there on the disk taking up space.&lt;/p&gt;
&lt;p&gt;A free optional DLC could work well in theory. In practice I&amp;rsquo;m sure that game
publishers would quickly turn
a high quality texture pack into a paid DLC.&lt;/p&gt;
&lt;h3 id=&#34;the-part-where-i-play-games&#34;&gt;The part where I play games&lt;/h3&gt;
&lt;p&gt;Enough about the part where I tinker with the system. Let&amp;rsquo;s talk about the games.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-art-of-rally.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-art-of-rally_hu511852c332769e1ab82cfca3dcfd3a72_2067795_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;&amp;#34;art of rally&amp;#34; is a great game to play on the Steam Deck.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      &amp;#34;art of rally&amp;#34; is a great game to play on the Steam Deck.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I had some idea about the game compatibility when I tried out &lt;a href=&#34;https://github.com/HoloISO/holoiso&#34;&gt;HoloISO&lt;/a&gt;.
I&amp;rsquo;m happy to report that the game compatibility is even better on the Steam Deck.
This fact alone is a minor miracle. Some years ago I was convinced that the only way to properly play games on Linux
was to &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/&#34;&gt;set up a VM with Windows installed in it.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With the Steam Deck, you download the game and run it. Simple as.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The Steam Deck is not the most powerful machine in the world, but it has a decent CPU in it. The GPU
is more akin to integrated GPU-s that ship in modern AMD Ryzen based laptops, it&amp;rsquo;s still plenty of power
to run games at the native 1280x800 resolution.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://store.steampowered.com/app/1593500/God_of_War/&#34;&gt;God of War (2018)&lt;/a&gt; did stutter a bit, but in most situations you can expect around 40-60 FPS.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://store.steampowered.com/app/271590/Grand_Theft_Auto_V/&#34;&gt;GTA V&lt;/a&gt; was running fine as well, although the game is CPU limited at times and can drop to around 40 FPS in certain
sections of the map, especially in GTA Online.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://store.steampowered.com/app/1167630/Teardown/&#34;&gt;Teardown&lt;/a&gt; runs alright
after you lower the settings, and it&amp;rsquo;s best
played in docked mode due to some fun mods being designed around keyboard
controls. It&amp;rsquo;s really fun, but it will bring
the Steam Deck to its knees when you do some heavy destruction. Totally playable
though, and I&amp;rsquo;ve had a lot of fun with this game.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://store.steampowered.com/app/228380/Wreckfest/&#34;&gt;Wreckfest&lt;/a&gt; runs well with medium or high settings. I feel the framerate dropping
a bit when heading into the first corner
and being part of a 24-car pile-up, but in all other situations it&amp;rsquo;s smooth
enough.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://store.steampowered.com/app/47870/Need_For_Speed_Hot_Pursuit/&#34;&gt;Need for Speed Hot Pursuit (2010)&lt;/a&gt; runs very well and is an absolute blast on the
Steam Deck. Crank the settings to maximum and enjoy the thrilling police chases.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://store.steampowered.com/app/1262560/Need_for_Speed_Most_Wanted/&#34;&gt;Need for Speed Most Wanted (2012)&lt;/a&gt; is also great on the Steam Deck.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://store.steampowered.com/app/1262600/Need_for_Speed_Rivals/&#34;&gt;Need for Speed Rivals (2013)&lt;/a&gt; runs well after you apply the tweak that forces the game to run at
60 FPS. The game is a bit buggy even on Windows, so expect some bugs and crashes.&lt;/p&gt;
&lt;p&gt;More modern Need for Speed titles, such as
&lt;a href=&#34;https://store.steampowered.com/app/1262540/Need_for_Speed/&#34;&gt;Need for Speed (2015)&lt;/a&gt;,
&lt;a href=&#34;https://store.steampowered.com/app/1262580/Need_for_Speed_Payback/&#34;&gt;Need for Speed Payback (2017)&lt;/a&gt;
and
&lt;a href=&#34;https://store.steampowered.com/app/1222680/Need_for_Speed_Heat/&#34;&gt;Need for Speed Heat (2019)&lt;/a&gt;
are playable, but will typically run anywhere between 40-60 FPS. The handy
framerate capping
feature of the Steam Deck will help a lot in those cases since a stable 40-45
FPS is a much better experience than
a wildly fluctuating and unstable framerate.&lt;/p&gt;
&lt;p&gt;More lightweight games run like a charm while using very little power. This includes titles
like &lt;a href=&#34;https://store.steampowered.com/app/1794680/Vampire_Survivors/&#34;&gt;Vampire Survivors&lt;/a&gt;&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;
and &lt;a href=&#34;https://store.steampowered.com/app/702670/Donut_County/&#34;&gt;Donut County&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What I really like about the Steam Deck is that performance tuning is very accessible. You can toggle &lt;code&gt;mangohud&lt;/code&gt; with
various levels of detail to narrow down any performance troubles, and you have great control over the CPU and GPU
speeds. All of this can be done while the game is running.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-mangohud.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-mangohud_hu07b546065daf56d3a060f93843ffe4a5_4049933_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;It&amp;#39;s like MSI Afterburner overlay, but built-in and all set up for you.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      It&amp;#39;s like MSI Afterburner overlay, but built-in and all set up for you.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The APU in the Steam Deck tries its best to share the limited power that the system can pull between the CPU and GPU,
and in most cases it works well, but there are games where the CPU or the GPU demands can fluctuate a lot. In those
scenarios it helps if you lock the GPU clock speed to an amount that keeps the GPU usage to around 80% or less. Being
able to play with settings like this is one of the reasons why I got Forza Horizon 4 to be playable within minutes of
tinkering.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-fh4.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-fh4_hu0b9c3cbac1b31a9c63fd94acf0fc8463_5005225_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Forza Horizon 4 on the Deck runs surprisingly well after you tweak a few settings.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Forza Horizon 4 on the Deck runs surprisingly well after you tweak a few settings.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;There are a few games that I like to play but aren&amp;rsquo;t working well on the Steam Deck, such as GTA III or Vice City, but
that is pretty much it. Over the one year that I&amp;rsquo;ve had the Steam Deck, a lot of games have gained support, either
by Valve improving the Proton compatibility layer, or game publishers releasing updates that make the game work on the
Steam Deck.&lt;/p&gt;
&lt;p&gt;One such example
is &lt;a href=&#34;https://store.steampowered.com/app/12360/FlatOut_Ultimate_Carnage_Collectors_Edition/&#34;&gt;FlatOut Ultimate Carnage&lt;/a&gt;,
which seems to have been bought by a new publisher that removed the &amp;ldquo;Games for
Windows Live&amp;rdquo; mess and got the game &amp;ldquo;Steam Deck Verified&amp;rdquo; in the process.&lt;/p&gt;
&lt;p&gt;The performance of the Steam Deck was actually quite surprising in a lot of
games. For example, I&amp;rsquo;ve never
seen &lt;a href=&#34;https://store.steampowered.com/app/12210/Grand_Theft_Auto_IV_The_Complete_Edition/&#34;&gt;GTA IV&lt;/a&gt;
run so well on any machine that I&amp;rsquo;ve owned before.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-gta4.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-gta4_hubfb5d72d483945371f1635400ad8e234_4202912_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The best GTA IV experience I&amp;#39;ve ever had. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The best GTA IV experience I&amp;#39;ve ever had. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;If you want to see if your favourite games are compatible with the Steam Deck I recommend you check
out &lt;a href=&#34;https://www.protondb.com/&#34;&gt;ProtonDB&lt;/a&gt; for a detailed overview.
YouTube is your friend if you want to see some specific games being tested on the Steam Deck.&lt;/p&gt;
&lt;p&gt;When it comes to emulating PS1, PS2 and PSP games, the Steam Deck is fantastic. There&amp;rsquo;s plenty of performance to emulate
those consoles well, and for whatever reason playing the childhood classics on the Steam Deck feels so right. With PSP
the comparison is even more apt as it&amp;rsquo;s basically a bigger PSP but with a much better battery life.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-psp.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/06/02/steam-deck/media/deck-psp_hu0a2fadaa76d9b35cc540bc3890a7b338_4139215_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Steam Deck and the whole PSP game library is a great match.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Steam Deck and the whole PSP game library is a great match.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;More intensive games can discharge the battery in about 2-3 hours, but when
playing emulated games for older consoles you can expect up
to 7-8 hours of gameplay.&lt;/p&gt;
&lt;h3 id=&#34;non-steam-pc-gaming&#34;&gt;Non-Steam PC gaming&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s clear from the name that this console is set up around Steam. As long as all
your games are purchased on Steam, you&amp;rsquo;ll have a great time.&lt;/p&gt;
&lt;p&gt;I do have some games from other sources, such as &lt;a href=&#34;https://www.gog.com&#34;&gt;GOG.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There exist community-supported launchers, such as &lt;a href=&#34;https://heroicgameslauncher.com/&#34;&gt;HeroicGamesLauncher&lt;/a&gt;.
They work, but might require a bit of setup and fiddling to get things like cloud
synced game saves to work properly. In the case of &lt;code&gt;art of rally&lt;/code&gt; on GOG, you&amp;rsquo;ll
also lose out on multiplayer daily/weekly challenges.&lt;/p&gt;
&lt;p&gt;If you have some older games on CD-s, or legally acquired archived copies of
PC games, then the situation gets tricky. There exist solutions like &lt;a href=&#34;https://lutris.net/&#34;&gt;Lutris&lt;/a&gt;
or &lt;a href=&#34;https://usebottles.com/&#34;&gt;Bottles&lt;/a&gt;, however I never quite had a good experience
with those, especially once you deviate from the happy path.&lt;/p&gt;
&lt;p&gt;In my experience, if you want to have the best chance at playing your old
PC games, then you&amp;rsquo;ll need to obtain a version of the game that has a no-CD patch
applied to it already, add it to Steam and set a version of the Proton compatibility layer.
Some legally dubious sources for these games label these packages as &amp;ldquo;direct play&amp;rdquo; as well.&lt;/p&gt;
&lt;p&gt;There can also be a difference when running games via gaming or desktop mode.
Need for Speed Most Wanted (2005) did not work when started via gaming mode, but
it started up just fine in desktop mode.&lt;/p&gt;
&lt;p&gt;Proton, the compatibility layer, is great for what it allows us to do, but I feel
like the concept and technical implementation is something that novice users
will never quite understand. This also becomes apparent when you look up discussions
online where novice users try to apply mods to their favourite games. It works out of the box on Windows, but
you need to grok the way Proton handles things for it to work on the Steam Deck.&lt;/p&gt;
&lt;p&gt;I consider myself competent with computers and stuff,
but even I need to sit down and think about what&amp;rsquo;s going on when working in this area.&lt;/p&gt;
&lt;h3 id=&#34;backups&#34;&gt;Backups&lt;/h3&gt;
&lt;p&gt;I rely on &lt;a href=&#34;https://github.com/mtkennerly/ludusavi&#34;&gt;Ludusavi&lt;/a&gt; to collect all my
game saves,
and I use &lt;code&gt;rsync&lt;/code&gt; to back them up to my home server.&lt;/p&gt;
&lt;p&gt;I made a desktop entry for the backup script. By right-clicking it in desktop
mode and
selecting &lt;code&gt;Add to Steam&lt;/code&gt;, it will appear in your Steam library like any other
game or application.
This means that I don&amp;rsquo;t have to quit gaming mode to back up the Steam Deck.&lt;/p&gt;
&lt;p&gt;The backup script also updates all the applications that I&amp;rsquo;ve installed as a
flatpak, and shuts the device down after it&amp;rsquo;s done.&lt;/p&gt;
&lt;h3 id=&#34;its-big&#34;&gt;It&amp;rsquo;s big.&lt;/h3&gt;
&lt;p&gt;The Steam Deck is big.&lt;/p&gt;
&lt;p&gt;This does mean that Valve can pack a lot of compute power and cooling into it,
but it comes with the trade-off
of it not fitting that well into a backpack. The hardcase that it ships with is
great for preventing damage
to the Steam Deck, but it takes up a lot of space.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t find the size uncomfortable, quite the opposite actually, but for others
it might be a problem.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve had the opportunity to briefly play on a Nintendo Switch Lite. There&amp;rsquo;s
something
that feels special about that form factor. The performance is not great compared
to the Steam Deck, but I feel like the Nintendo Switch is in its own class of
portable gaming consoles.&lt;/p&gt;
&lt;p&gt;I wonder how a Nintendo Switch sized Steam Deck would perform.&lt;/p&gt;
&lt;h3 id=&#34;the-controls&#34;&gt;The controls&lt;/h3&gt;
&lt;p&gt;The controls on the Steam Deck are good. It takes the best aspects of the
&lt;a href=&#34;https://en.wikipedia.org/wiki/Wii_U_GamePad&#34;&gt;Nintendo Wii U&lt;/a&gt;
and &lt;a href=&#34;https://en.wikipedia.org/wiki/Xbox_360_controller&#34;&gt;Xbox 360&lt;/a&gt;
controllers and smashes them into one polished experience.&lt;/p&gt;
&lt;p&gt;The Steam Deck has some extra mappable buttons on the back. They sound great in
theory, but I rarely use them. When I do, I find that the L4 and R4 buttons
are more easily reachable compared to L5 and R5 (the lower ones).&lt;/p&gt;
&lt;p&gt;When I &lt;em&gt;do&lt;/em&gt; use those extra buttons, they are invaluable.
In &lt;a href=&#34;https://store.steampowered.com/app/1262600/Need_for_Speed_Rivals/&#34;&gt;Need for Speed Rivals (2013)&lt;/a&gt;,
I mapped L4 and R4 to the two power-up slots, which left my thumbs free to focus
on driving and looking around.&lt;/p&gt;
&lt;p&gt;Using those extra buttons does require some readjustment. It was difficult to
reprogram my muscle memory and remember that I have those extra buttons there.&lt;/p&gt;
&lt;p&gt;Steam also provides lots of controller templates, both Valve-approved and community ones.
If the game you want to play doesn&amp;rsquo;t have official controller support, then it&amp;rsquo;s
highly likely that someone else has created a controller configuration that
emulates keypresses and allows you to play your favourite game on the Steam Deck.&lt;/p&gt;
&lt;p&gt;Sometimes that doesn&amp;rsquo;t quite work, in which case you can create your own layout, or
improve an existing one.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s also the gyro functionality, but I&amp;rsquo;ve only used it
in &lt;a href=&#34;https://store.steampowered.com/app/1902490/Aperture_Desk_Job/&#34;&gt;Aperture Desk Job&lt;/a&gt;,
which itself is like a fancy demo of the controller capabilities of the Steam
Deck. Never quite found a suitable use case for this input method in other
games.&lt;/p&gt;
&lt;h3 id=&#34;the-fun-factor&#34;&gt;The fun factor&lt;/h3&gt;
&lt;p&gt;Based on what you read, you might think that I got the Steam Deck for the tinkering aspect. While that&amp;rsquo;s certainly
part of the rationale behind getting one, it wasn&amp;rsquo;t the main one.&lt;/p&gt;
&lt;p&gt;I got one as an excuse to finally spend more time resting. I have had a bad habit of trying to be productive at all
times, which can lead to exhaustion and eventually burning out.&lt;/p&gt;
&lt;p&gt;With the Steam Deck I&amp;rsquo;ve been able to actually spend some time playing games and turning my brain off.&lt;/p&gt;
&lt;p&gt;I love it.&lt;/p&gt;
&lt;p&gt;And it gives my cats a great opportunity to snuggle up while I do some illegal street racing. Win-win.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s something different about playing games on the Steam Deck. Perhaps it&amp;rsquo;s related to the memories I had as a
teenager playing on my PlayStation Portable a lot, or knowing that I can replay all my favourite console games
without having to set up the physical consoles themselves.&lt;/p&gt;
&lt;h3 id=&#34;the-sad-reality-of-adulthood&#34;&gt;The sad reality of adulthood&lt;/h3&gt;
&lt;p&gt;I love using the Steam Deck. However, I still can&amp;rsquo;t seem to make much time for it when life gets busy.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s my only big gripe with it.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;ve been on the edge about getting a Steam Deck, then I hope that this post has helped you make a decision.
It has some rough edges, but when it works, it feels magical.&lt;/p&gt;
&lt;p&gt;If you already have a gaming PC with a modern AMD GPU in it, then consider trying out
projects like &lt;a href=&#34;https://bazzite.gg/&#34;&gt;Bazzite&lt;/a&gt;, &lt;a href=&#34;https://github.com/HoloISO/releases&#34;&gt;HoloISO&lt;/a&gt; or &lt;a href=&#34;https://chimeraos.org/&#34;&gt;ChimeraOS&lt;/a&gt; to get a taste of the Steam Deck experience.&lt;/p&gt;
&lt;p&gt;Even if I can&amp;rsquo;t put in as many hours as I&amp;rsquo;d like to, I still love my Steam Deck
and don&amp;rsquo;t regret getting it at all.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;this makes Valve&amp;rsquo;s silence on releasing SteamOS 3 to a wider
audience puzzling. Do they not want to sell more Steam Decks?&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;assuming that it&amp;rsquo;s a Steam Deck Verified title.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;it&amp;rsquo;s really addicting, be careful.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>ThinkPad T40: it can still run modern Linux, for now</title>
      <link>https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/</link>
      <pubDate>Fri, 24 May 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;I recently busted out my old ThinkPad T40, the last of the OG IBM ThinkPads.&lt;/p&gt;
&lt;p&gt;I picked it up some time around my university days because I liked collecting
ThinkPads at the time, and it was a nice complement to my existing ThinkPad T60
and T430.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/media/old-vs-new.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/media/old-vs-new_hud8e7f39a6a53718c04b020d97b33e675_3608620_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;20 years difference, but they still look similar. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      20 years difference, but they still look similar. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The battery is dead, but everything else still works. Checking a few online
listings,
I&amp;rsquo;m surprised that I can still find batteries sold for this model. Probably old stock
that&amp;rsquo;s been sitting around in a warehouse slowly discharging to death, but hey,
you might get lucky!&lt;/p&gt;
&lt;p&gt;I also learned that I had
replaced the internal IDE hard drive with a 16 GB mSATA SSD via an adapter at
one point. I don&amp;rsquo;t think they even sell SSD-s that small nowadays, but the size
feels age-appropriate.&lt;/p&gt;
&lt;p&gt;I had already installed a flavor of Linux on this, but had completely forgotten
the password.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; This was a good excuse to wipe it and see if I can install a
modern mainstream Linux distro on it.&lt;/p&gt;
&lt;p&gt;I went with Debian 12 (Bookworm). It&amp;rsquo;s the newest Debian release, and unlike
many other distros, &lt;a href=&#34;https://www.debian.org/distrib/netinst&#34;&gt;they still offer 32-bit installers.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/media/debian-install.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/media/debian-install_hu39a404366cc5c1dca967c674d4df7e88_3598997_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Modern Linux on an ancient laptop.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Modern Linux on an ancient laptop.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;It had been a while since I had last installed Debian via the terminal user
interface.
The experience felt surprisingly snappy.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/media/debian-wip.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/media/debian-wip_hud8e7f39a6a53718c04b020d97b33e675_3179941_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;It&amp;#39;s probably been 5&amp;#43; years since I last installed Debian on a machine. What a throwback!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      It&amp;#39;s probably been 5&amp;#43; years since I last installed Debian on a machine. What a throwback!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I went with the good old XFCE desktop environment. It strikes a good balance of
being lightweight, simple and usable.&lt;/p&gt;
&lt;p&gt;Things were great until I started up Firefox. It works, but man, is it slow. All
the years of browser complexity have caught up with this laptop and made the web
barely usable.&lt;/p&gt;
&lt;p&gt;It does pass the &lt;em&gt;techtipsy&lt;/em&gt; test.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/media/techtipsy.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/24/thinkpad-t40/media/techtipsy_hu1bf3ac3aec6a3d9c7b97bc621d8cbd78_3362228_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Insert joke about recursion.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Insert joke about recursion.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This will likely be the last time this laptop runs a modern OS. 32-bit CPU-s
are losing support both in x86 and ARM ecosystems,
and &lt;a href=&#34;https://en.wikipedia.org/wiki/Year_2038_problem&#34;&gt;the year 2038&lt;/a&gt; is not that
far away any more.&lt;/p&gt;
&lt;p&gt;So long, and thanks for all the fish!&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;note to future self: the username is &lt;code&gt;thinkpad&lt;/code&gt;, and the password
is &lt;code&gt;thinkpad&lt;/code&gt;.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>OpenWRT, ISP modem and dynamic IP addresses: how to fix connectivity issues without rebooting your router every time</title>
      <link>https://ounapuu.ee/posts/2024/05/20/openwrt-connectivity-fix/</link>
      <pubDate>Mon, 20 May 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/05/20/openwrt-connectivity-fix/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/05/20/openwrt-connectivity-fix/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;&lt;a href=&#34;https://elisa.ee/&#34;&gt;My current ISP&lt;/a&gt; provides an internet connection over a
copper wire. To use it,
I have a crappy modem (Technicolor CGA2121, DOCSIS 3.0). It&amp;rsquo;s running in bridge
mode,
meaning that all it does is convert the signal running over the coax cable
into plain old Ethernet.&lt;/p&gt;
&lt;p&gt;My main networking device is a TP-Link Archer C7 v5. It runs OpenWRT. This
router/Wi-Fi AP box connects to the modem and handles everything, including
getting a public
IPv4 address from the ISP.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;After a power outage or my ISP doing maintenance, the public IP address has
usually changed. This wouldn&amp;rsquo;t be a problem if I just stuck to the ISP-approved
modem.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;With my setup, there was a problem. The OpenWRT box would try to operate with
the IPv4 address that it was
given since the DHCP lease had not yet expired. However, this meant that there
was no internet
connectivity. A reboot of the OpenWRT box would resolve the issue.&lt;/p&gt;
&lt;p&gt;This manual workaround wasn&amp;rsquo;t good enough for me. It would be quite problematic
if this issue happened while I was away from home because I&amp;rsquo;d still like to
access
my home server.&lt;/p&gt;
&lt;p&gt;After traversing OpenWRT forums and consulting the Slack workspace of my local
hackerspace, I found that bringing up the WAN interface again would result in
the OpenWRT box getting a new public IPv4 address. Problem solved!&lt;/p&gt;
&lt;p&gt;To automate this workaround, I created a single crontab entry in the OpenWRT
box. This is
also configurable in a graphical user interface as long as you
have &lt;a href=&#34;https://openwrt.org/docs/guide-user/luci/start&#34;&gt;LuCI installed.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The crontab entry looks like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;*/5 * * * * /bin/ash -c &#39;/bin/ping -c 3 8.8.8.8 &amp;gt; /dev/null || /sbin/ifup wan&#39;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Every 5 minutes, the router pings Google&amp;rsquo;s DNS server. If that command succeeds,
then the internet connection works and that&amp;rsquo;s it. If the ping fails, then the
other half of the shell command is executed, which brings up the &lt;code&gt;wan&lt;/code&gt; interface
on my router.&lt;/p&gt;
&lt;p&gt;Feel free to use a different IP address to test with. Your WAN network interface
might also have a different name.&lt;/p&gt;
&lt;p&gt;The downside of this solution is that if the server you&amp;rsquo;re using to verify your
internet connection is down or refuses pings, then you&amp;rsquo;ll be causing
interruptions in your home network every 5 minutes.&lt;/p&gt;
&lt;p&gt;Talking to the ISP about this issue was something I considered as well. Then
I remembered that it took me 1.5 months of fighting chatbots and repeating the
same information to different customer care agents to use my own modem that&amp;rsquo;s
identical to the one the ISP uses. That&amp;rsquo;s a &lt;em&gt;hell no&lt;/em&gt; from me.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;I really should get around to drilling those holes in the apartment
building to get access to a fiber connection.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;using the ISP-approved box would introduce a whole other set of problems
because they are surprisingly low quality.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>The hidden media play/pause/stop keys on the Lenovo ThinkPad L390 Yoga</title>
      <link>https://ounapuu.ee/posts/2024/05/07/thinkpad-l390-hidden-media-keys/</link>
      <pubDate>Tue, 07 May 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/05/07/thinkpad-l390-hidden-media-keys/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/05/07/thinkpad-l390-hidden-media-keys/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;ThinkPad keyboards were once well known for their great layouts, feel and
functionality. This included the media playback control keys.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/07/thinkpad-l390-hidden-media-keys/media/T420.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/07/thinkpad-l390-hidden-media-keys/media/T420_hu7849b20ce9ad2599a2189d7278ab15e2_30415_1200x800_fit_q75_box.jpg&#34;
             width=&#34;463&#34;
             height=&#34;302&#34;
             alt=&#34;Media playback control keys on a ThinkPad T420 keyboard.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Media playback control keys on a ThinkPad T420 keyboard.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;On the ThinkPad T430, the new chiclet keyboard layout moved the media keys to
the function row. Still there, but less convenient to access.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/07/thinkpad-l390-hidden-media-keys/media/T430.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/07/thinkpad-l390-hidden-media-keys/media/T430_hu35ad84f38459b41c8e36cb20bbdf9599_3676463_1200x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Media playback control keys on a ThinkPad T430 keyboard.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Media playback control keys on a ThinkPad T430 keyboard.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The ThinkPad L390 Yoga doesn&amp;rsquo;t have any visible function keys for controlling
media playback. However, I found that the play/pause and stop
buttons are still functional on the up/down arrow keys. Left/right arrow keys
act as &lt;code&gt;Home&lt;/code&gt; and &lt;code&gt;End&lt;/code&gt; keys.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;evtest&lt;/code&gt; output for play/pause key combination:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Event: time 1714716211.222697, type 4 (EV_MSC), code 4 (MSC_SCAN), value e3
Event: time 1714716211.222697, type 1 (EV_KEY), code 143 (KEY_WAKEUP), value 1
Event: time 1714716211.222697, -------------- SYN_REPORT ------------
Event: time 1714716212.291293, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1714716212.291293, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1714716212.291293, -------------- SYN_REPORT ------------
Event: time 1714716212.366568, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1714716212.366568, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1714716212.366568, -------------- SYN_REPORT ------------
Event: time 1714716214.026847, type 4 (EV_MSC), code 4 (MSC_SCAN), value e3
Event: time 1714716214.026847, type 1 (EV_KEY), code 143 (KEY_WAKEUP), value 0
Event: time 1714716214.026847, -------------- SYN_REPORT ------------
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;evtest&lt;/code&gt; output for stop key combination:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Event: time 1714716254.780584, type 4 (EV_MSC), code 4 (MSC_SCAN), value e3
Event: time 1714716254.780584, type 1 (EV_KEY), code 143 (KEY_WAKEUP), value 1
Event: time 1714716254.780584, -------------- SYN_REPORT ------------
Event: time 1714716255.614775, type 4 (EV_MSC), code 4 (MSC_SCAN), value a4
Event: time 1714716255.614775, type 1 (EV_KEY), code 166 (KEY_STOPCD), value 1
Event: time 1714716255.614775, -------------- SYN_REPORT ------------
Event: time 1714716255.658388, type 4 (EV_MSC), code 4 (MSC_SCAN), value a4
Event: time 1714716255.658388, type 1 (EV_KEY), code 166 (KEY_STOPCD), value 0
Event: time 1714716255.658388, -------------- SYN_REPORT ------------
Event: time 1714716256.961601, type 4 (EV_MSC), code 4 (MSC_SCAN), value e3
Event: time 1714716256.961601, type 1 (EV_KEY), code 143 (KEY_WAKEUP), value 0
Event: time 1714716256.961601, -------------- SYN_REPORT ------------
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On a very recent laptop, &lt;a href=&#34;https://ounapuu.ee/posts/2024/04/12/lenovo-p14s-gen4/&#34;&gt;the ThinkPad P14s gen4&lt;/a&gt;, the media playback keys seem to
be gone. Left/right arrow keys do still work as &lt;code&gt;Home&lt;/code&gt; and &lt;code&gt;End&lt;/code&gt; keys, though.&lt;/p&gt;
&lt;p&gt;If you also miss your media playback control keys on your ThinkPad, then hit
that &lt;code&gt;Fn&lt;/code&gt; key and give it a go, you might get lucky!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Monitoring energy usage with smart plugs, Prometheus and Grafana</title>
      <link>https://ounapuu.ee/posts/2024/05/02/smartplugs/</link>
      <pubDate>Thu, 02 May 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/05/02/smartplugs/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/cover.png&#34;/&gt;
          
        
        
        &lt;p&gt;This post &lt;strong&gt;isn&amp;rsquo;t&lt;/strong&gt; a detailed line-by-line tutorial on how to set up each individual piece of the setup as those types of
guides tend to get out of date really easily, but if you know your way around Linux and the command line, then you can
definitely replicate this setup on your own.&lt;/p&gt;
&lt;p&gt;Over the past few years I&amp;rsquo;ve been interested in learning about how much energy my computing setup and home
appliances use.
I&amp;rsquo;ve used a simple digital energy meter before to get instantaneous readings, but that was not ideal for monitoring
how an electrical appliance consumes power over a longer time period.&lt;/p&gt;
&lt;p&gt;My friend bought a few smart plugs from &lt;a href=&#34;https://www.athom.tech/&#34;&gt;athom.tech&lt;/a&gt;. After getting confirmation
that they don&amp;rsquo;t suck, I went ahead and ordered some myself.&lt;/p&gt;
&lt;p&gt;The smart plugs I bought were the &lt;code&gt;EU style plug V3&lt;/code&gt; variant. The shipping times in EU were reasonably fast, shipping in 9
days (and that included Christmas!).&lt;/p&gt;
&lt;p&gt;The plugs ship with &lt;a href=&#34;https://tasmota.github.io/docs/&#34;&gt;Tasmota&lt;/a&gt; pre-flashed. The plugs come with a small paper strip explaining
the steps to take to connect the plug to your Wi-Fi network, and after that you can manage the plug in your browser.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/tasmota-quick-start.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/tasmota-quick-start_hud8e7f39a6a53718c04b020d97b33e675_1308648_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;502&#34;
             alt=&#34;Quick start instructions that ship with the smart plug.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Quick start instructions that ship with the smart plug.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Updating the firmware to the latest version is easy and doable in the web GUI with just a few clicks.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/webui.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/webui_hu9cb46fbfd4c7dc7dc40ad2d15cd826a4_70799_800x800_fit_box_3.png&#34;
             width=&#34;395&#34;
             height=&#34;800&#34;
             alt=&#34;The web UI is simple and very functional.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The web UI is simple and very functional.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;the-software-stack&#34;&gt;The software stack&lt;/h3&gt;
&lt;p&gt;My initial goal with these plugs was to visually monitor the power consumption of a few devices, such as my home server, router,
workstation setup and the electric water heater.&lt;/p&gt;
&lt;p&gt;The power meter data is collected to an existing &lt;a href=&#34;https://prometheus.io/&#34;&gt;Prometheus&lt;/a&gt; instance on my home server.
If you&amp;rsquo;re not sure what Prometheus is, then think of it as a tool that periodically reads metrics from different
sources, saves them to disk and allows you to later query and manipulate that information.&lt;/p&gt;
&lt;p&gt;I run multiple instances of this &lt;a href=&#34;https://github.com/astr0n8t/tasmota-power-exporter&#34;&gt;tasmota-power-exporter&lt;/a&gt; solution on my server, one per plug, which get scraped once
per second by the Prometheus instance. &lt;a href=&#34;https://github.com/arendst/Tasmota/issues/9206&#34;&gt;It is possible to also make the plugs themselves export these metrics,&lt;/a&gt;
but I didn&amp;rsquo;t fancy building Tasmota firmware myself, yet.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I already had a &lt;a href=&#34;https://grafana.com/&#34;&gt;Grafana&lt;/a&gt; instance running on my home server, so I reused that to show a few basic
graphs for the power meter setup.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Free tech tip&lt;/em&gt;: make sure to change the &lt;code&gt;min step&lt;/code&gt; setting to 1 second to get the most detailed data points on your graphs.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/grafana-minstep.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/grafana-minstep_hu5952a2b903b7f2b98c216cc3f852d5fc_23721_1280x800_fit_box_3.png&#34;
             width=&#34;550&#34;
             height=&#34;317&#34;
             alt=&#34;It&amp;#39;s this one. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      It&amp;#39;s this one. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;observations-and-findings&#34;&gt;Observations and findings&lt;/h3&gt;
&lt;p&gt;So, what have I learned after running this setup for almost 4 months?&lt;/p&gt;
&lt;h4 id=&#34;water-heater&#34;&gt;Water heater&lt;/h4&gt;
&lt;p&gt;It shouldn&amp;rsquo;t come as a surprise that the electric water heater uses up the most power. The one we have is a 30L one,
just enough for a quick shower or two or for washing a large load of dishes.&lt;/p&gt;
&lt;p&gt;Typical power usage: 4.51 kWh/day.&lt;/p&gt;
&lt;p&gt;Minimum observed: 0.56 kWh/day, happens usually when nobody is at home&lt;/p&gt;
&lt;p&gt;Maximum observed: 11.1 kWh/day, a lot of washing and showering happened on that day&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/boiler-graph.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/boiler-graph_hu3c09159cad2bcc54c8ac07b8e29f09e1_40283_1280x800_fit_box_3.png&#34;
             width=&#34;1120&#34;
             height=&#34;475&#34;
             alt=&#34;Typical power consumption pattern of a water heater.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Typical power consumption pattern of a water heater.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h4 id=&#34;home-server-setup&#34;&gt;Home server setup&lt;/h4&gt;
&lt;p&gt;I run all my home server workloads off of a &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/&#34;&gt;Zimaboard&lt;/a&gt;. One of its big selling
points for me was its super low power consumption.
When idling, the Zimaboard can use about 2 W, typical power usage with all my services running was about 7 W and the
maximum power consumption was around 15 W.&lt;/p&gt;
&lt;p&gt;The Zimaboard was actually using &lt;em&gt;less power&lt;/em&gt; than my internet modem/router box (which is hot garbage by the way).
The ISP-provided box used 12-14 W at all times, regardless if it was operating in router or bridge mode.&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/zimaboard-graph.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/zimaboard-graph_hu055bc352ee25bf176b52d5fd4b0b88b3_51555_1280x800_fit_box_3.png&#34;
             width=&#34;1120&#34;
             height=&#34;475&#34;
             alt=&#34;Zimaboard &amp;#43; modem/router box power consumption.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Zimaboard &amp;#43; modem/router box power consumption.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/isp-box-graph.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/isp-box-graph_hu1e3c979303e2f87de6a24325c2363805_31156_1280x800_fit_box_3.png&#34;
             width=&#34;1120&#34;
             height=&#34;475&#34;
             alt=&#34;The ISP modem/router box is a horribly inefficient device for what it does.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The ISP modem/router box is a horribly inefficient device for what it does.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;At one point I temporarily switched my home server setup back to &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;the ASRock Deskmini X300&lt;/a&gt;,
mainly because I added some latency-sensitive workloads onto my home server setup and the Zimaboard was a bit too weak
for those.&lt;/p&gt;
&lt;p&gt;One thing that became really obvious from the power meter is that the Deskmini idle power consumption is
horrible in comparison to the Zimaboard, coming in at around 15-20 W. This might be in part because my Deskmini doesn&amp;rsquo;t
seem to expose any lower CPU power states than C3 while the Zimaboard exposed C-states all the way down to C10. I could not
find a way to expose lower C-states in UEFI settings or the Linux kernel. Based on a quick remark in &lt;a href=&#34;https://www.youtube.com/watch?v=J_WJI4hp_B8&#34;&gt;this video&lt;/a&gt; I believe that it should
be possible to drop ASRock a message and receive a custom BIOS that enables some extra features, but that seems even
more unlikely for a consumer-grade device such as this one.&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/deskmini-graph.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/deskmini-graph_hu12358bc476ba2cd784ed64bf5d0ac17b_59098_1280x800_fit_box_3.png&#34;
             width=&#34;1120&#34;
             height=&#34;475&#34;
             alt=&#34;ASRock Deskmini X300 &amp;#43; ISP box power consumption.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      ASRock Deskmini X300 &amp;#43; ISP box power consumption.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I&amp;rsquo;ve added a panel to my usual Prometheus node exporter Grafana view that shows the server setup power consumption alongside
other metrics. Higher CPU activity is clearly visible on the power consumption graphs.&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/cpu-power-correlation.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/cpu-power-correlation_hu6a4123be6d182f8d302d750b742423eb_75617_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;397&#34;
             alt=&#34;A moderate jump in CPU usage can result in a big jump in power consumption.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      A moderate jump in CPU usage can result in a big jump in power consumption.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h4 id=&#34;voltage&#34;&gt;Voltage&lt;/h4&gt;
&lt;p&gt;The Tasmota plugs also report current voltage values. I graphed them just for fun, but noticed that there is a sort of
seasonality to the values. During the usual peak power consumption hours the voltage drops across the board.&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/voltage-seasonality.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/voltage-seasonality_hubd736162f2fe021fc12c120d470b0510_67975_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;404&#34;
             alt=&#34;Seasonality as expressed through voltage readings.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Seasonality as expressed through voltage readings.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This seems like a candidate for testing anomaly detection, as shown in &lt;a href=&#34;https://about.gitlab.com/blog/2019/07/23/anomaly-detection-using-prometheus/&#34;&gt;this great GitLab article.&lt;/a&gt;
I&amp;rsquo;ve used this concept at work and it works reasonably well for some metrics.&lt;/p&gt;
&lt;p&gt;In other cases the voltage drops were caused by running appliances that use a lot of power, such as the water heater, electric kettle, electric stove or the microwave.&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/voltage-correlation.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/voltage-correlation_hue628dc4aa97bc3ea50aef7ac1fc91da1_94305_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;640&#34;
             alt=&#34;Water heater causing the voltage to drop slightly for all plugs.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Water heater causing the voltage to drop slightly for all plugs.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;During cooking with an electric stove, the on-off cycles were also noticeable on
the voltage reading on all of the plugs.&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/voltage-cooking.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/voltage-cooking_hu41bea76e23e5fc9573d24fc34ba37fd6_47963_1280x800_fit_box_3.png&#34;
             width=&#34;1277&#34;
             height=&#34;483&#34;
             alt=&#34;The impact of an electric stove on the voltage.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The impact of an electric stove on the voltage.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h4 id=&#34;workstation&#34;&gt;Workstation&lt;/h4&gt;
&lt;p&gt;I have one plug that reports numbers for everything that&amp;rsquo;s connected to my home office setup: monitor, USB-C dock,
monitor light bar and anything that might be charging on the table.&lt;/p&gt;
&lt;p&gt;The power consumption of this setup varies a lot. Sometimes I do a longer home office stint. Sometimes I recharge various
devices.&lt;/p&gt;
&lt;p&gt;The typical power consumption of the whole setup while doing something on my computer is around 45-60 W, with peaks near
90-110 W. For an ultrawide monitor, USB-C dock and my laptop I think this is a pretty good result. I&amp;rsquo;ve had desktop PC-s
that have used just as much power at idle, and in the olden days there were incandescent light bulbs that used up more
electricity than this!&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/workstation-graph.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/workstation-graph_hu69ef3419847b6fdff7382ac034b83d8c_76961_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;474&#34;
             alt=&#34;Typical power consumption of my work desk when working from home.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Typical power consumption of my work desk when working from home.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Typical power usage: 0.95 kWh/day.&lt;/p&gt;
&lt;p&gt;Minimum observed: 0.07 kWh/day&lt;/p&gt;
&lt;p&gt;Maximum observed: 1.52 kWh/day&lt;/p&gt;
&lt;h4 id=&#34;charging&#34;&gt;Charging&lt;/h4&gt;
&lt;p&gt;These plugs are also great for observing the charging patterns of various devices.&lt;/p&gt;
&lt;p&gt;A laptop or a power bank charges faster at the beginning, but the speed drops off as the battery gets more full.
At one point trickle charging seems to kick in until the device is fully charged.&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/charging-powerbank.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/charging-powerbank_hu55e72ff27215711fa9d1862b182b4dc9_39049_1280x800_fit_box_3.png&#34;
             width=&#34;1279&#34;
             height=&#34;530&#34;
             alt=&#34;A power bank charges quickly in the beginning and starts slowing down once it gets close to being fully charged.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      A power bank charges quickly in the beginning and starts slowing down once it gets close to being fully charged.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This pattern is similar on most devices that I charge. The battery on my e-bike seems to be an exception to the rule,
with a slighly increasing power consumption throughout, and a faster drop at the end of the charging cycle.&lt;/p&gt;







  




&lt;figure class=&#34;left&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/charging-ebike-battery.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/05/02/smartplugs/media/charging-ebike-battery_hu3fb1bef274b21cbbf3f2d364478b5fca_40104_1280x800_fit_box_3.png&#34;
             width=&#34;1279&#34;
             height=&#34;530&#34;
             alt=&#34;E-bike battery charging pattern, from nearly empty to full.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      E-bike battery charging pattern, from nearly empty to full.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;0.5kWh of power consumed for 60km of range with the &amp;ldquo;Turbo&amp;rdquo; preset on the bike doesn&amp;rsquo;t sound bad at all. Half a cent per
kilometer!&lt;/p&gt;
&lt;h4 id=&#34;stability&#34;&gt;Stability&lt;/h4&gt;
&lt;p&gt;The stability of the smart plugs is usually fine, but there are frequent cases where certain plugs don&amp;rsquo;t report back in time
with the statistics. This may be a Wi-Fi access point issue, but annoying nevertheless.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve had to completely power cycle two plugs a few times because they dropped off from the network completely and would
not come back. Again, could be the fault of my Wi-Fi AP.&lt;/p&gt;
&lt;h4 id=&#34;future-ideas&#34;&gt;Future ideas&lt;/h4&gt;
&lt;p&gt;The plugs also provide a way to turn the devices on and off over different
API-s (even over HTTP!), which is something I&amp;rsquo;d like to utilize either using something like &lt;a href=&#34;https://www.home-assistant.io/&#34;&gt;Home Assistant&lt;/a&gt;, or a simple
script that toggles certain devices on and off based on the current electricity price.&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t gotten around to this part yet, but from my research it seems that &lt;a href=&#34;https://github.com/custom-components/nordpool&#34;&gt;the necessary integrations
exist for Home Assistant.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;closing-thoughts&#34;&gt;Closing thoughts&lt;/h3&gt;
&lt;p&gt;Overall, I&amp;rsquo;m very happy with this setup. I can get reliable measurements for all sorts of computing setups from now on,
which will make judging the power efficiency of the devices I use much easier. No more guesswork!&lt;/p&gt;
&lt;p&gt;If you enjoyed this post, then I highly recommend giving &lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2723-power-profiling-my-entire-house-with-the-firefox-profiler/&#34;&gt;this FOSDEM 2024 talk by Florian Quèze a listen.&lt;/a&gt;
The talk also goes into details about measuring the power consumption of various devices in the speakers&amp;rsquo; home and
observations that they&amp;rsquo;ve made.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;This was pointed out to me by a fellow reader. Thank you!&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Lenovo ThinkPad P14s gen 4 (AMD): it doesn&#39;t suck under Linux</title>
      <link>https://ounapuu.ee/posts/2024/04/12/lenovo-p14s-gen4/</link>
      <pubDate>Fri, 12 Apr 2024 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/04/12/lenovo-p14s-gen4/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/04/12/lenovo-p14s-gen4/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;I&amp;rsquo;ve had the opportunity to try out another new laptop at work. I&amp;rsquo;ve used a brand new laptop recently, &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/&#34;&gt;and it was horrible.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But this time I&amp;rsquo;m pleasantly surprised.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadp/thinkpad-p14s-gen-4-(14-inch-amd)-mobile-workstation/len101t0070&#34;&gt;Lenovo ThinkPad P14s gen 4&lt;/a&gt; has great specs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU: &lt;a href=&#34;https://www.amd.com/en/products/apu/amd-ryzen-7-7840u&#34;&gt;AMD Ryzen 7 PRO 7840U (8 cores, 16 threads, up to 5.1 GHz)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GPU: AMD Radeon 780M (integrated)&lt;/li&gt;
&lt;li&gt;RAM: 32GB DDR5, soldered&lt;/li&gt;
&lt;li&gt;SSD: 1 TB NVMe&lt;/li&gt;
&lt;li&gt;Display: 1920x1200 resolution&lt;/li&gt;
&lt;li&gt;Two USB-C ports&lt;/li&gt;
&lt;li&gt;Two USB-A ports&lt;/li&gt;
&lt;li&gt;HDMI out&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A full-sized Ethernet port!&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have used it for about a month at work, and so far I have not noticed anything outright broken about it.
The Fedora Linux 39 installation that I copied over from the previous laptop (Dell Latitude 5411) simply works, no modifications required.
The CPU is blazing fast. The GPU driver does not crash. No issues with Wi-Fi or Bluetooth so far. USB-C docks and
monitors that I have just work. The webcam is also functional and has an acceptable image quality for meetings. CPU and GPU temperature data is present with &lt;code&gt;lm-sensors&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The build quality is what you&amp;rsquo;d expect from a modern ThinkPad: better than consumer-grade crap, but not as solid as a ThinkPad T430.
The case has a soft-feeling light gray finish to it, which will likely look horrible after a few years of use.&lt;/p&gt;
&lt;p&gt;The battery life is not great: don&amp;rsquo;t expect to last a full 8-hour work day on battery with this thing. It&amp;rsquo;s been years
since Apple has released Apple Silicon laptops with great battery life and somehow the rest of the industry still
hasn&amp;rsquo;t caught up.&lt;/p&gt;
&lt;p&gt;The fan has a really annoying high-pitched whine to it. You only hear it when pushing the CPU hard, like you&amp;rsquo;d do
when compiling a legacy Java monolith, but in a quiet room it&amp;rsquo;s really annoying. I&amp;rsquo;m not even sure that the fan has to
be run that hard, the AMD Ryzen CPU inside is very efficient and can regulate its power consumption based on the current
temperature. You &lt;em&gt;can&lt;/em&gt; tweak the fan curve on this laptop &lt;a href=&#34;https://ounapuu.ee/posts/2022/09/26/minimum-viable-fan-control-script/&#34;&gt;with a basic script.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t tried functionality that I don&amp;rsquo;t use myself, such as the fingerprint reader, so I cannot comment on that.&lt;/p&gt;
&lt;p&gt;This laptop can also play games. I took an external SSD, installed &lt;a href=&#34;https://bazzite.gg/&#34;&gt;Bazzite on it (GNOME + gamemode version)&lt;/a&gt;, set
everything up, and installed Forza Horizon 4 on it. It runs, and for an integrated GPU surprisingly well. I could push the
game to run with medium-high settings on the internal 1920x1200 display at a solid 60 FPS, with very rare dips below it.
That&amp;rsquo;s even better than what I got with the Steam Deck, and the CPU running near the 5 GHz mark certainly contributed
to it. This makes the laptop a great candidate for a LAN party after work, unless you favor more demanding games, in
which case you might want to temper your expectations a little bit.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the first time that I&amp;rsquo;ve had a brand new laptop that just works on Linux.
Hats off to the FOSS community for making this happen, AMD for getting their act
together, and Lenovo for not completely fucking it up this time.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>How to take down production with a single Helm command</title>
      <link>https://ounapuu.ee/posts/2024/04/04/helm-rollbljat/</link>
      <pubDate>Thu, 04 Apr 2024 07:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/04/04/helm-rollbljat/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/04/04/helm-rollbljat/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;You&amp;rsquo;re Cletus Kubernetus: a software developer, and a proud Fedora Linux
user.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;You know Kubernetes, especially after the time you migrated some services to it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=ia8Q51ouA_s&amp;amp;pp=ygUGa3JhemFt&#34;&gt;Everything is calm.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Your pods are running. Your service is up. Business as usual.&lt;/p&gt;
&lt;p&gt;You release some minor changes to production. Everything is still working.
Great!&lt;/p&gt;
&lt;p&gt;But then you receive a message from a colleague. Oh no, something has gone wrong
with a particular piece of
functionality!&lt;/p&gt;
&lt;p&gt;No worries. You&amp;rsquo;re using Helm. You can roll this change back safely. You ask
your colleague. &amp;ldquo;Oh yeah, &lt;code&gt;helm rollback&lt;/code&gt;
should work.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;helm rollback&lt;/code&gt; it is.&lt;/p&gt;
&lt;p&gt;Cool, cool, new pod is starting up. Seems like it is indeed working.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wait, where did all the pods go?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After a hectic troubleshooting session with the team, you redeploy the service
and start investigating. A colleague
uses the staging environment to do a &lt;code&gt;helm rollback&lt;/code&gt; and it works as expected,
the previous version of the service
is successfully deployed.&lt;/p&gt;
&lt;p&gt;You investigate logs. The &lt;code&gt;helm rollback&lt;/code&gt; call worked as expected, and then it
began deleting every entity related to the
deployment. Pods, secrets, ingresses, &lt;em&gt;everything&lt;/em&gt; related to the service was
gone, and your name was present on each
deletion.&lt;/p&gt;
&lt;p&gt;The troubleshooting was on standby for a few days since you had no further leads
and had to get other work
done. But you couldn&amp;rsquo;t really move on from this issue mentally, could you?&lt;/p&gt;
&lt;p&gt;One day you continue the investigation by opening the Helm GitHub repository,
looking at the open issues and throwing in some
keywords that might be relevant, such as &amp;ldquo;rollback&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/helm/helm/issues/12681&#34;&gt;What the fuck.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It wasn&amp;rsquo;t an issue with Helm, or the way you ran it. Apparently the version of
Helm packaged in Fedora Linux included
a patch that introduced this issue. You then use the staging environment to
reproduce the issue. Everything was gone, again, but this time in a safer
environment.&lt;/p&gt;
&lt;p&gt;You promptly run &lt;code&gt;dnf remove -y helm&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After this and
the &lt;a href=&#34;https://openwall.com/lists/oss-security/2024/03/29/4&#34;&gt;xz backdoor&lt;/a&gt;, the
idea of living in the
countryside and learning beekeeping doesn&amp;rsquo;t sound &lt;em&gt;that&lt;/em&gt; bad, does it?&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Credit for that name goes to my colleagues, I wish I was that funny.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Fairphone 5: a biased long-term review (281 days and counting)</title>
      <link>https://ounapuu.ee/posts/2024/03/06/fairphone5/</link>
      <pubDate>Wed, 06 Mar 2024 12:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/03/06/fairphone5/</guid>
      <description>
        
          &lt;img src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/cover.jpg&#34;/&gt;
          
        
        
        &lt;p&gt;Changelog:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2024-03-06: 58 days, initial post&lt;/li&gt;
&lt;li&gt;2024-07-28: &lt;a href=&#34;#2024-07-28-update-202-days&#34;&gt;202 days, still going strong!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2024-10-15: &lt;a href=&#34;#2024-10-15-update-281-days&#34;&gt;281 days&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After months of contemplating I finally pulled the trigger and got myself
a &lt;a href=&#34;https://shop.fairphone.com/fairphone-5&#34;&gt;Fairphone 5.&lt;/a&gt; The fact
that &lt;a href=&#34;https://support.apple.com/guide/iphone/models-compatible-with-ios-17-iphe3fa5df43/ios&#34;&gt;iPhone X stopped receiving major iOS updates certainly helped make that decision.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;But why? My Xiaomi/Oneplus/Samsung/other glued-together device is like so much cheaper and faster and makes better
photos and the software is good after I completely format it and install a custom
ROM! &lt;a href=&#34;https://www.youtube.com/watch?v=e-4RlKcinzc&#34;&gt;And LinusTechTips said that it is trash!&lt;/a&gt;&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Well, it&amp;rsquo;s simple: Fairphone is the one of the few companies out there that has a good track record of long-lasting
software support
&lt;strong&gt;and&lt;/strong&gt; the phones they produce
are &lt;a href=&#34;https://www.ifixit.com/Device/Fairphone_4&#34;&gt;easily&lt;/a&gt; &lt;a href=&#34;https://www.ifixit.com/Device/Fairphone_5&#34;&gt;repairable.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.google/products/pixel/software-support-pixel-8-pixel-8-pro/&#34;&gt;The competition is catching on regarding the software support side,&lt;/a&gt;
but at this time those claims have
not been proven
yet, &lt;a href=&#34;https://arstechnica.com/gadgets/2023/07/fairphone-3-gets-seven-years-of-updates-besting-every-other-android-oem/&#34;&gt;unlike Fairphone.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;They also make an active effort to make sure that the people behind the production of their phones are treated well.&lt;/p&gt;
&lt;p&gt;These efforts need to be supported so that we don&amp;rsquo;t end up
replacing our phones every few years because the manufacturer stopped releasing software updates or your battery died
and &lt;a href=&#34;https://www.ifixit.com/Guide/Google+Pixel+8+Battery+Replacement/166180&#34;&gt;you cannot easily replace it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This post is &lt;strong&gt;not sponsored&lt;/strong&gt;, I bought this phone with my own money.
The iPhone X that I used before the Fairphone 5 got passed to someone else as an upgrade so this was not a vanity
purchase.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; it&amp;rsquo;s a perfectly &lt;a href=&#34;https://en.wiktionary.org/wiki/cromulent&#34;&gt;cromulent&lt;/a&gt; phone that comes with some intentional
trade-offs that improve the
repairability and longevity while reducing the environmental impact and human suffering.&lt;/p&gt;
&lt;p&gt;For those who
saw &lt;a href=&#34;https://www.youtube.com/watch?v=e-4RlKcinzc&#34;&gt;the LTT video&lt;/a&gt;: Fairphone
made &lt;a href=&#34;https://youtu.be/Q79Jl842B4g&#34;&gt;a response video&lt;/a&gt;
where they address most concerns and explain some design choices and trade-offs that they made with the Fairphone 5.&lt;/p&gt;
&lt;h3 id=&#34;the-mission&#34;&gt;The mission&lt;/h3&gt;
&lt;p&gt;I really admire what Fairphone is trying to achieve.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re not sure what makes Fairphone special and different from
others, &lt;a href=&#34;https://shop.fairphone.com/about-us&#34;&gt;then give their website a read.&lt;/a&gt; They also
held &lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3362-open-source-for-sustainable-and-long-lasting-phones/&#34;&gt;a talk at FOSDEM 2024&lt;/a&gt;
which goes into more technical detail, describing their journey, goals, and challenges faced when building phones and
trying to support existing ones for as long as possible (Qualcomm sucks in this regard).&lt;/p&gt;
&lt;p&gt;In short: they build sustainable phones that you can use and repair for a very long time, made by people that get paid
and treated fairly.&lt;/p&gt;
&lt;p&gt;One of the not-so-fun facts from their FOSDEM 2024 talk was that it only takes a few extra dollars per phone to make
sure that the factory workers get paid a living wage. Makes you think: if that is all it takes, then why aren&amp;rsquo;t other
companies doing it?&lt;/p&gt;
&lt;h3 id=&#34;my-use-case-for-a-phone&#34;&gt;My use case for a phone&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s important to recognize that everyone uses their phone differently. Some expect great performance, especially if
they play games. Some just want a good camera. Some just want to chat with their friends and family and share dank
memes.&lt;/p&gt;
&lt;p&gt;My expectations are very modest: a phone should make adequate pictures, be reasonably fast and get regular software
updates.
This post is written from &lt;strong&gt;my&lt;/strong&gt; perspective and will likely conflict with your views on what a phone should be, keep
that in mind.&lt;/p&gt;
&lt;p&gt;The Fairphone 5 is the first one that I actually considered buying because it resembles a modern smartphone
with relatively few compromises. This is in part thanks to the rate at which smartphones innovate slowing down, both in
performance and the amount of new features that people actually care about.&lt;/p&gt;
&lt;h3 id=&#34;the-cool-factor&#34;&gt;The cool factor&lt;/h3&gt;
&lt;p&gt;I got the transparent edition, meaning that the backside of the phone is made out of semi-transparent plastic. I can at
a
moments notice flip the phone over and see the components, including the battery, SIM card and the microSD card.
Absolutely unpractical, still cool though.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/battery.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/battery_hu60ed7970dda0653656b80fa941ce238f_4633746_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;What took me almost 2 hours on an iPhone X took me about 30 seconds on a Fairphone 5.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      What took me almost 2 hours on an iPhone X took me about 30 seconds on a Fairphone 5.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I wouldn&amp;rsquo;t do the &amp;ldquo;I can replace the battery in 30 seconds&amp;rdquo; party trick too much because I feel like the plastic clips
holding the back cover in are quite fragile and can break if too much force is used. &lt;a href=&#34;https://shop.fairphone.com/shop/fairphone-5-back-cover-267?category=4#attr=94&#34;&gt;You can easily buy replacement
covers, though.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;the-software&#34;&gt;The software&lt;/h3&gt;
&lt;p&gt;My first proper smartphone was a &lt;a href=&#34;https://www.gsmarena.com/samsung_galaxy_gio_s5660-3741.php&#34;&gt;Samsung Galaxy Gio&lt;/a&gt; back
in 2011.
It was also my first introduction to custom ROMs and over the years I ended up running all sorts of phones with various
flavours of Cyanogen and LineageOS. At one point certain banking and e-ID related apps began blocking users who decided
to run custom ROMs, so I went to the Apple side for a few years.&lt;/p&gt;
&lt;p&gt;Why this preface? Well, it&amp;rsquo;s because coming back to the Android side of things felt so refreshing and freeing.&lt;/p&gt;
&lt;p&gt;I can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;finally run a real version of Firefox on my phone
with &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/&#34;&gt;an actual ad blocker.&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;this is an absolute gamechanger for me and something I sorely missed on iOS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;install any app that I want.
&lt;ul&gt;
&lt;li&gt;there are also a lot more FOSS apps available.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;rearrange shortcuts on my home screen as I want to.
&lt;ul&gt;
&lt;li&gt;or hell, run a different launcher altogether&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://syncthing.net/&#34;&gt;seamlessly back up photos from my phone to PC using Syncthing!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;work with actual files!&lt;/li&gt;
&lt;li&gt;cram in a 512GB microSD card.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Fairphone 5 ships with Android 13, with Android 14 upgrade currently scheduled to summer 2024. The base OS is quite
clean, the only preinstalled app (other than the Google stuff) is the &amp;ldquo;My Fairphone&amp;rdquo; app that shows information about
your device. That same app can also be used to verify that the functionality on your phone works, and yes, the speaker
testing ones get quite loud.&lt;/p&gt;
&lt;p&gt;If you decide that the stock Android experience isn&amp;rsquo;t for you, then know that this phone can easily run alternative
operating systems. At FOSDEM 2024 almost every alternative OS booth had one or more Fairphone 5 running, including
Ubuntu Touch and CalyxOS. It&amp;rsquo;s clear that the FOSS community has embraced the Fairphone.&lt;/p&gt;
&lt;p&gt;I was a bit sad to see that a lot of open source apps that I used to run or that come up in searches are unsupported or
out of date. In some cases modern forks exist, but overall the picture looks very discouraging, especially if I was
new to the scene.&lt;/p&gt;
&lt;h3 id=&#34;performance&#34;&gt;Performance&lt;/h3&gt;
&lt;p&gt;The performance isn&amp;rsquo;t great, but it&amp;rsquo;s good for most activities. I can feel it being sluggish from time to time or with
certain animations.&lt;/p&gt;
&lt;p&gt;This is due to an intentional trade-off that Fairphone made: to be able to properly support this device for a very long
time, they
had to go with a Qualcomm SoC that gets long-term support, and that ruled out the ones that provide the best
performance. They ended up
putting in a chip that was designed for IoT applications, funnily enough. If having a slightly slower phone is what is
needed to run this phone for 5+ years, then it&amp;rsquo;s a worthwhile trade-off in my view.&lt;/p&gt;
&lt;p&gt;Fairphone &lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3362-open-source-for-sustainable-and-long-lasting-phones/&#34;&gt;highlighted the OEM support issue in their FOSDEM 2024 talk&lt;/a&gt;
in case you&amp;rsquo;re curious about why this trade-off needed to be made.
My opinionated &lt;strong&gt;tl;dw&lt;/strong&gt;: we have to get OEM-s to either open source
the proprietary parts or hit them with some regulations and enforcement so that they do support the chips they produce
for longer.&lt;/p&gt;
&lt;h3 id=&#34;battery-life&#34;&gt;Battery life&lt;/h3&gt;
&lt;p&gt;The battery life is what you would expect from a typical smartphone: 1-2 days of normal use, but I once stretched it to
almost 4 days during a
time when I used my phone very little. Do note that this is highly dependent on your usage patterns, if you do constant
video calls then you can&amp;rsquo;t expect the battery to last much.&lt;/p&gt;
&lt;p&gt;If you want to extend the longevity of your battery, then there is an option to limit charging to 80% in battery
settings. I&amp;rsquo;ve recently enabled it because it doesn&amp;rsquo;t impact my use of the phone much. Let&amp;rsquo;s see how it fares in a few
years.&lt;/p&gt;
&lt;h3 id=&#34;size-and-feeling&#34;&gt;Size and feeling&lt;/h3&gt;
&lt;p&gt;This phone is big. Really big. Biggest one I&amp;rsquo;ve had yet.&lt;/p&gt;
&lt;p&gt;I actually prefer smaller phones, something like the iPhone 13
mini size would be ideal (Apple stopped making smaller phones that aren&amp;rsquo;t iPhone 7 reskins after that so that&amp;rsquo;s not an
option any longer). When I was in
a store that sold iPhones, I compared my phone to the latest iPhone 15 offerings and was surprised to see that my phone
was &lt;a href=&#34;https://www.gsmarena.com/size-compare-3d.php3?idPhone1=12558&amp;amp;idPhone2=12540&#34;&gt;about the same size as an iPhone 15 Plus.&lt;/a&gt;
Hopefully we&amp;rsquo;ll see smaller Fairphones in the future, all while not introducing too many compromises.&lt;/p&gt;
&lt;p&gt;Some people are surprised at the thickness of the Fairphone 5. Yes, it&amp;rsquo;s thicker than most of the competitors, but note
that with other phones you&amp;rsquo;ll likely buy a separate case for the phone, so you&amp;rsquo;ll end up with something just as thick
anyway. At least with Fairphone 5 you don&amp;rsquo;t have a glass backside that easily shatters if you drop it.&lt;/p&gt;
&lt;h3 id=&#34;camera&#34;&gt;Camera&lt;/h3&gt;
&lt;p&gt;When I bought the phone, I expected only one thing from the Fairphone 5: its camera should be better than the one on the
iPhone X.
GSMArena comparisons and reviews by others looked promising&lt;/p&gt;
&lt;p&gt;The camera on the Fairphone is acceptable. I don&amp;rsquo;t have proper photography education, but in most cases the Fairphone
makes OK pictures. In low light situations it seems to be inferior to flagship phones from other companies, which
may often end up with smudged pictures. At least it &lt;em&gt;has&lt;/em&gt; a low light mode, something that my previous phone (iPhone X)
lacked. The colors look funky sometimes and are oversaturated.&lt;/p&gt;
&lt;p&gt;This is a selection of photos made with the Fairphone 5. Thumbnails are compressed to avoid unnecessary bandwidth. Click
on the image to view the original, full-sized version.&lt;/p&gt;
&lt;p&gt;






  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-0.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-0_hud4eaf9c9f78186af3003bb1fbad39638_2173722_640x400_fit_q75_box.jpg&#34;
             width=&#34;300&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-1_hu53dc31a1664fa36e790fe7f35d0276e3_2592952_640x400_fit_q75_box.jpg&#34;
             width=&#34;300&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-2_hu107ded249dfb98df2b4bfaabeed53bfb_3137452_640x400_fit_q75_box.jpg&#34;
             width=&#34;300&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-3_hu64155431c147c223924e5011421e2fd7_4226392_640x400_fit_q75_box.jpg&#34;
             width=&#34;300&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-4.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-4_huf49e6ecf33f87be8a5409350246065be_2791949_640x400_fit_q75_box.jpg&#34;
             width=&#34;300&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-5.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-5_hu7524cfcfbdac57998e8997ad227c82ac_3659631_640x400_fit_q75_box.jpg&#34;
             width=&#34;533&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-6.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-6_hu989f629be4f79750cca0f18acfc1684e_3975186_640x400_fit_q75_box.jpg&#34;
             width=&#34;300&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-7.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-7_hu6c0cc62a3e7d3b11675aa9ca18f0e50b_3467482_640x400_fit_q75_box.jpg&#34;
             width=&#34;533&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-8.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-8_hu1e9ab68bb0e6a360b33216fda29429f7_2865349_640x400_fit_q75_box.jpg&#34;
             width=&#34;300&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-9.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-9_hu78037cb1f6148c4179cff7e0ab9fbace_2467302_640x400_fit_q75_box.jpg&#34;
             width=&#34;533&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-10.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/03/06/fairphone5/media/camera-10_hud4c2aa261dc27940771f83afdee3fae3_3420079_640x400_fit_q75_box.jpg&#34;
             width=&#34;300&#34;
             height=&#34;400&#34;
             alt=&#34;Click on the image to see the full version.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Click on the image to see the full version.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id=&#34;the-headphone-jack&#34;&gt;The headphone jack&lt;/h3&gt;
&lt;p&gt;I feel like I&amp;rsquo;m obliged to mention that this Fairphone doesn&amp;rsquo;t have a headphone jack. As someone who spent a few years
on
iPhones, this one doesn&amp;rsquo;t bother me too much.&lt;/p&gt;
&lt;h3 id=&#34;usb-c-port&#34;&gt;USB-C port&lt;/h3&gt;
&lt;p&gt;I plugged it into an USB-C dock and it actually output to an external display in portrait mode. Not sure how practical,
but really cool.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://shop.fairphone.com/shop/fairphone-5-usb-c-port-268?category=4#attr=&#34;&gt;Oh, and the USB-C port is easily replaceable.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;price&#34;&gt;Price&lt;/h3&gt;
&lt;p&gt;If you only focus on the spec sheet and compare the Fairphone 5 to the competition, then it will strike you as an
expensive
phone, coming in at &lt;strong&gt;699 EUR.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It &lt;em&gt;is&lt;/em&gt; expensive, but that&amp;rsquo;s a result of a lot of small things. Fairphone tries to do their best to source the raw
materials
from ethical sources and that narrows down your selection by a lot. Add to that living wages to the factory workers,
more repairable components, declining to add sponsored apps/ads into the OS and that&amp;rsquo;s the result.&lt;/p&gt;
&lt;p&gt;If you take the price and divide it by the number of years that you expect to get out of this phone (5-10 years),
then the price is likely much more comparable to the competition.&lt;/p&gt;
&lt;p&gt;If a higher purchase price results in less human suffering and a longer lifetime of the device, then so be it.&lt;/p&gt;
&lt;h3 id=&#34;schematics&#34;&gt;Schematics&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://www.fairphone.com/en/2024/01/24/have-you-seen-the-schematics-for-the-fairphone-5/&#34;&gt;They provide schematics&lt;/a&gt; for
the phone (direct
link &lt;a href=&#34;https://www.fairphone.com/wp-content/uploads/2024/02/Fairphone5_Information-on-how-to-repair-and-recycle-SCH-09-02-2024.pdf&#34;&gt;here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;My hours of watching &lt;a href=&#34;https://www.youtube.com/channel/UCl2mFZoRqjw_ELax4Yisf6w&#34;&gt;Louis Rossmann&lt;/a&gt; do board level repairs
have taught me that this is &lt;a href=&#34;https://store.rossmanngroup.com/schematics-or-die-t-shirt.html&#34;&gt;a very good thing.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;its-not-perfect&#34;&gt;It&amp;rsquo;s not perfect&lt;/h3&gt;
&lt;p&gt;Every phone has issues.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://arstechnica.com/gadgets/2023/10/apple-and-devs-plan-software-fixes-for-iphone-15-pro-overheating-issues/&#34;&gt;iPhone 15 had overheating problems.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That one iPhone SE 2020 that I ran for a few months had a hard to reproduce system board issue that made the phone
inoperable for 5+ minutes in random situations.&lt;/p&gt;
&lt;p&gt;Here are some issues that I&amp;rsquo;ve noticed while using the Fairphone 5&lt;/p&gt;
&lt;h4 id=&#34;sim-card&#34;&gt;SIM card&lt;/h4&gt;
&lt;p&gt;After I set up the phone, the SIM card would stop functioning properly after a few hours of use. Reseating the SIM card
did not work, and I was quite frustrated because I was expecting to send the phone back just after I set it all up.
Luckily it seem to be a known issue
and &lt;a href=&#34;https://support.fairphone.com/hc/en-us/articles/10375226431505-Troubleshoot-the-SIM-Card-s&#34;&gt;there is an official support article that covers it.&lt;/a&gt;
My SIM card is much older than the specified 2 years, but I couldn&amp;rsquo;t be arsed with replacing it yet so I used pure
ethanol to clean the contacts on the SIM card, popped it back in and it has worked with absolutely no issues ever since.
I&amp;rsquo;m glad that I got this easily fixed, but for a normal customer this would be a very frustrating experience so
hopefully
there is something that Fairphone can do to fix and/or avoid this in the future.&lt;/p&gt;
&lt;h4 id=&#34;the-display&#34;&gt;The display&lt;/h4&gt;
&lt;p&gt;The display of the Fairphone 5 supports 90 Hz refresh rate, but ships with it set to 60 Hz. I&amp;rsquo;ve heard that most other
phones do something similar with the likely reason being the negative impact that high refresh rate displays have on the
battery
life. At the time of writing, however, there is a known issue with the 90 Hz mode which can actually result in more lag
and a worse user experience. I&amp;rsquo;ve set the display back to 60 Hz for this reason. Luckily this is something that can
probably be fixed with a software update.&lt;/p&gt;
&lt;p&gt;The automatic brightness setting is quite bad, especially when compared to any iPhone. The brightness jumps around a lot
in darker conditions and it&amp;rsquo;s very irritating when driving because random street lights and cars seem to trigger the
sensor often. Again, probably something that can be fixed in software.&lt;/p&gt;
&lt;h4 id=&#34;software-stability&#34;&gt;Software stability&lt;/h4&gt;
&lt;p&gt;Overall the software is stable, but there was this one time when the phone crashed and rebooted unexpectedly. It was
triggered while playing music and opening a Snapchat notification. Nothing serious and has only happened once in an
almost two-month period, but still noteworthy.&lt;/p&gt;
&lt;h4 id=&#34;the-google-crapware&#34;&gt;The Google crapware&lt;/h4&gt;
&lt;p&gt;This isn&amp;rsquo;t really a Fairphone issue, but more of an Android gripe. I still have to mention it though. The Android 13
experience has started resembling the Windows experience. I had to toggle off countless &amp;ldquo;features&amp;rdquo; to turn off most
of the Google crapware that ships with the phone, and even then I still have to stare at the unremovable Google Search
bar at the home screen. That thing takes up so much useful screen real estate and is absolutely useless to me. It &lt;em&gt;used&lt;/em&gt;
to be removable according to some discussions I found online, but I guess Google noticed that feedback and made it a
permanent fixture on the home screen with an update. Absolutely disgusting. You &lt;em&gt;can&lt;/em&gt; work around this by using a
launcher
that&amp;rsquo;s not affected by Google. &lt;a href=&#34;https://kvaesitso.mm20.de/&#34;&gt;Kvaesitso&lt;/a&gt; is a FOSS one that seems to work well enough for
me.&lt;/p&gt;
&lt;h3 id=&#34;final-thoughts&#34;&gt;Final thoughts&lt;/h3&gt;
&lt;p&gt;Fairphone 5 is what you get when you focus on delivering a phone with long-term support and repairability in mind, all
while doing your best to treat your workers well. This does mean that you&amp;rsquo;ll be making some trade-offs.&lt;/p&gt;
&lt;p&gt;You won&amp;rsquo;t get the best performance, the best camera, or the smallest size. What you get in return is the ease of
repairability,
years of software updates with a proven track record, and the knowledge that at least those workers who assembled your
phone get paid a living wage.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t expect much from a phone and are willing to pay more for a phone that you can use for a lot longer, then
the Fairphone 5 is a good option.&lt;/p&gt;
&lt;p&gt;Can I make it to 2031 with this phone? I&amp;rsquo;ll definitely give it a try.&lt;/p&gt;
&lt;h3 id=&#34;2024-07-28-update-202-days&#34;&gt;2024-07-28 update: 202 days&lt;/h3&gt;
&lt;p&gt;My Fairphone 5 is still going strong. Here are some notes after 202 days of use.&lt;/p&gt;
&lt;h4 id=&#34;android-14&#34;&gt;Android 14&lt;/h4&gt;
&lt;p&gt;The promised Android 14 update is here and on time. The upgrade took a while to install but was boring, in a positive
way. Nothing I relied on broke and the interface looks more-or-less the same.&lt;/p&gt;
&lt;p&gt;The only aspect I&amp;rsquo;m not happy about with the Android 14 update
is &lt;a href=&#34;https://9to5google.com/2023/09/21/pixel-webcam-android-14-qpr1/&#34;&gt;the USB webcam mode feature not being present.&lt;/a&gt;
It&amp;rsquo;s possible that it&amp;rsquo;s an optional feature of Android 14, and none of the Fairphone 5 materials indicate it being
included.&lt;/p&gt;
&lt;h4 id=&#34;video-playback-issues&#34;&gt;Video playback issues&lt;/h4&gt;
&lt;p&gt;I&amp;rsquo;ve noticed some oddities regarding video playback. The video playback can be choppy on higher resolutions, especially
when I run them at 2x speed. Lower resolutions are fine. Sometimes the issues only occur with certain encodings, like
H.265, or audio tracks where I can only seem to hear certain audio channels.&lt;/p&gt;
&lt;h4 id=&#34;camera-in-action&#34;&gt;Camera in action&lt;/h4&gt;
&lt;p&gt;The camera doesn&amp;rsquo;t seem to be the best option for point-and-shoot situations where there is a lot of movement or where
the lighting conditions are bad. I&amp;rsquo;ve taken my fair share of blurry photos as a result. The included microphone also
seems lacking in real life use, especially when I accidentally cover them with my fingers.&lt;/p&gt;
&lt;p&gt;If I could pick one improvement for the next Fairphone, then it will have to be the camera. A lot of people care about
camera quality and might rule out getting a Fairphone as a result.&lt;/p&gt;
&lt;p&gt;At least with the pro mode you have a lot of control over the camera, which is great for more stationary shots.&lt;/p&gt;
&lt;h4 id=&#34;durability&#34;&gt;Durability&lt;/h4&gt;
&lt;p&gt;I have nothing bad to say about the durability here. I have dropped it a few times already and as a result I have two
small dings on the aluminium frame.&lt;/p&gt;
&lt;p&gt;The backside has also held firm. After one fall a couple of clips came loose, but I could easily pop them back in.&lt;/p&gt;
&lt;p&gt;Various oils and finger grease have an interesting effect with the transparent case, resulting in the see-through
effect being better. The grip has gotten better with time and negates any need for a separate case. The Fairphone 5
is still a big phone and not that easy to handle one-handed, but the grippy backside makes up for part of it.&lt;/p&gt;
&lt;p&gt;The display glass has a few scratches, but nothing too bad. I can&amp;rsquo;t seem to find any serious scratches on the backside.&lt;/p&gt;
&lt;h4 id=&#34;battery&#34;&gt;Battery&lt;/h4&gt;
&lt;p&gt;The battery has held up fine. I turned off the battery saving feature because of how simple it is to replace the
battery,
enabled fast charging because it&amp;rsquo;s really handy, and stopped showing the battery percentage on the notification bar to
reduce battery anxiety.&lt;/p&gt;
&lt;h4 id=&#34;5g&#34;&gt;5G&lt;/h4&gt;
&lt;p&gt;I switched mobile service providers during this time and could finally test the 5G capabilities of this phone.
Since I went with the cheapest option at the time, then the signal strength will not be as good as with other ones,
but at least I know it works in Estonia.&lt;/p&gt;
&lt;p&gt;Maximum speeds I&amp;rsquo;ve seen are around 250 Mbit/s. Could be limited by Fairphone 5, or the service provider (more likely
option).&lt;/p&gt;
&lt;h4 id=&#34;display-brightness&#34;&gt;Display brightness&lt;/h4&gt;
&lt;p&gt;At some point I got an update that seems to have improved the automatic brightness feature. It&amp;rsquo;s not as jarring as
before,
especially at low light levels. I&amp;rsquo;m not sure which update fixed it, but I haven&amp;rsquo;t noticed any annoyances with it for
a long time.&lt;/p&gt;
&lt;h3 id=&#34;2024-10-15-update-281-days&#34;&gt;2024-10-15 update: 281 days&lt;/h3&gt;
&lt;p&gt;I have one gripe with the software support on Fairphone 5.&lt;/p&gt;
&lt;p&gt;The security updates are lagging behind way too much.&lt;/p&gt;
&lt;p&gt;They&amp;rsquo;ve always come with a small delay of a few weeks, but it took over a month to get the 5th of September security
patches. These are supposed to be &lt;strong&gt;&lt;em&gt;monthly.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I finally received the 5th of September security patches today, &lt;strong&gt;15th of October.&lt;/strong&gt;
&lt;a href=&#34;https://source.android.com/docs/security/bulletin/2024-10-01&#34;&gt;There&amp;rsquo;s already a new security bulletin out with the October patches,&lt;/a&gt;
which I don&amp;rsquo;t have on my phone.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s better than no updates at all, but this does not bode well for future long-term software support.&lt;/p&gt;
&lt;h3 id=&#34;next-update-coming-whenever&#34;&gt;Next update coming whenever!&lt;/h3&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>My very first career day</title>
      <link>https://ounapuu.ee/posts/2024/02/22/career-day/</link>
      <pubDate>Thu, 22 Feb 2024 08:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/02/22/career-day/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;This post is a short overview of my experience at
a &lt;a href=&#34;https://greendice.com/the-future-green-and-digital-in-every-field/&#34;&gt;career day in Valga, Estonia, hosted with the help of GreenDice.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/22/career-day/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/22/career-day/media/cover_hud8e7f39a6a53718c04b020d97b33e675_1425776_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Kind of felt like a teacher at one point.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Kind of felt like a teacher at one point.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I&amp;rsquo;ve never spoken at a career day before nor attended one as a student, which is why I instantly agreed to going to one
when GreenDice reached out to me.&lt;/p&gt;
&lt;p&gt;Why? I never had opportunities like that as a student myself, which is why I try to do my part in making sure that
future generations have them.&lt;/p&gt;
&lt;p&gt;After agreeing to speak at the event, I had to come up with an idea for a short workshop. Coming up with an idea was
surprisingly tricky due to the set of requirements and assumptions that I could rely on. What I could rely on were
Windows 10 PC-s that had a browser, reasonably fast internet access and 45 minutes per group.
The target audience would be students from 9th grade with all sorts of backgrounds, so the workshop would have to be
accessible to everyone.&lt;/p&gt;
&lt;p&gt;I also asked my colleagues for ideas and got useful feedback: whatever you do, make sure that the students have the
chance to find and fix problems themselves.&lt;/p&gt;
&lt;p&gt;The workshop ended up
as &lt;a href=&#34;https://codepen.io/testingtonjohnston/pen/VwRVgxp&#34;&gt;a simple website hosted on CodePen, an in-browser HTML/CSS/JS editor.&lt;/a&gt;
It runs well in a browser and allows students to see the results of their changes visually. The web is also something
most of us rely on daily, so working on something relatable is likely a good idea. Hopefully this exercise would also
help demystify how websites work.&lt;/p&gt;
&lt;p&gt;Software development solves problems using software as the tool, so the idea was to have students take an
existing but slightly broken software solution and fix it together. I would give a 60 second long intro that was mainly
about what HTML, CSS and JS do on a webpage and how to recover from any issues, and then we would get going.&lt;/p&gt;
&lt;p&gt;Once everyone had opened up the editor, I asked the students what they thought about the webpage. Was it working
correctly?
Did it look good? Based on the feedback we&amp;rsquo;d tackle these issues one by one. The solutions also had to come from the
students, so in a way I was there to just listen and try out fixes that the students came up with. At the end of the
session we&amp;rsquo;d have a solution that functioned properly and looked good.&lt;/p&gt;
&lt;p&gt;The issues I planted into the website were as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the background image might have been cute, but not suitable for the site as it made reading the text difficult&lt;/li&gt;
&lt;li&gt;the previous developer left a visible comment in the middle of the page&lt;/li&gt;
&lt;li&gt;the page title is too small&lt;/li&gt;
&lt;li&gt;there is a photo of two cute cats present when you load the page
&lt;ul&gt;
&lt;li&gt;students convinced me that it was a feature, so we kept that in&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;when you hover over the button, it goes blank&lt;/li&gt;
&lt;li&gt;images of the food options are upside down&lt;/li&gt;
&lt;li&gt;one image would not load properly&lt;/li&gt;
&lt;li&gt;one food choice would have the wrong image&lt;/li&gt;
&lt;li&gt;one food choice was missing an image&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/22/career-day/media/workshop.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/22/career-day/media/workshop_hua7ef93a6fa4967737479769968ff6d36_1062662_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;440&#34;
             alt=&#34;The masterpiece that the students started working on.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The masterpiece that the students started working on.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This was just the right amount of work to fit into 45 minutes and in general the students were following along nicely.&lt;/p&gt;
&lt;p&gt;If I had to do something similar the next time, I&amp;rsquo;d definitely have someone else assisting at the other end of the
classroom. Although I tried to encourage everyone to make mistakes and refresh the page in case things went really
wrong, some students were a bit hesitant with making changes to the website.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m also thinking about doing something else with the students in the future if there are enough resources and time.
Perhaps something related to game development, robotics or AR/VR would probably be pretty cool to show off.&lt;/p&gt;
&lt;p&gt;If you have organized career days about IT yourself and have ideas to share,
then please do reach out to me, I&amp;rsquo;d be happy to hear about your ideas and experiences!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Oops, I published my drafts!</title>
      <link>https://ounapuu.ee/posts/2024/02/13/oops/</link>
      <pubDate>Tue, 13 Feb 2024 08:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/02/13/oops/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Those of you who follow my blog using the RSS feed might have seen that new, incomplete posts popped up around the time
I published my &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/&#34;&gt;FOSDEM 2024&lt;/a&gt; post.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/13/oops/media/cover.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/13/oops/media/cover_hu804a1977ae8d28447c83268102bf31b6_30815_1280x800_fit_box_3.png&#34;
             width=&#34;1055&#34;
             height=&#34;388&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Oops.&lt;/p&gt;
&lt;p&gt;I recently tried looking for an alternative to writing blog posts in IntelliJ and out of all the options I stuck to
&lt;a href=&#34;https://github.com/marktext/marktext&#34;&gt;MarkText&lt;/a&gt;. Well, it does things a bit differently and what was once a
front-matter
containing all sorts of metadata, including the one that prevents publishing a post if it is a draft, turned into a
code block, and Hugo happily served that up.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;```&lt;/code&gt; vs &lt;code&gt;---&lt;/code&gt;, there&amp;rsquo;s a difference!&lt;/p&gt;
&lt;p&gt;Anyway, sorry about that, and thanks to those who noticed and let me know.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Free tech tip:&lt;/em&gt; if you have a website with an RSS feed, do follow it yourself, you&amp;rsquo;ll catch these sorts of issues very
quickly!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>FOSDEM 2024: my experience, some notes and tech tips</title>
      <link>https://ounapuu.ee/posts/2024/02/12/fosdem-2024/</link>
      <pubDate>Mon, 12 Feb 2024 08:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2024/02/12/fosdem-2024/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I finally went to &lt;a href=&#34;https://fosdem.org/2024/&#34;&gt;FOSDEM&lt;/a&gt;. I&amp;rsquo;m sleep-deprived, completely exhausted, but incredibly excited
about the whole experience.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/cover_hu7849b20ce9ad2599a2189d7278ab15e2_485705_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;FOSDEM in one picture.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      FOSDEM in one picture.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I&amp;rsquo;ve split this post into three separate sections.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#the-conference&#34;&gt;overall notes on the conference and the city&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;less technical, but sheds light on the FOSDEM experience&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#the-stands-the-hallway-track&#34;&gt;the hallway track and stands&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the thing you probably came to FOSDEM for&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#the-talks&#34;&gt;my notes on the sessions I attended&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;plus sessions that I plan to watch in the future&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;the-conference&#34;&gt;The conference&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://fosdem.org/2024/&#34;&gt;FOSDEM (Free and Open source Software Developers&amp;rsquo; European Meeting)&lt;/a&gt; is a huge non-profit,
volunteer-organized conference that&amp;rsquo;s free of charge to attend thanks to sponsors and donations. It took place in
Brussels, Belgium at the ULB campus.&lt;/p&gt;
&lt;p&gt;I heard about this conference from a friend who went there years ago, and after hearing about the experience and the
content there I knew I had to be there at least once in my life. But then a pandemic happened, so it was sort of in the
backlog for a while.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://concise.ee&#34;&gt;My current employer&lt;/a&gt; provides a perk that allows developers to attend technical conferences. After
the FOSDEM 2024 schedule was available I put together an
initial set of talks to attend, presented it to my employer, and got a green light to attend (and
travelling/accommodation paid for).&lt;/p&gt;
&lt;h2 id=&#34;the-city&#34;&gt;The city&lt;/h2&gt;
&lt;p&gt;To make sure that I&amp;rsquo;m well-rested, I arrived the night before FOSDEM with my friend. After dropping my stuff off at the
hotel, we went to get something to eat and continued at the Delirium Beer Garden to sample some of the finest Belgian
beers. It was very crowded, but after the first beers and some walking around the many floors we found a place to chill.&lt;/p&gt;
&lt;p&gt;We ended up with sampling a meter of beer which was a selection of ten small beers, laid out on a plank. It was a nice
way to try different tastes and honestly all of them were either good or great. Cherry, raspberry and the green cactus
option were the sweetest, like some good lemonade that has the potential to cause hangovers.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/meter-of-beer.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/meter-of-beer_hu021252dd404acda00330095955c35982_2615732_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Meter of beer. It didn&amp;#39;t come pre-sampled by someone else, don&amp;#39;t worry.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Meter of beer. It didn&amp;#39;t come pre-sampled by someone else, don&amp;#39;t worry.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/cactus.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/cactus_hu44aaccd4a744f8c031de06dc81d7364a_2318858_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;This one was called &amp;#34;Cactus&amp;#34;. Didn&amp;#39;t taste like one, but certainly looked the part and was absolutely delicious.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      This one was called &amp;#34;Cactus&amp;#34;. Didn&amp;#39;t taste like one, but certainly looked the part and was absolutely delicious.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Free tech tip:&lt;/strong&gt; don&amp;rsquo;t underestimate the strength of Belgian beer. You won&amp;rsquo;t taste it, but that 8-9% alcohol per
volume really hits in the morning.&lt;/p&gt;
&lt;p&gt;Brussels is allegedly very nice, however I&amp;rsquo;m not a big fan of the way trash is handled, there are bags everywhere and
some of them are broken, leaving small pieces of trash everywhere. You could also smell the lack of public restrooms
when walking down the streets in the city center.&lt;/p&gt;
&lt;p&gt;There are some glimpses of good bicycle infrastructure, but they often don&amp;rsquo;t connect well or are simply lines on the
ground which doesn&amp;rsquo;t protect that well from cars. Based on the honks and the number of times they did not stop at
crosswalks, I can only assume that drivers in Brussels are both very aggressive and very incompetent at driving. In a
way it felt like home, especially since my hometown of Tallinn also uses red paint on some bicycle paths.&lt;/p&gt;
&lt;h2 id=&#34;the-dos-and-donts-of-fosdem&#34;&gt;The dos and don&amp;rsquo;ts of FOSDEM&lt;/h2&gt;
&lt;p&gt;I went to the ULB campus using a tram. If you&amp;rsquo;re not sure which one to take, then take the one with the most developers
headed towards it. Knowing when to get off is also easy as you can simply follow the crowd.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/tofosdem.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/tofosdem_hu7ab5f124a1bf888a54004238401d1e4a_4500232_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;To FOSDEM!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      To FOSDEM!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I arrived roughly 15 minutes before the keynote session. At that time there was plenty of room in the auditorium. By the
time the keynote started there were no seats available, so you might want to do the same and arrive a bit early.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/keynote.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/keynote_hu4dbaa62b6fbae368049d0bf32da4dce5_3202165_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;15 minutes before the keynote. The place was packed at the start of the keynote, with more people still coming in.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      15 minutes before the keynote. The place was packed at the start of the keynote, with more people still coming in.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;There were &lt;em&gt;a lot&lt;/em&gt; of people attending FOSDEM. Keep a map handy, because your next session might take place in a room
that might be tricky to find, especially as a
first-timer. &lt;a href=&#34;https://f-droid.org/en/packages/be.digitalia.fosdem/&#34;&gt;The FOSDEM Companion app&lt;/a&gt; is great for that, click
on the session you&amp;rsquo;re interested in and the room name, and you&amp;rsquo;ll have a good idea on where it&amp;rsquo;s taking place.&lt;/p&gt;
&lt;p&gt;This FOSDEM was the 24th FOSDEM to take place, which is important because the 25th one is happening next year. If you&amp;rsquo;ve
been to any previous ones and are attending next year, then bring the oldest FOSDEM shirt with you, there will be a
special photoshoot taking place.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re going to attend FOSDEM in-person, then definitely
read &lt;a href=&#34;https://petersouter.xyz/fosdem-survival-guide/&#34;&gt;the FOSDEM survival guide.&lt;/a&gt; All the points there are still
relevant and helped me out tremendously during my trip.&lt;/p&gt;
&lt;p&gt;In short:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;take an earlier bus/tram to get to FOSDEM to avoid crowds and get there on time&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;if you want to guarantee getting a seat in a session, consider joining an earlier session in the same room&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you might also learn something about an area you had no clue about, which is a great bonus!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;don&amp;rsquo;t underestimate the strength of Belgian beer&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;trust me on that one&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;food lines can get very long, bring some light snacks and plenty of water with you&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;some places had water bottle refilling stations, such as the U building, but I had a hard time finding one in
others&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;there was plenty of &lt;a href=&#34;https://en.wikipedia.org/wiki/Club-Mate&#34;&gt;Club-Mate for sale&lt;/a&gt; and based on the number of empty
bottles it was a crowd favourite&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There were 879 events taking place at FOSDEM 2024. That is a lot of talks to go through. My recommendation is to take an
evening at least a week from the event and go through the list of talks starting with main tracks and lightning talks,
and following it up with devrooms that align with your interests.&lt;/p&gt;
&lt;p&gt;If you do it in the &lt;a href=&#34;https://f-droid.org/packages/be.digitalia.fosdem/&#34;&gt;FOSDEM Companion&lt;/a&gt; app, then you can bookmark
them and view your initial schedule. The app will show you where there are overlapping sessions by coloring the
start/end times red. The app can also show you if a room is too full to attend. Don&amp;rsquo;t forget that switching rooms might
take about 15 minutes in some cases due to the size of the campus, so leave some room for walking in your schedule.&lt;/p&gt;
&lt;p&gt;In my experience, the most enjoyable FOSDEM experience is one where you attend at most 2-3 tracks during the day and
leave plenty of time for eating, resting and visiting all the stands. It&amp;rsquo;s going to be exhausting either way, so you
might as well make the most of the FOSDEM live experience. Talks are recorded and will be published soon after the event
so you&amp;rsquo;re not going to miss much if you take things easy (unless there are issues capturing the session).&lt;/p&gt;
&lt;p&gt;Here are a few simple guidelines that I recommend following so that listening to talks in FOSDEM live is a great
experience for both you and those around you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;try to get to your next talk about 15 minutes before it starts, that allows you to queue up early and not miss your
session&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;don&amp;rsquo;t talk or whisper during the talk and the Q&amp;amp;A session with the speakers&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;there were so many cases where the speaker could not even hear the question being asked, which is disrespectful
to the speaker and the audience&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;if you really need to leave early, then be as quiet as possible&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the old desks at the seats make a lot of noise if you carelessly put them back up-right&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;if you really didn&amp;rsquo;t have time for a snack, then don&amp;rsquo;t bring something that makes a lot of noise or smells strongly to
the auditorium&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to get a FOSDEM t-shirt or hoodie in your favourite size, then the first half of the first day is the ideal
opportunity for that. At FOSDEM 2024 the t-shirts cost 25 EUR, hoodies cost 50 EUR.&lt;/p&gt;
&lt;p&gt;Most payments you&amp;rsquo;ll make will likely be with contactless payments via your card or phone, but definitely bring some
cash with you in smaller denominations as there were a few cases at the start of the conference where the payment
systems were not working properly, likely due to network issues. Somewhere between 100-200 EUR will likely cover
anything you&amp;rsquo;d need at the conference itself.&lt;/p&gt;
&lt;p&gt;With the food trucks I made an observation: the lines were longer for the more expensive and higher quality food
options. The cheaper ones are okay and are generally quite fast to get. The more &amp;ldquo;premium&amp;rdquo; trucks were not much slower
though so waiting in line might pay off.&lt;/p&gt;
&lt;p&gt;During the keynote it was emphasized that some of the attendees will get sick as a result of this conference. They call
it &lt;em&gt;the FOSDEM flu&lt;/em&gt;. I guess it&amp;rsquo;s a thing that happens at many big conferences, but in any case if you do visit FOSDEM
then please don&amp;rsquo;t do it while sick. If you fall sick at the event, then rest at the hotel and watch it on a livestream
instead. There&amp;rsquo;s always next year!&lt;/p&gt;
&lt;p&gt;One pattern I noticed is that quite a few talks were used as a great marketing tool for highlighting issues that the
speaker would like some help with solving. What better way to improve FOSS than to involve people who might not even be
aware of the issues but have the technical know-how to help?&lt;/p&gt;
&lt;h1 id=&#34;the-stands-the-hallway-track&#34;&gt;The stands (the hallway track)&lt;/h1&gt;
&lt;p&gt;One of the highlights of the FOSDEM experience are the various stands in different buildings in the campus. You&amp;rsquo;ll find
all sorts of different projects being represented, ranging from big, established ones (Fedora, Debian, Nextcloud,
PostgreSQL etc.) all the way down to small projects and organizations (postmarketOS, Ubuntu Touch, CalyxOS and many
more).&lt;/p&gt;
&lt;p&gt;Most stands offer free merch, such as stickers. A lot of stands sell merch, most accept card payments, some accept
payments via online credit card payments, and a few take cash only.&lt;/p&gt;
&lt;p&gt;I visited most booths at the event and spoke briefly with many of the people present there. If you&amp;rsquo;re just curious about
what&amp;rsquo;s on display and have no background knowledge, then don&amp;rsquo;t be afraid to ask questions, no matter how simple you
think they are!&lt;/p&gt;
&lt;p&gt;Here are my notes on the stands that I found the most interesting&lt;/p&gt;
&lt;h2 id=&#34;gnu-radiohttpswwwgnuradioorg&#34;&gt;&lt;a href=&#34;https://www.gnuradio.org/&#34;&gt;GNU Radio&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This stand had a simple and effective demo of a device monitoring the 2.4 GHz spectrum, which is also where older Wi-Fi
standards operate in. The person hosting the booth was happy to explain what was going on, even bringing out details
such as signals bouncing around the room and how they show up on the spectrum visualizer.&lt;/p&gt;
&lt;p&gt;Turns out that you can achieve this by putting together two blocks in a visual editor in GNU Radio, and this is why it&amp;rsquo;s
on my todo list now.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;media/gnuradio.mp4&#34;&gt;There&amp;rsquo;s also a video clip of the visualization running.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/gnuradio.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/gnuradio_hu7849b20ce9ad2599a2189d7278ab15e2_787043_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;721&#34;
             alt=&#34;GNU Radio showcasing its visualization prowess.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      GNU Radio showcasing its visualization prowess.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h2 id=&#34;minetesthttpswwwminetestnet&#34;&gt;&lt;a href=&#34;https://www.minetest.net/&#34;&gt;Minetest&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Minetest is an open source game engine and had a booth present at the event. They had the game running on a laptop. A
Steam Deck with the official dock was also present. I&amp;rsquo;ve previously heard about this project many years ago, at that
time it was a simple Minecraft-like game but a bit too basic in my opinion. The demo at the booth reminded me of
something more polished and yet familiar enough to remind me of Minecraft 1.8 Beta days.&lt;/p&gt;
&lt;p&gt;Turns out that over the years the game engine has seen a lot of development and there are many creators who have mades
games based on this engine. I was also delighted and surprised to hear that Minetest has been used in educational
projects.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/minetest.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/minetest_hu832b077c1ba8878c10568e18ff8343cb_3779162_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Minetest running on a laptop, with a booklet showcasing some games made on it in front.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Minetest running on a laptop, with a booklet showcasing some games made on it in front.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This was a nice and colorful corner of the event, and now I&amp;rsquo;m interested in giving Minetest a try again.&lt;/p&gt;
&lt;h2 id=&#34;ubuntu-touchhttpsubuntu-touchio&#34;&gt;&lt;a href=&#34;https://ubuntu-touch.io/&#34;&gt;Ubuntu Touch&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ah, Ubuntu Touch. I believe the first time I heard about Ubuntu Touch was when they introduced the convergence idea.
Your phone is the only computer you have, use it as a phone when out and about, and connect it to a dock when at home to
get a desktop experience.&lt;/p&gt;
&lt;p&gt;The booth had a wide variety of devices present, including Fairphone 4 and 5 (this isn&amp;rsquo;t the first time you&amp;rsquo;ll see these
models mentioned). At the booth were people who actually daily drive Ubuntu Touch, and one person I talked to expressed
their interest in porting Ubuntu Touch to a Samsung foldable phone.&lt;/p&gt;
&lt;p&gt;Ubuntu Touch isn&amp;rsquo;t probably something I&amp;rsquo;d run full-time, but perhaps it&amp;rsquo;s time to give it a go again. My Nexus 5 still
has the boot logo that Ubuntu Touch installer creates, so that will serve as a reminder for me to check it out.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/ubuntu-touch.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/ubuntu-touch_hud9380aa0b48bafdbd03b71b74b34e828_3111448_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Ubuntu Touch mascot looking over the phones.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Ubuntu Touch mascot looking over the phones.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h2 id=&#34;sailfishoshttpssailfishosorg&#34;&gt;&lt;a href=&#34;https://sailfishos.org/&#34;&gt;SailfishOS&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I knew of SailfishOS, but had never tried a device out with that OS. At FOSDEM I finally had the chance to do it, and
out of all the custom OS options that aren&amp;rsquo;t Android-based, this one was the one with the smoothest and most polished
experience. When speaking to the person hosting the booth, I also learned that it is possible to even run Android apps
on it, although after doing some research on their website it seems like it&amp;rsquo;s a feature that you need to pay for.&lt;/p&gt;
&lt;p&gt;The phones laid out on the booth were various Sony Xperia devices. I&amp;rsquo;ve not used or seen those devices, but they felt
really great in hand and were super small compared to modern phones. Seems like these models are also the ones that have
got the most polish and support, based on the materials on the website and my two minutes of fiddling with them.&lt;/p&gt;
&lt;p&gt;Out of all the non-Android alternative operating systems, this one has the most potential to be a daily driver. The
person at the booth uses theirs as a daily driver so there must be potential on it. The corporate backing is likely what
allows the OS to feel usable and hopefully that will be enough to keep this project alive.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/sailfishos.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/sailfishos_hu596441043472fcd255d36606932f4049_2955724_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Various Sony Xperia phones running SailfishOS.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Various Sony Xperia phones running SailfishOS.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h2 id=&#34;droidianhttpsdroidianorg-and-postmarketoshttpspostmarketosorg&#34;&gt;&lt;a href=&#34;https://droidian.org/&#34;&gt;Droidian&lt;/a&gt; and &lt;a href=&#34;https://postmarketos.org/&#34;&gt;postmarketOS&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There were multiple booths where you could try out various versions of Linux-based phones that aren&amp;rsquo;t Android.&lt;/p&gt;
&lt;p&gt;The phones were all sorts of older and newer devices that originally shipped with Android. The experience and support
was a combination of the hardware and the state of the mobile Linux distribution and UI. Some were quite okay, some were
rough, and some were just slow due to the age of the phone itself.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/droidian.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/droidian_hu72649ef447c4fb8bdf51ecaa90480738_3184444_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Plain old Linux? On my phone? It&amp;#39;s more likely than you think!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Plain old Linux? On my phone? It&amp;#39;s more likely than you think!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I really appreciate these types of efforts to give new life to old devices. Most Android devices lose software support
after a few years, but with projects that basically put Linux on a phone you can still find ways to make use of the
devices. They might not be stable enough yet to be considered a reliable daily driver as a smartphone, but you can do
all sorts of cool things with them, like running web servers or hosting encrypted remote backups of critical data.&lt;/p&gt;
&lt;p&gt;One of the booths also had a Pinephone in a keyboard dock, which was neat as I&amp;rsquo;ve never seen a Pinephone in real life,
nor had the opportunity to try one with a keyboard. It wasn&amp;rsquo;t ergonomic trying to do it with two hands, but maybe I was
holding it wrong.&lt;/p&gt;
&lt;p&gt;It was interesting to see GNOME or KDE-based user interfaces on phones. The gestures and navigating the UI was a bit
rough since there were slight differences on each OS. Still cool though!&lt;/p&gt;
&lt;p&gt;Oh, and there was a visitor who had some cool gear with them. Other than a GPD portable computer, they also had a
mechanical keyboard with a wide display attached to it.
They tried connecting it to a phone that was on display at the booth, and it recognized it as a second display on the
first try. The model of the keyboard is &lt;em&gt;Ficihp K2&lt;/em&gt; in case you&amp;rsquo;re interested in similar gear.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/dockeddroidian.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/dockeddroidian_hu0b57ff4f22c115e2d3388ccba4f4e676_2650852_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;How to take notes in the coolest way possible.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      How to take notes in the coolest way possible.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h2 id=&#34;calyxoshttpscalyxosorg&#34;&gt;&lt;a href=&#34;https://calyxos.org/&#34;&gt;CalyxOS&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I had never heard of this Android-based OS before, but there they were, showcasing it on a freaking Fairphone 5 (and
also some other phones)!&lt;/p&gt;
&lt;p&gt;The people at the booth were very friendly and helpful, answering any of the questions I had about app compatibility and
the OS itself.&lt;/p&gt;
&lt;p&gt;The project seems to be backed by an US-based non-profit, &lt;a href=&#34;https://calyxinstitute.org/&#34;&gt;the Calyx Institute.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a bit wary about using this on my daily driver Fairphone 5 running Android 13 as I just got it, but if I had a spare
one for testing
I&amp;rsquo;d definitely check out how well it fares as a privacy-focused OS. The potential is there and hopefully CalyxOS will
have a chance to prove itself as a long-term and stable project.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/calyxos.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/calyxos_hu39a404366cc5c1dca967c674d4df7e88_1302941_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1143&#34;
             height=&#34;800&#34;
             alt=&#34;Totally forgot to take a photo of phones running CalyxOS as I was too busy giving the OS a try, but here&amp;#39;s a hat!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Totally forgot to take a photo of phones running CalyxOS as I was too busy giving the OS a try, but here&amp;#39;s a hat!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Side note: I&amp;rsquo;m planning on covering my Fairphone 5 experience as a separate post in the future, but one
takeaway from FOSDEM is that I&amp;rsquo;ve accidentally picked a tinkerer&amp;rsquo;s dream phone.&lt;/p&gt;
&lt;h2 id=&#34;automotive-grade-linuxhttpswwwautomotivelinuxorg&#34;&gt;&lt;a href=&#34;https://www.automotivelinux.org/&#34;&gt;Automotive Grade Linux&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Like with many projects, I had never heard about this one before FOSDEM.&lt;/p&gt;
&lt;p&gt;This booth was displaying various interfaces designed for cars. There was a demo vehicle dashboard which was simulating
a moving car. Next to it were two bigger displays that had infotainment and control panel functionality with all sorts
of buttons on it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/automotivelinux.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/automotivelinux_hu56a1e5ea21504e18807957d0c877fdf5_4340882_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Yup, that&amp;#39;s RISC-V!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Yup, that&amp;#39;s RISC-V!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Between these two setups was a small control board with 9 keys and two dials. Some of the buttons popped up warning
lights on the digital dashboard, such as passenger airbag failure. Other buttons had various stickers on them: HTML5, Qt
and Flutter. Turns out that the intotainment display demo was built on top of containers and pressing a key would stop
the running one and start up a different one based on whichever button you clicked.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/automotivelinuxdash.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/automotivelinuxdash_hu9e86079445646908bb2b5f47c7a5ae8e_3232342_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Unlike with my actual car, with this one you could turn the warning lights off without having to spend a lot of money!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Unlike with my actual car, with this one you could turn the warning lights off without having to spend a lot of money!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;One of the infotainment displays was running off of a Raspberry Pi, which was cool. The rest of the displays were
running off of a stack of various bits of hardware.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/automotivelinuxinfotainment.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/automotivelinuxinfotainment_hu267ac6fe5af642731ee88c1cf172ae8a_3811961_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Dashboard and infotainment setup, with the container switching buttons between them.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Dashboard and infotainment setup, with the container switching buttons between them.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Based on the marketing materials at the booth it seems like automotive grade Linux is also collaborating with some big
names in the auto industry, which is neat!&lt;/p&gt;
&lt;h2 id=&#34;pine64httpspine64org&#34;&gt;&lt;a href=&#34;https://pine64.org/&#34;&gt;Pine64&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve occasionally checked out Pine64 progress and devices online, and at FOSDEM I finally got around to play around with
some of them.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/pine64.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/pine64_huf85406092acd00edde211bd515142fb7_3735501_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;So much tech to play with!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      So much tech to play with!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I first checked out the smartwatch named &lt;a href=&#34;https://wiki.pine64.org/wiki/PineTime&#34;&gt;PineTime&lt;/a&gt;. It comes in multiple
versions, one for daily use (the sealed model),
and one which is bulkier but easier to open and flash in case you mess up your firmware. I&amp;rsquo;m currently using a &lt;a href=&#34;https://www.casio.com/us/watches/casio/product.F-105W-1A/&#34;&gt;Casio
F105W&lt;/a&gt; and haven&amp;rsquo;t been a big fan of smartwatches, but the
hardware on the sealed model felt premium and something I&amp;rsquo;d
pay good money for. The functionality was basic, but it had everything you&amp;rsquo;d want from a basic watch, plus a heart rate
monitor and even a Pong-like game. I&amp;rsquo;m seriously considering getting one now.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/pinetime.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/pinetime_hu3ad8e2527eaacd40f83b199c7d6f5a51_2908193_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Do you know what time it is?&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Do you know what time it is?
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;a href=&#34;https://wiki.pine64.org/wiki/PineTab-V&#34;&gt;The PineTab-V&lt;/a&gt;, a RISC-V based tablet, was also present and running KDE Plasma.
The experience was unstable at the time
as I had the settings app crash on me once, but that&amp;rsquo;s likely down to driver support not being quite there yet. That&amp;rsquo;s
OK, since they advertise the device as an experimental device right now.&lt;/p&gt;
&lt;p&gt;Something I wasn&amp;rsquo;t even aware of was the &lt;a href=&#34;https://wiki.pine64.org/wiki/PineNote&#34;&gt;PineNote&lt;/a&gt;, a Linux tablet with an e-ink
display. It was running an actual GNOME desktop on it so the interface was instantly familiar to me. As a test case I
opened up my blog on it and it worked just fine. Scrolling the
page to read the blog was a bit clunky due to the low refresh rate that an e-ink display has, that&amp;rsquo;s just a limitation
of the technology. &lt;a href=&#34;media/pinenote-scrolling.mp4&#34;&gt;Here&amp;rsquo;s a clip demonstrating it.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/pinenote.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/pinenote_hu76e2f6912f9f137ac4aa788316aca27d_3768173_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Shameless plug, I know.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Shameless plug, I know.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;While I was checking out the hardware, there was also a demonstration going on of the capabilities of
the &lt;a href=&#34;https://wiki.pine64.org/wiki/Pinecil&#34;&gt;Pinecil&lt;/a&gt;, a
small soldering iron that&amp;rsquo;s really cool and gets quite hot. I&amp;rsquo;m a bit surprised that it didn&amp;rsquo;t trigger the smoke alarm
that was a few meters away from the booth.&lt;/p&gt;
&lt;h2 id=&#34;bytenight-2024--hackerspace-brussels-hsbxl&#34;&gt;Bytenight 2024 @ Hackerspace Brussels (HSBXL)&lt;/h2&gt;
&lt;p&gt;One of the many FOSDEM fringe events was a party hosted at &lt;a href=&#34;https://hsbxl.be/&#34;&gt;Hackerspace Brussels&lt;/a&gt;, a hackerspace
located in an old industrial building. The event had DJ-s playing music, a t-shirt making booth, a fancy projector
setup, a room with SuperTuxKart on a big screen and a small Raspberry Pi-based mini arcade box, and the room where I
assume work gets done since it had all the electronics equipment and workspaces.&lt;/p&gt;
&lt;p&gt;The projector setup used in the party area was simple but elegant. It was positioned in a way that allowed various
surfaces to reflect the video at different levels, making it all feel three-dimensional.&lt;/p&gt;
&lt;p&gt;I loved how one of the hackerspace members was excited to show off the insides of the mini arcade cabinet and explain
the build process of it, including the design of the physical components. It&amp;rsquo;s cool seeing people get enthusiastic about
something they&amp;rsquo;ve built with their own hands.&lt;/p&gt;
&lt;p&gt;At one point me and my friend ended up speaking to a group of people, one of whom was showcasing their Tamagochi and
offering it to others to interact with. I learned from them that there exists a self-hostable Snapchat-like app
called &lt;a href=&#34;https://piqchat.net/&#34;&gt;Piqchat.&lt;/a&gt; My friend gave it a go on their instance and after fiddling with the sign-up
process (we were at least two beers in at this point) he got it working.&lt;/p&gt;
&lt;p&gt;We arrived around 20:45ish at the location, and at that point the dancefloor was a bit empty, but after 23:00ish it
looked like a proper party. I wasn&amp;rsquo;t in the mood to party much because there was a whole second day of FOSDEM left and I
was already exhausted.&lt;/p&gt;
&lt;p&gt;Interesting location, interesting vibe and probably a great place for raves.&lt;/p&gt;
&lt;h2 id=&#34;and-the-rest&#34;&gt;And the rest&amp;hellip;&lt;/h2&gt;
&lt;p&gt;Here are some quick notes on other booths that I need to throw out there so that I don&amp;rsquo;t end up forgetting them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;KDE&lt;/strong&gt;: other than stickers or merch, they had small handmade plushies of the project mascot Konqi. I&amp;rsquo;m still a bit sad
that I didn&amp;rsquo;t get one at the first opportunity because they were all sold out during the first day.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/kde-gnome.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/kde-gnome_huf96253bf760ae4811522fe30f5ca4d08_3082137_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Loved the fact that they were next to the GNOME booth. :)&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Loved the fact that they were next to the GNOME booth. :)
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;: I got to play in a game of Kahoot and while I crashed and burned in the final standings, I learned a lot
about the PostgreSQL project details in the process. They also had cute hand-made (in Germany of all places!) elephant
plushes in PostgreSQL-blue so of course I bought one. Fun fact: the ones sold there were version 2 of the plush which
has the nice feature of not falling over on a flat surface. See, making PostgreSQL stable isn&amp;rsquo;t that hard!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/postgresql.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/postgresql_hu61d486b4e62f4789eba813aba70ccc1c_1862913_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;It&amp;#39;s clear that I don&amp;#39;t know how to take selfies, and the poor low-light performance of the Fairphone 5 camera certainly
didn&amp;#39;t help.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      It&amp;#39;s clear that I don&amp;#39;t know how to take selfies, and the poor low-light performance of the Fairphone 5 camera certainly
didn&amp;#39;t help.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Firefox cookies:&lt;/strong&gt; Mozilla handed out free cookies from a pink food truck. No cookie banner included, but I guess it&amp;rsquo;s
a nice way to remind everyone that Mozilla Firefox still exists. It blocks ads on desktop PC-s and Android, use it or
lose it!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/cookies.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/cookies_hu177e66cf379866146927a27bc0a7d114_4489449_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;First-party cookies!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      First-party cookies!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;ISRG and LetsEncrypt:&lt;/strong&gt; &lt;em&gt;I went to FOSDEM and all I got was this free cert.&lt;/em&gt; The person at the booth was
also handing them out in large quantities, just like Let&amp;rsquo;s Encrypt servers.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/letsencrypt.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/letsencrypt_hu3a05d6d01e5c0ca30e177faaef86793a_4328313_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Brilliant!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Brilliant!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://f-droid.org/en/packages/com.enjoyingfoss.feeel/&#34;&gt;Feeel&lt;/a&gt;
and &lt;a href=&#34;https://f-droid.org/en/packages/de.wger.flutter/&#34;&gt;wger&lt;/a&gt;:&lt;/strong&gt; I know that it doesn&amp;rsquo;t look like it (yet) but I do go to
the gym regularly and my current workflow
involves keeping notes in a Google Sheets file. I never knew that a FOSS solution exists for tracking my workouts. I
need to try it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FOSSASIA&lt;/strong&gt;: these lovely people were selling LED badges that you can program easily with
an &lt;a href=&#34;https://f-droid.org/en/packages/org.fossasia.badgemagic/&#34;&gt;Android app called Badge Magic.&lt;/a&gt; This was 100% nerd bait
and ranked high on the &amp;ldquo;I don&amp;rsquo;t need it but it&amp;rsquo;s so cool that I need to get one&amp;rdquo;. Simple. Elegant. Awesome!
Oh, and due to the transfers being Bluetooth Low-Energy powered, I think someone accidentally sent their badge contents
to my
device. Whoops. &lt;a href=&#34;media/badgemagic.mp4&#34;&gt;Here&amp;rsquo;s mine in action!&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/fossasia.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/fossasia_hu5b589479569ec88c214176e7b0528b0b_4576726_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;A lot of people wore these over the campus, including myself.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      A lot of people wore these over the campus, including myself.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Jenkins:&lt;/strong&gt; they had &lt;em&gt;Roundernetes&lt;/em&gt;, a Kubernetes cluster made of lots of Raspberry Pi-s, in a round frame. I&amp;rsquo;d love to
build something similar one day, just because it&amp;rsquo;s neat!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/roundernetes.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/roundernetes_hufe4ee523c444409cfdc8dbf2f9caf02f_4487903_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;They certainly know how to nerd-snipe someone!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      They certainly know how to nerd-snipe someone!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://checkmk.com/&#34;&gt;Checkmk&lt;/a&gt;&lt;/strong&gt;: it was the first time I heard about this monitoring solution, but after hearing
about their background and
their approach to building Checkmk that involved a lot of cooperation with customers, I&amp;rsquo;ll need to give this a proper
look. Oh, and they had an air quality sensor hooked up to the booth, the results were OK when I visited the booth.&lt;/p&gt;
&lt;h1 id=&#34;the-talks&#34;&gt;The talks&lt;/h1&gt;
&lt;p&gt;You&amp;rsquo;re probably coming to FOSDEM for the vibe, the people and all the fun stands, but there are also hundreds of talks
that you can choose to attend.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/curl.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/curl_hu10759f8c9c0ea1b45afdcee82cb619be_3182389_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Hey, it&amp;#39;s that guy from curl!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Hey, it&amp;#39;s that guy from curl!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;There were many talks covering interesting topics, but I could only attend a relatively small number of those live.
There&amp;rsquo;s simply too much interesting content out there.&lt;/p&gt;
&lt;p&gt;Here are my notes on the ones I attended live.&lt;/p&gt;
&lt;h2 id=&#34;where-the--are-the-packets-goinghttpsfosdemorg2024scheduleeventfosdem-2024-2929--where-the-are-the-packets-going-&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2929--where-the-are-the-packets-going-/&#34;&gt;&amp;ldquo;Where the !?*! are the packets going?&amp;rdquo;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This was one of those sessions I decided to sit in on to catch one I really wanted to attend and it was a good decision
as the room was packed.&lt;/p&gt;
&lt;p&gt;This talk gave a quick overview of a modified version of &lt;code&gt;traceroute&lt;/code&gt; by Catchpoint and the enhancements they made to
it, involving QUIC support, functionality that bypasses firewalls and some shenanigans in Linux setups on Azure (the
Microsoft cloud services platform).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 6/10&lt;/strong&gt;, it was alright.&lt;/p&gt;
&lt;h2 id=&#34;broom-not-included-curling-the-modern-wayhttpsfosdemorg2024scheduleeventfosdem-2024-1909-broom-not-included-curling-the-modern-way&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1909-broom-not-included-curling-the-modern-way/&#34;&gt;Broom not included: curling the modern way&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This talk was originally meant for a 40 minute session but due to limitations of the FOSDEM schedule, 20 minutes was all
he got.&lt;/p&gt;
&lt;p&gt;This session was a rapid-fire presentation of curl development and all sorts of things that you could do with it. I&amp;rsquo;ve
used &lt;code&gt;curl&lt;/code&gt; so far for simple requests, but after this session I know that you can do all sorts of shenanigans,
including parallel transfers and a lot of JSON mangling. &lt;em&gt;JSON, JSON, JSON!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I also learned about &lt;a href=&#34;https://curl.se/trurl/&#34;&gt;trurl&lt;/a&gt; which is handy for working with URL-s. Parse them, modify them, do
whatever you desire without re-implementing all that complexity yourself. Neat!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 10/10&lt;/strong&gt;, short, amusing and yet useful listen about curl, looking forward to a longer version in
the
future!&lt;/p&gt;
&lt;h2 id=&#34;improving-ipv6-only-experience-on-linuxhttpsfosdemorg2024scheduleeventfosdem-2024-1798-improving-ipv6-only-experience-on-linux&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1798-improving-ipv6-only-experience-on-linux/&#34;&gt;Improving IPv6-only experience on Linux&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I initially didn&amp;rsquo;t plan on sitting in for this one, but since one of the WiFi networks hosted by FOSDEM itself was IPv6
only and I&amp;rsquo;m plagued by my ISP only working over IPv4 (&lt;em&gt;old-man-yells-at-Elisa.jpg&lt;/em&gt;), I decided to listen to this one.&lt;/p&gt;
&lt;p&gt;The speaker gave an overview of the situation with IPv6, which operating systems handle it well and which do not, and
how you can improve the IPv6 compatibility on your own machine.&lt;/p&gt;
&lt;p&gt;In short: Android works, Linux/Windows mostly work, but all the Internet of Things garbage (smart &lt;em&gt;everything&lt;/em&gt;) is
something you should simply avoid at all costs since those hastily thrown together pieces of crap only work over IPv4.&lt;/p&gt;
&lt;p&gt;The rest of the session covered possible solutions for making sure that IPv4 and IPv6 both work nicely on your machine.
Turns out that there really isn&amp;rsquo;t one perfect solution for this problem, especially since you can&amp;rsquo;t just ignore that
part of the Internet that doesn&amp;rsquo;t support IPv6, yet.&lt;/p&gt;
&lt;p&gt;This talk was also a way to ask for help from the FOSS community to help come up with a solution. If you&amp;rsquo;re into this
topic, then go ahead and reach out!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating&lt;/em&gt;: 8/10&lt;/strong&gt;, learned a lot about IPv6 support and what&amp;rsquo;s going on in this area.&lt;/p&gt;
&lt;h2 id=&#34;an-engineers-guide-to-linux-kernel-upgradeshttpsfosdemorg2024scheduleeventfosdem-2024-3370-an-engineer-s-guide-to-linux-kernel-upgrades&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3370-an-engineer-s-guide-to-linux-kernel-upgrades/&#34;&gt;An engineer&amp;rsquo;s guide to Linux Kernel upgrades&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Great presentation that included useful recommendations for rolling out Linux kernel upgrades and why you don&amp;rsquo;t want to
wait a long time to upgrade, backed up with data and nice visualisations, and memes.&lt;/p&gt;
&lt;p&gt;Although this talk was about Linux kernel upgrades, the main idea is very much applicable in software development as
well. If you don&amp;rsquo;t release software as often as possible but keep making changes at the same pace, then your change
delta (or
the number of pending changes) increases, and so does the risk of something going wrong, either by releasing a buggy
change that&amp;rsquo;s now harder to troubleshoot due to the large number of changes deployed, or not releasing new versions of
software with security patches.&lt;/p&gt;
&lt;p&gt;This talk also explained the Linux kernel development workflow, the meaning behind version numbers (it&amp;rsquo;s not
semantic versioning!), and how security patches get merged into &amp;ldquo;long-term support&amp;rdquo; versions.&lt;/p&gt;
&lt;p&gt;In short: update often, deploy often, measure things.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating&lt;/em&gt;: 9/10&lt;/strong&gt;, great listening for software developers and Linux newbies alike.&lt;/p&gt;
&lt;h2 id=&#34;soft-reboot-keep-your-containers-running-while-your-image-based-linux-host-gets-updatedhttpsfosdemorg2024scheduleeventfosdem-2024-3282-soft-reboot-keep-your-containers-running-while-your-image-based-linux-host-gets-updated&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3282-soft-reboot-keep-your-containers-running-while-your-image-based-linux-host-gets-updated/&#34;&gt;Soft Reboot: keep your containers running while your image-based Linux host gets updated&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My day job uses Kubernetes for running our services. Have some pods (containers) running on a host that you need to
update? No problem, Kubernetes starts new pods on another host, directs traffic to those and you can now update that
host.&lt;/p&gt;
&lt;p&gt;This talk shows another way of updating your host operating system and apparently this functionality is already present
on most modern Linux systems that run &lt;code&gt;systemd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In short, if your containers meet certain criteria, then you can utilize this soft reboot functionality to update
and reboot your base system without any noticeable interruptions to your containers. Your
kernel will still be the same version, so keep that in mind. And yes, the irony of this solution is not lost to me after
listening
to &lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3370-an-engineer-s-guide-to-linux-kernel-upgrades/&#34;&gt;the talk that emphasized the importance of updating your kernel as often as possible.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Although the customizations behind it are quite simple if you follow the guidelines, this talk still felt like magic to
me. I guess that only means that I should look into it further.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 9/10&lt;/strong&gt;, interesting concept that has real world usages at big tech companies and yet felt like
something I could understand with my small brain.&lt;/p&gt;
&lt;h2 id=&#34;juggling-with-uids-and-gids-rootless-container-deployment-with-ansiblehttpsfosdemorg2024scheduleeventfosdem-2024-3412-juggling-with-uids-and-gids-rootless-container-deployment-with-ansible&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3412-juggling-with-uids-and-gids-rootless-container-deployment-with-ansible/&#34;&gt;Juggling with UIDs and GIDs: rootless container deployment with Ansible&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Short but sweet talk about how the speaker manages their home server, including a neat workaround that most people who
have worked with containers have faced: permission issues between containers and the host.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m actually struggling with a similar issue right now in my home server setup and I&amp;rsquo;ll definitely have to reference
this talk once I get around to trying to fix it.&lt;/p&gt;
&lt;p&gt;It was kind of odd how relatable this talk was to me: it&amp;rsquo;s related to self-hosting, the speaker has a home server
running, they mentioned &lt;a href=&#34;https://www.linuxserver.io/&#34;&gt;linuxserver.io&lt;/a&gt; images, and they care about running containers
rootless. Even my friend made a
note about the similarities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 10/10&lt;/strong&gt;, incredibly relatable and useful to me, a self-hosting enthusiast.&lt;/p&gt;
&lt;h2 id=&#34;orchestrating-ebpf-applications-in-kubernetes-and-fedorahttpsfosdemorg2024scheduleeventfosdem-2024-1745-orchestrating-ebpf-applications-in-kubernetes-and-fedora&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1745-orchestrating-ebpf-applications-in-kubernetes-and-fedora/&#34;&gt;Orchestrating eBPF Applications in Kubernetes and Fedora&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This was another session that I decided to attend because hey, I&amp;rsquo;ve already got a good seat and the session after that
is in the same room.&lt;/p&gt;
&lt;p&gt;I had little knowledge about &lt;a href=&#34;https://ebpf.io/&#34;&gt;eBPF&lt;/a&gt; before or what it does, but after listening to this one I have a
rough idea about it. In short: small programs in the kernel that are used for networking, security and
monitoring purposes.&lt;/p&gt;
&lt;p&gt;This talk shed some light on deploying eBPF applications with &lt;code&gt;bpfman&lt;/code&gt; and nuances around it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 6/10&lt;/strong&gt;, flew a bit over my head due to my knowledge gaps in eBPF, but it did raise my awareness
about this area.&lt;/p&gt;
&lt;h2 id=&#34;lift-and-shift-modernising-a-legacy-lamp-application-with-systemd-nspawnhttpsfosdemorg2024scheduleeventfosdem-2024-3008-lift-and-shift-modernising-a-legacy-lamp-application-with-systemd-nspawn&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3008-lift-and-shift-modernising-a-legacy-lamp-application-with-systemd-nspawn/&#34;&gt;Lift and shift: Modernising a legacy LAMP application with systemd-nspawn&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;During my self-hosting adventure I&amp;rsquo;ve used various setups, including running containers with &lt;code&gt;systemd-nspawn&lt;/code&gt;. If you
don&amp;rsquo;t know what that involves, then it&amp;rsquo;s pretty much a container that acts more like a virtual machine when you interact
with it. I have also worked with out of date software projects so this one felt like it could be relevant to my
interests.&lt;/p&gt;
&lt;p&gt;This talk was a quick overview of the troubles that the speaker faced with a horrifically out of date software stack
that was still actively used at a school.&lt;/p&gt;
&lt;p&gt;The steps taken involved securing the system against basic attacks, then working out how to containerize it and run it,
including
ripping apart old Debian Docker images and having to work around such limitations as &amp;ldquo;there&amp;rsquo;s no systemd&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Great reference for anyone facing similar situations. Wish the speaker had more time to go into the whole other category
of issues related to the software stack itself, including the MySQL related issues they faced during this migration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 8/10&lt;/strong&gt;, great topic and useful tips, would have loved more horror stories and pictures.&lt;/p&gt;
&lt;h2 id=&#34;beyond-joins-and-indexeshttpsfosdemorg2024scheduleeventfosdem-2024-3598-beyond-joins-and-indexes&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3598-beyond-joins-and-indexes/&#34;&gt;Beyond Joins and Indexes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This session was a sequel to a previous talk that the presenter gave so I was worried a bit about having knowledge gaps,
but luckily that wasn&amp;rsquo;t that big of a problem.&lt;/p&gt;
&lt;p&gt;This talk covered some common PostgreSQL queries and various operations that go on behind the scenes, supported by
illustrations on how exactly PostgreSQL performs those operations.&lt;/p&gt;
&lt;p&gt;There were a lot of examples shown and it was genuinely interesting. At one point it became more difficult
to follow along, but I&amp;rsquo;ll mark that down to this being the first session of the second day of FOSDEM. I think my brain
quit on &lt;em&gt;parallel hash join&lt;/em&gt; part. In a way I felt like I was back in school.&lt;/p&gt;
&lt;p&gt;Given the background of the speaker, it&amp;rsquo;s no surprise that
they&lt;a href=&#34;https://momjian.us/main/presentations/performance.html&#34;&gt; have lots of presentations&lt;/a&gt; and resources on PostgreSQL.
Will definitely have to check those out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 9/10&lt;/strong&gt;, made my head hurt but I&amp;rsquo;m now aware of what to Google when dealing with PostgreSQL, and I
know which materials to reference to refresh my memory on this topic.&lt;/p&gt;
&lt;h2 id=&#34;isolation-levels-and-mvcc-in-sql-databases-a-technical-comparative-studyhttpsfosdemorg2024scheduleeventfosdem-2024-3600-isolation-levels-and-mvcc-in-sql-databases-a-technical-comparative-study&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3600-isolation-levels-and-mvcc-in-sql-databases-a-technical-comparative-study/&#34;&gt;Isolation Levels and MVCC in SQL Databases: A Technical Comparative Study&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This talk started out well: forget what you know about SQL standards because those are apparently not correct in modern
SQL databases. Way ahead of you there, Mr. Pachot!&lt;/p&gt;
&lt;p&gt;Turns out that life before MVCC (multi-version concurrency control) was rough and reading data involved locking it.
Unintentionally
locking tables is something that&amp;rsquo;s a common problem at my day job with &lt;em&gt;writes&lt;/em&gt;, so I can&amp;rsquo;t imagine what type of hell
life would
be if that was still the reality.&lt;/p&gt;
&lt;p&gt;This talk shed some light on how databases handle transactions, reads and writes. Good resource to refer back to.&lt;/p&gt;
&lt;p&gt;Made me awfully paranoid about databases and data consistency now. Can I even &lt;em&gt;trust&lt;/em&gt; databases any more? Or my
knowledge on this topic?&lt;/p&gt;
&lt;p&gt;Sidenote on &lt;a href=&#34;https://www.yugabyte.com/&#34;&gt;YugabyteDB&lt;/a&gt;: as someone who has been surprised
by &lt;a href=&#34;https://aws.amazon.com/rds/aurora/&#34;&gt;Amazon Aurora&lt;/a&gt; quirks at my day job (broken indices after a
minor version upgrade, anyone?), I find it interesting that there are other companies that provide a similar service
involving a PostgreSQL-compatible database with a custom data storage solution below it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://dev.to/franckpachot&#34;&gt;Author also has a blog on all things SQL, might be worth checking out.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 8/10&lt;/strong&gt;, made me feel even more insecure about my database knowledge, but at least I know how to
fix that.&lt;/p&gt;
&lt;h2 id=&#34;linux-load-average-and-other-silly-metricshttpsfosdemorg2024scheduleeventfosdem-2024-1921-linux-load-average-and-other-silly-metrics&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1921-linux-load-average-and-other-silly-metrics/&#34;&gt;Linux load average and other silly metrics&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Quick overview of why Linux load average is not an useful metric to follow, and can be incredibly misleading in some
scenarios, especially if you compare sync vs async I/O. I&amp;rsquo;ve been guilty of tracking that metric religiously myself,
so&amp;hellip; &lt;em&gt;whoops.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Even the Linux kernel source code calls it a silly metric!&lt;/p&gt;
&lt;p&gt;Look at Pressure Stall Information instead to understand where your system is bottlenecking.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 7/10&lt;/strong&gt;, good topic but the live demo part could have used some polish.&lt;/p&gt;
&lt;h2 id=&#34;private-clouds-do-not-need-to-be-legacyhttpsfosdemorg2024scheduleeventfosdem-2024-1779-private-clouds-do-not-need-to-be-legacy-&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1779-private-clouds-do-not-need-to-be-legacy-/&#34;&gt;Private clouds do not need to be legacy!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This one was a run through various high-level tech tips to take into account when faced with the task of moving to a
on-premise cloud setup.&lt;/p&gt;
&lt;p&gt;During my own professional career that officially begun in 2016, there has always been a push to move workloads into the
cloud, for all sorts of reasons, legitimate or misguided. Turns out that on-prem isn&amp;rsquo;t dead and some organizations are
moving back in that direction due to legal or technical requirements.&lt;/p&gt;
&lt;p&gt;Here are my takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;avoid third party software because that&amp;rsquo;s usually a source of lock-in&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;if faced with &lt;em&gt;buy vs build&lt;/em&gt; decisions, prefer build&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;keep things super simple&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;if faced with build-time or run-time complexity, prefer the former, otherwise more technical layers in run-time result
in more difficult troubleshooting due to added complexity&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;consider using Kubernetes (and an open source distribution of it)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;version control your infrastructure&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;if you automate something, automate it 100% end-to-end, don&amp;rsquo;t half-ass it or include manual middle steps&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A lot of ideas mentioned here are also applicable to those working with cloud platforms in any large company. If you
have competent engineers, then you&amp;rsquo;ll probably have no major problems if you move to a private cloud setup as a lot of
the tooling and knowledge should transfer over.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 7/10&lt;/strong&gt;, would have loved to see case studies of public -&amp;gt; private cloud migrations to illustrate
the process and highlight the pain points.&lt;/p&gt;
&lt;h2 id=&#34;firefox-power-profiling-a-powerful-visualization-of-web-sustainabilityhttpsfosdemorg2024scheduleeventfosdem-2024-2716-firefox-power-profiling-a-powerful-visualization-of-web-sustainability&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2716-firefox-power-profiling-a-powerful-visualization-of-web-sustainability/&#34;&gt;Firefox power profiling: a powerful visualization of web sustainability&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This was a fun one for me because I care about how much power my tech consumes, and the speaker put a new twist on it.
Ever wondered how much energy is spent loading your website? Now you can find that out!&lt;/p&gt;
&lt;p&gt;This talk ties in with Mozilla&amp;rsquo;s vision for a better internet and their stated sustainability goals. Building new
computing hardware is very resource and energy intensive, and shoddy websites motivate people to upgrade sooner than
necessary.&lt;/p&gt;
&lt;p&gt;The steps to take to measure the performance and power consumption of your webpage are quite simple. The power
measurement support is hardware and platform dependent, but even without that you can get a pretty good idea of how well
your website performs. The whole process was easy enough to do that I could follow it along on my laptop during the
talk.&lt;/p&gt;
&lt;p&gt;The talk was simple to follow and yet covered a lot of details and nuance around power profiling on various platforms.
This should be mandatory for anyone working in web development, especially those that add animated full-page backgrounds
on websites or load in megabytes of JavaScript.&lt;/p&gt;
&lt;p&gt;Give this talk a listen and start measuring website performance, I highly encourage it!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 10/10&lt;/strong&gt;, I hate poorly performing websites and love my machines running as efficiently as
possible, and this talk brings those two topics together in a very nice way.&lt;/p&gt;
&lt;h2 id=&#34;postgres-vs-linux-filesystemshttpsfosdemorg2024scheduleeventfosdem-2024-3605-postgres-vs-linux-filesystems&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3605-postgres-vs-linux-filesystems/&#34;&gt;Postgres vs. Linux filesystems&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My experience with hosting PostgreSQL has mainly been limited to one instance that is used by Nextcloud, and during my
professional career I&amp;rsquo;ve only observed migrations away from ZFS-based self-hosted PostgreSQL instances, so I was really
interested in seeing how different filesystems affect PostgreSQL performance.&lt;/p&gt;
&lt;p&gt;This talk laid out some general guidelines for anyone running PostgreSQL, such as keeping your kernel up to date to get
the best performance and avoid old kernel bugs, and presented lots of graphs detailing the behaviour of different
filesystems under heavy workloads simulated using &lt;code&gt;pgbench&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I recommend that you view the results, they might surprise you. As a &lt;code&gt;btrfs&lt;/code&gt; user, they certainly made me think about
choosing it if I were to ever build a dedicated database server on raw hardware.&lt;/p&gt;
&lt;p&gt;Benchmarking is very difficult to get right so I suspect that there might be other nuances at play here with the
results. Interesting presentation regardless.&lt;/p&gt;
&lt;p&gt;Sidenote: the presenter was running &lt;a href=&#34;https://www.qubes-os.org/&#34;&gt;QubesOS&lt;/a&gt;, which I&amp;rsquo;ve briefly played around with in the
past. I never expected to see anyone &lt;em&gt;actually&lt;/em&gt; using it as their daily driver. Very impressive!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 9/10&lt;/strong&gt;, I now have an urge to do my own benchmarks to verify these results (but my TODO list is
long enough already).&lt;/p&gt;
&lt;h2 id=&#34;are-project-tests-enough-for-automated-dependency-updates-a-case-study-of-262-java-projects-on-githubhttpsfosdemorg2024scheduleeventfosdem-2024-3029-are-project-tests-enough-for-automated-dependency-updates-a-case-study-of-262-java-projects-on-github&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3029-are-project-tests-enough-for-automated-dependency-updates-a-case-study-of-262-java-projects-on-github/&#34;&gt;Are Project Tests Enough for Automated Dependency Updates? A Case Study of 262 Java Projects on Github&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I picked this one mainly due to being annoyed with Dependabot spam and the state of tests at my day job.&lt;/p&gt;
&lt;p&gt;This talk covered the promise of automated dependency upgrades and ways you can avoid seemingly innocent upgrades
breaking things in production, covering tools like &lt;a href=&#34;https://pitest.org/&#34;&gt;PIT&lt;/a&gt;
and &lt;a href=&#34;https://github.com/jhejderup/uppdatera&#34;&gt;Uppdatera&lt;/a&gt;. If your tests suck, then adding mutation testing and/or static
analysis to your project might help catch problems before they make it to prod, find unused dependencies and tests that
do not properly verify that the service works.&lt;/p&gt;
&lt;p&gt;The speaker also briefly mentions the age-old problem of balancing code reuse vs increasing operational costs. Maybe
don&amp;rsquo;t bring in thousands of dependencies so that you can avoid writing a few lines of code?&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a whole research paper on this topic as well (check presentation for more details).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;techtipsy rating:&lt;/em&gt; 8/10&lt;/strong&gt;, maybe a project where tests are in shambles can be improved after all&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;the-ones-i-watched-later&#34;&gt;The ones I watched later&lt;/h2&gt;
&lt;p&gt;Due to scheduling conflicts, room capacity limitations and the fact that I can&amp;rsquo;t teleport, I could not attend everything
live.&lt;/p&gt;
&lt;p&gt;Here are the ones that I watched later from a recording.&lt;/p&gt;
&lt;h3 id=&#34;fosdem-infrastructure-reviewhttpsfosdemorg2024scheduleeventfosdem-2024-3025-fosdem-infrastructure-review&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3025-fosdem-infrastructure-review/&#34;&gt;FOSDEM infrastructure review&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Quick overview of the infrastructure that makes FOSDEM tick. Especially loved the rendering rack made out of laptops and
lessons learned from doing FOSDEM over the years. Includes challenges faced by the organizing team and the (funny)
workarounds they employed.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 9/10&lt;/strong&gt;&lt;/em&gt;, recording quality is good and I appreciate the look behind the scenes.&lt;/p&gt;
&lt;h3 id=&#34;where-did-all-the-fun-go-and-how-to-bring-it-back-with-fosshttpsfosdemorg2024scheduleeventfosdem-2024-1899-where-did-all-the-fun-go-and-how-to-bring-it-back-with-foss-&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1899-where-did-all-the-fun-go-and-how-to-bring-it-back-with-foss-/&#34;&gt;Where Did All the Fun Go? And How to Bring it Back with FOSS!&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Certainly one of the more unorthodox talks at FOSDEM 2024, but it does carry an important message.
The AI and heavy metal parts can feel a bit jarring at first, but in the end it all makes sense, trust me.&lt;/p&gt;
&lt;p&gt;Made me miss something that I realized we don&amp;rsquo;t have much of in tech lately: fun! Makes me appreciate creators like
&lt;a href=&#34;https://www.youtube.com/@programmersarealsohuman5909&#34;&gt;&amp;ldquo;Programmers are also human&amp;rdquo;&lt;/a&gt;
and &lt;a href=&#34;https://www.youtube.com/@KRAZAM&#34;&gt;KRAZAM&lt;/a&gt;
so much more now as they carry on the spirit that was covered in the talk.&lt;/p&gt;
&lt;p&gt;This is one of those talks where the recording is a bit off, the slides are missing for about half the session so I
recommend opening the slides in another tab (muted) and try to follow along.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 8/10&lt;/strong&gt;&lt;/em&gt;, great content that lifts the spirit, but recording hampered by technical issues.&lt;/p&gt;
&lt;h3 id=&#34;diy-private-container-registryhttpsfosdemorg2024scheduleeventfosdem-2024-2161-diy-private-container-registry&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2161-diy-private-container-registry/&#34;&gt;DIY Private Container Registry&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This one I feel was hampered by issues with the recording and the short time slot. I felt like the session could go more
in depth on the topic and the custom solution that the speaker was involved in building.&lt;/p&gt;
&lt;p&gt;Never knew that the authentication and authorization part of handling private container images isn&amp;rsquo;t actually
standardized and
relies mostly on cloud providers&amp;rsquo; features and/or HTTP basic authentication.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 5/10&lt;/strong&gt;&lt;/em&gt;, there is potential for a good talk here if given more time and if the speaker goes in
depth.&lt;/p&gt;
&lt;h3 id=&#34;open-source-for-sustainable-and-long-lasting-phoneshttpsfosdemorg2024scheduleeventfosdem-2024-3362-open-source-for-sustainable-and-long-lasting-phones&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3362-open-source-for-sustainable-and-long-lasting-phones/&#34;&gt;Open Source for Sustainable and Long lasting Phones&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I discovered this talk randomly while scrolling through the FOSDEM schedule and checking the main track talks. I think I
skipped over this one initially because I had no idea that this was all about Fairphone!&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve never heard about Fairphone or why they exist, then I 100% encourage you to give this one a watch. You&amp;rsquo;ll
learn everything you&amp;rsquo;d need to know about Fairphone, including their evolution and how they have approached software and
hardware longevity in their phones.&lt;/p&gt;
&lt;p&gt;I was surprised to hear how many obstacles Fairphone faced when trying to keep phones running on up-to-date software.&lt;/p&gt;
&lt;p&gt;Yes, I do think that &lt;a href=&#34;https://www.youtube.com/watch?v=e-4RlKcinzc&#34;&gt;LinusTechTips missed the point of Fairphone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If I hadn&amp;rsquo;t bought a Fairphone 5 before coming to FOSDEM, then this talk would have totally made me get one. That, and
the fact that most of the custom OS booths had one on display. And Fairphone supports them!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 10/10&lt;/strong&gt;&lt;/em&gt;, this talk gives me hope that we &lt;em&gt;can&lt;/em&gt; change the world, one phone at a time.&lt;/p&gt;
&lt;h3 id=&#34;you-too-could-have-made-curlhttpsfosdemorg2024scheduleeventfosdem-2024-1931-you-too-could-have-made-curl-&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1931-you-too-could-have-made-curl-/&#34;&gt;You too could have made curl!&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Inspirational overview from the guy behind &lt;code&gt;curl&lt;/code&gt;, covering the journey of &lt;code&gt;curl&lt;/code&gt; and the various challenges
over the years. Daniel is very supportive and encouraging in this one, absolutely no gate keeping here and I love it!&lt;/p&gt;
&lt;p&gt;If you had doubts about if you could ever be a successful maintainer of an open source project, then this talk
covers most things that you&amp;rsquo;d need to know about the journey, what to keep doing and what to avoid.&lt;/p&gt;
&lt;p&gt;There are more general recommendations as well, such as the time management aspect. Daniel intentionally
leaves out playing video games and uses every available time slot that he has. I&amp;rsquo;ve found that if I just start
doing things no matter the timeslots and pick carefully what to focus on, then I can get a lot done, so this strategy
does work!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 10/10&lt;/strong&gt;&lt;/em&gt;, the microphone quality isn&amp;rsquo;t great on the recording, but the good content makes up for
it.&lt;/p&gt;
&lt;h3 id=&#34;how-to-build-an-open-source-school-cloud-for-5-million-usershttpsfosdemorg2024scheduleeventfosdem-2024-2415-how-to-build-an-open-source-school-cloud-for-5-million-users&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2415-how-to-build-an-open-source-school-cloud-for-5-million-users/&#34;&gt;How to Build an Open Source School Cloud for 5 Million Users&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This one was mainly about how ownCloud Infinite Scale was used to roll out a solution used by over a million students.&lt;/p&gt;
&lt;p&gt;Brief and a bit light on the technical specifics, but still useful. I heard about ownCloud and their Infinite Scale
offering before
and was curious about it due to the alleged performance improvements, but never gave it much thought because the most of
the community backing seems to be behind Nextcloud, and that matters a lot to me. Now I know how they achieve that
scale and it sounds interesting, might need to give it a go.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re wondering on a high level what components it would take to roll out such a big project, then this talk covered
that fairly well. The tooling looks a lot like what I work with at my day job.&lt;/p&gt;
&lt;p&gt;The recording glitched out near the end of the talk but returned to normal by the time they got around to the Q&amp;amp;A part.
Good questions from the audience!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 8/10&lt;/strong&gt;&lt;/em&gt;, would love to see a more in depth talk on this topic that also deals with operational
struggles and the project management challenges.&lt;/p&gt;
&lt;h3 id=&#34;using-code-generated-by-ai-issues-misconceptions-and-solutionshttpsfosdemorg2024scheduleeventfosdem-2024-1953-using-code-generated-by-ai-issues-misconceptions-and-solutions&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1953-using-code-generated-by-ai-issues-misconceptions-and-solutions/&#34;&gt;Using code generated by AI: issues, misconceptions and solutions&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A short and good intro into the world of AI and how it interacts with copyright law. Comparing audio file formats to AI
models from the copyright perspective was a brilliant comparison to make.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m pretty sure now that most AI models are trained on copyrighted works. Hope the markets don&amp;rsquo;t notice that.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 9/10&lt;/strong&gt;&lt;/em&gt;, easy listening, well-spoken speaker and I learned something new from an area that I don&amp;rsquo;t
usually follow that closely.&lt;/p&gt;
&lt;h3 id=&#34;streamlining-developer-experience-the-power-of-cicd-standardization-and-interoperabilityhttpsfosdemorg2024scheduleeventfosdem-2024-2964-streamlining-developer-experience-the-power-of-ci-cd-standardization-and-interoperability&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2964-streamlining-developer-experience-the-power-of-ci-cd-standardization-and-interoperability/&#34;&gt;Streamlining Developer Experience: The Power of CI/CD Standardization and Interoperability&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Speaker starts with a mention of having used AI to generate some work in the slides, which is a fun point to make when
the last talk I watched was related to AI and copyright. They were a bit of a distraction though as my mind automatically
wandered to detecting AI anomalies in those images (there were plenty of those).&lt;/p&gt;
&lt;p&gt;This one covers a lot of what is needed to provide a good developer experience so that your developers can better
focus on their core objectives. It was more of a high-level overview of the principles and examples of tooling that
support these. Most of what was covered sounded familiar so I guess that part of my day job isn&amp;rsquo;t in shambles.&lt;/p&gt;
&lt;p&gt;Never knew that Backstage could integrate with CI/CD pipelines.&lt;/p&gt;
&lt;p&gt;Some minor audio glitches in recording. Not a dealbreaker.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 6/10&lt;/strong&gt;&lt;/em&gt;, AI-generated imagery was more of a distraction for me; would have loved to hear more about
the technical specifics or case studies where these types of improvements have been made.&lt;/p&gt;
&lt;h3 id=&#34;stopping-all-the-attacks-before-they-start-building-a-security-first-apihttpsfosdemorg2024scheduleeventfosdem-2024-2352-stopping-all-the-attacks-before-they-start-building-a-security-first-api&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2352-stopping-all-the-attacks-before-they-start-building-a-security-first-api/&#34;&gt;Stopping all the attacks before they start: Building a security-first API&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Simple overview of what it takes to build an API that&amp;rsquo;s reasonably secure.&lt;/p&gt;
&lt;p&gt;Unsurprisingly, the focus is on the very basics: validate your input, add authentication that works, check if the user
is authorized to perform the actions and monitor and log your system. Speaker also emphasizes the importance of having a
threat model because how else would you know who and what to protect against?&lt;/p&gt;
&lt;p&gt;My career has shown that implementing the basics will get you very far towards having a secure system. If you ignore the
basics, you will pay the price (and don&amp;rsquo;t forget about the accrued technical debt!).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 8/10&lt;/strong&gt;&lt;/em&gt;, covers basic topics, but that&amp;rsquo;s the whole point since our industry can&amp;rsquo;t even get those
right.&lt;/p&gt;
&lt;h3 id=&#34;observations-on-a-dnssec-incident-the-russian-tldhttpsfosdemorg2024scheduleeventfosdem-2024-3740-observations-on-a-dnssec-incident-the-russian-tld&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3740-observations-on-a-dnssec-incident-the-russian-tld/&#34;&gt;Observations on a DNSSEC incident: the russian TLD&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;My interest in this one was mainly about the actual real-life reported Internet outages in Russia that occurred shortly
before FOSDEM. There was a lot of speculation and this talk covered the whole event really nicely, calling out the
baseless claims by random people on the Internet. The speaker then proceeded to show what actually happened and
showcased &lt;a href=&#34;https://dnsviz.net/&#34;&gt;DNSViz&lt;/a&gt;, which was very helpful in visually showing what went wrong with the &lt;code&gt;.ru&lt;/code&gt; top
level domain.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 9/10&lt;/strong&gt;&lt;/em&gt;, the session was short but sweet, the speaker cracked a few laughs from the audience and
a technical topic got presented in an understandable way.&lt;/p&gt;
&lt;h3 id=&#34;open-source-in-2024-boundaries-burnout-businesshttpsfosdemorg2024scheduleeventfosdem-2024-2029-open-source-in-2024-boundaries-burnout-business&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2029-open-source-in-2024-boundaries-burnout-business/&#34;&gt;Open Source in 2024: boundaries, burnout, business&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Great talk that covers the human side of open source. While this talk is more focused on the open source perspective,
a lot of the recommendations here are also applicable to software developers in general. A lot of focus is put on
setting boundaries, which is great.
This talk complements &lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-1931-you-too-could-have-made-curl-/&#34;&gt;this one by Daniel Stenberg of &lt;code&gt;curl&lt;/code&gt; fame&lt;/a&gt;
so give that one a watch as well!&lt;/p&gt;
&lt;p&gt;I like how the speaker added links to their blog to various slides that cover the topic in question in depth. My reading
list got a bit longer again.&lt;/p&gt;
&lt;p&gt;During the Q&amp;amp;A there was an interesting idea mentioned: &lt;em&gt;the human user guide&lt;/em&gt;, which as far as I understood is a
document that covers everything you&amp;rsquo;d need to know about the person you&amp;rsquo;re working with. Things like &amp;ldquo;you should know X
about me&amp;rdquo;, &amp;ldquo;it makes me happy when my colleagues do Y&amp;rdquo;, &amp;ldquo;it makes me sad when someone does Z&amp;rdquo;. It sounds like something
that can backfire if implemented poorly, but it&amp;rsquo;s an interesting concept.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://fosdem.org/2024/events/attachments/fosdem-2024-2029-open-source-in-2024-boundaries-burnout-business/slides/22591/Open_Source_-_boundaries_burnout_business_jSoCbxc.pdf&#34;&gt;The slides&lt;/a&gt;
seem to be missing from the recording so I recommend that you open them up in a separate window.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 10/10&lt;/strong&gt;&lt;/em&gt;, great speaker covering important topics that many software developers unfortunately learn
by first-hand experience, myself included.&lt;/p&gt;
&lt;h3 id=&#34;power-profiling-my-entire-house-with-the-firefox-profilerhttpsfosdemorg2024scheduleeventfosdem-2024-2723-power-profiling-my-entire-house-with-the-firefox-profiler&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2723-power-profiling-my-entire-house-with-the-firefox-profiler/&#34;&gt;Power profiling my entire house with the Firefox Profiler&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A nice story about a software developer from Mozilla deciding to measure all things electrical in their home, and why
they decided to use the Firefox Profiler to visualize it.&lt;/p&gt;
&lt;p&gt;This one is relevant to my interests because I run some smart plugs at home and collect all that data for display in
Grafana. A lot of the observations that the speaker made about devices consuming power sound similar to the ones I&amp;rsquo;ve
made over the past month or so.&lt;/p&gt;
&lt;p&gt;This one also contains a few tech tips for new parents who are also software developers. Unexpected, but a welcome
addition.&lt;/p&gt;
&lt;p&gt;Some small audio disruptions in the recording. Not a dealbreaker.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 10/10&lt;/strong&gt;&lt;/em&gt;, interesting topic, slides are structured well, talk contains actionable advice, and it
makes me want to measure absolutely everything at my home even more.&lt;/p&gt;
&lt;h3 id=&#34;so-you-think-you-know-githttpsfosdemorg2024scheduleeventfosdem-2024-3611-so-you-think-you-know-git&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-3611-so-you-think-you-know-git/&#34;&gt;So you think you know Git&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you know &lt;code&gt;git&lt;/code&gt; basics, then this one will be really useful as it covers lots of &lt;code&gt;git&lt;/code&gt; features and functionality that
you might not even be aware of.&lt;/p&gt;
&lt;p&gt;I mainly use &lt;code&gt;git&lt;/code&gt; via IntelliJ GUI nowadays due to the ease of use, but I now know what it is probably doing in the
background to achieve those results, especially when it comes to checking who wrote that awful piece of crap soluti- oh,
it was me back in 2021.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 10/10&lt;/strong&gt;&lt;/em&gt;, speaker is very enthusiastic, lots of good tech tips and I learned something!&lt;/p&gt;
&lt;h3 id=&#34;magic-and-softwarehttpsfosdemorg2024scheduleeventfosdem-2024-2332-magic-and-software&#34;&gt;&lt;a href=&#34;https://fosdem.org/2024/schedule/event/fosdem-2024-2332-magic-and-software/&#34;&gt;Magic and Software&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Not even going to spoil this one, just go watch it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;techtipsy rating: 10/10&lt;/strong&gt;&lt;/em&gt;, magic magic magic.&lt;/p&gt;
&lt;h1 id=&#34;closing-thoughts&#34;&gt;Closing thoughts&lt;/h1&gt;
&lt;p&gt;I &lt;em&gt;&lt;strong&gt;loved&lt;/strong&gt;&lt;/em&gt; FOSDEM 2024.&lt;/p&gt;
&lt;p&gt;My expectations were high based on what I heard before, and it still exceeded them!
The occasional technical issues weren&amp;rsquo;t a dealbreaker, there was generally plenty of room in the sessions
(at least those I went to), and both the content and the people were great.&lt;/p&gt;
&lt;p&gt;I felt at home, surrounded by people with whom I have similar interests. It&amp;rsquo;s not an environment I find myself in
often, even at work, which is why FOSDEM felt so special.&lt;/p&gt;
&lt;p&gt;Next time I&amp;rsquo;ll try to take part in more community events if possible, talk to people and leave some time for sightseeing
in Brussels.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to thank my employer &lt;a href=&#34;https://concise.ee/&#34;&gt;Concise Systems&lt;/a&gt; for paying for travel and accommodation.&lt;/p&gt;
&lt;p&gt;Special thanks go to &lt;a href=&#34;https://zirk.me/&#34;&gt;my friend Arti&lt;/a&gt; who introduced me to FOSDEM in the first place and helped make
my
first FOSDEM a memorable one.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/fosdemgang.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2024/02/12/fosdem-2024/media/fosdemgang_hu39a404366cc5c1dca967c674d4df7e88_2512065_1280x800_fit_q75_box.jpg&#34;
             width=&#34;981&#34;
             height=&#34;800&#34;
             alt=&#34;FOSDEM gang.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      FOSDEM gang.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;


        
        </description>
    </item>
    
    
    
    <item>
      <title>My cat water fountain comes with a spicy USB power adapter</title>
      <link>https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/</link>
      <pubDate>Tue, 19 Dec 2023 14:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;It turns out that you can&amp;rsquo;t trust any USB type A power adapter to be within spec.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/media/cover_hu274ae1922594f3b973c5b875085287a1_706710_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;600&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;I have a &lt;a href=&#34;https://www.catit.com/products/drinking-fountains/flower-fountain/&#34;&gt;Catit Flower Fountain&lt;/a&gt;
for my two adorable cats. The idea of a water fountain for cats may sound odd,
but having one really helps with cats staying hydrated and that alone avoids all
sorts of health issues.&lt;/p&gt;
&lt;p&gt;At one point I wanted to see if I could create a sort of a DIY UPS for the water fountain. It would be quite bad if I
was at work and a power outage results in cats not being able to drink water (they don&amp;rsquo;t really care for normal water
bowls after getting the fountain). I had some battery banks available for testing, and I noticed that the pump for the
water fountain is powered over a USB type A cable.&lt;/p&gt;
&lt;p&gt;Should be easy, right?&lt;/p&gt;
&lt;p&gt;Apparently not.&lt;/p&gt;
&lt;p&gt;I tried multiple different power banks between the water fountain and the
USB power adapter that came with it, and all of them would work for a bit
and turn off after some time. I didn&amp;rsquo;t think much of it back then, but I did
notice that two of the power banks I used started glitching out during
normal use elsewhere.&lt;/p&gt;
&lt;p&gt;Months later, I attached an IKEA power strip to the side of my work desk
to make charging various things easier. It also has two USB type A ports and the
water fountain was near the desk temporarily, so I plugged it in there. It worked,
but I noticed that the water fountain was quieter now, the &amp;ldquo;hum&amp;rdquo; that it makes
was almost gone. That made me curious, so I used the original adapter again
and the &amp;ldquo;hum&amp;rdquo; was there again.&lt;/p&gt;
&lt;p&gt;I took a look at the original power adapter specs to see if there&amp;rsquo;s a difference
in the amount of current that these two different USB power sources provide.
What I discovered instead was that the power adapter that comes with the fountain
outputs a solid &lt;em&gt;&lt;strong&gt;7.5V&lt;/strong&gt;&lt;/em&gt;. I measured the voltage with my multimeter as well,
and it reports &lt;em&gt;&lt;strong&gt;7.71V&lt;/strong&gt;&lt;/em&gt;. USB type A ports typically provide about 5V, with a maximum
of 5.25V from my observations in the real world.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/media/image0.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/media/image0_hu274ae1922594f3b973c5b875085287a1_176314_1280x800_fit_q75_box.jpg&#34;
             width=&#34;954&#34;
             height=&#34;595&#34;
             alt=&#34;Yikes.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Yikes.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;7.5V over USB type A is &lt;em&gt;probably&lt;/em&gt; not safe with other devices, especially since a normal person
only sees a USB port on the adapter and thinks that it is perfectly safe to use
it to charge their phone or other devices. Yes, properly implemented USB type &lt;em&gt;&lt;strong&gt;C&lt;/strong&gt;&lt;/em&gt;
ports can negotiate all sorts of voltages, but this is not one of them.&lt;/p&gt;
&lt;p&gt;Probably explains why my power banks are acting odd now and glitching out.&lt;/p&gt;
&lt;p&gt;This is why I have trust issues.&lt;/p&gt;
&lt;h3 id=&#34;2023-12-19-update&#34;&gt;2023-12-19 update&lt;/h3&gt;
&lt;p&gt;By popular demand, here are the two adorable cats.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/media/cats.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/12/19/spicy-usb-adapter/media/cats_hu380fbf338ff34647e66732a5f1fb677a_1888448_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Tux and Põssa. Põssa can be roughly translated to &amp;#34;Piggy&amp;#34; in English. I&amp;#39;ll let you guess how he got that name.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Tux and Põssa. Põssa can be roughly translated to &amp;#34;Piggy&amp;#34; in English. I&amp;#39;ll let you guess how he got that name.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;


        
        </description>
    </item>
    
    
    
    <item>
      <title>The simplicity of the modulo operator: how I scaled an inefficient solution on a legacy system</title>
      <link>https://ounapuu.ee/posts/2023/12/11/modulo/</link>
      <pubDate>Mon, 11 Dec 2023 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/12/11/modulo/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Your service cannot process events fast enough during peak hours.&lt;/p&gt;
&lt;p&gt;There is no obvious quick and dirty fix.&lt;/p&gt;
&lt;p&gt;Refactoring would take ages.&lt;/p&gt;
&lt;p&gt;People have been unhappy for a while now.&lt;/p&gt;
&lt;p&gt;What the hell do you do?&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/12/11/modulo/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/12/11/modulo/media/cover_hu80c0f478b5e05bba3f8a245bca9d50f5_368314_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;Rough representation of the situation we were facing.
Not pictured: honking and yelling.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Rough representation of the situation we were facing.
Not pictured: honking and yelling.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;
&lt;p&gt;I had the pleasure of working with a legacy backend system recently. It had plenty
of ongoing problems, but one of those was more acute compared to others: the service could
not process certain very important events fast enough during peak hours and that was problematic
for everyone that relied on those events.&lt;/p&gt;
&lt;p&gt;The processing of events was very basic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;load 1000 entities&lt;/li&gt;
&lt;li&gt;for each entity, do the following sequentially
&lt;ul&gt;
&lt;li&gt;do some processing&lt;/li&gt;
&lt;li&gt;send a JMS message via ActiveMQ&lt;/li&gt;
&lt;li&gt;wait for confirmation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The processing was triggered by the scheduled jobs system that the service had
been relying on since its inception more than a decade ago. That system only allowed to run one instance
of a scheduled job at any time.&lt;/p&gt;
&lt;p&gt;This processing worked well for almost a decade at this point, but started causing more
and more issues as the service was the backbone of a rapidly-growing business.
At least it was a nice problem to have.&lt;/p&gt;
&lt;p&gt;I was the lucky guy who got assigned to solving this issue, and in hindsight
I&amp;rsquo;m really glad I got it because tackling this one was fun.&lt;/p&gt;
&lt;p&gt;The slowness of the process was down to the part where events had to be sent
via ActiveMQ. It&amp;rsquo;s possible to send events without waiting for any confirmation,
but our service was going with the slower approach of waiting for a confirmation
that the message was successfully sent.
After consulting with my colleagues, going through the depths of &lt;code&gt;git blame&lt;/code&gt;
and doing some Jira archeology I soon
learned that this slowness was there for a reason: some events could fail to
be processed if the service suddenly died, which wasn&amp;rsquo;t that rare of an
occurrence. Sure, the processing was quick, but you had the risk of losing events,
and that was even worse than sending events with a big delay.&lt;/p&gt;
&lt;p&gt;When looking at the behaviour of this code path I learned that sending each event
took about 20 milliseconds. That is not a lot of time for a single message, but
if you have queued up 1000 events, then that results in 20+ seconds required
to send all of those messages. Take into account the fact that you are doing
this processing sequentially and the fact that during peak hours you had to process
thousands of events within one minute, and you can see where this becomes
problematic.&lt;/p&gt;
&lt;p&gt;To give some additional context: we&amp;rsquo;re dealing with a service that has at least
2 or more instances running at any time in a Kubernetes cluster. We had other high priority
work ongoing as well and refactoring this part of the system was not feasible in
a short time window. Spending weeks or even months on this issue was out of the
question.&lt;/p&gt;
&lt;h3 id=&#34;the-solution&#34;&gt;The solution&lt;/h3&gt;
&lt;p&gt;The first idea I tried was pretty basic: try to see if we could process each event in parallel
using Java parallel streams. Hibernate and ActiveMQ put brakes on that
idea pretty quick due to objects related to them not being thread-safe.&lt;/p&gt;
&lt;p&gt;The second idea I tried was to find a way to bulk-send events since I suspected
that the ActiveMQ connection setup and teardown was being done separately for
each processed entity. That, however, was not the case.&lt;/p&gt;
&lt;p&gt;The third idea was the one I went with.
From my early programming days I learned about &lt;a href=&#34;https://en.wikipedia.org/wiki/Modulo&#34;&gt;the modulo operation&lt;/a&gt;.
I also had vague knowledge of Kafka and its way to split work via partitions.
Didn&amp;rsquo;t take my mind long to connect the dots, and a &lt;em&gt;&lt;strong&gt;TechTipsy certified quickfix™&lt;/strong&gt;&lt;/em&gt;
was born.&lt;/p&gt;
&lt;p&gt;I took the existing job, created
multiple instances of it and gave each instance a number from 0 to 4, let&amp;rsquo;s call
it a &amp;ldquo;worker ID&amp;rdquo;. Those modified scheduled jobs ran the same database query, but
with a small adjustment: in addition to other criteria, each scheduled job
only picked entities where the &lt;em&gt;modulo 5&lt;/em&gt; result of its numerical identifier
matched the worker ID.&lt;/p&gt;
&lt;p&gt;This means that the service could process 5 times more entries at once without
having to commit to a big and risky rewrite.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/12/11/modulo/media/image0.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/12/11/modulo/media/image0_hu9b17e75ae6354902e1a4fc15e9a03de9_307489_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;I imagine this is what the &amp;#34;just one more lane, bro!&amp;#34; crowd thinks happens in 
the real world.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I imagine this is what the &amp;#34;just one more lane, bro!&amp;#34; crowd thinks happens in 
the real world.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The PostgreSQL modulo operator helped facilitate this process and was
the key to avoiding loading all of the entities into memory and filtering
that list down using the modulo operator in application code.&lt;/p&gt;
&lt;p&gt;All-in-all, this took a few days of work to implement, roll out in staging
and production, observing and refactoring to make the solution maintainable. For a service
that&amp;rsquo;s part of the critical path in the tech stack and notorious for its
slow deployment cycle, it was pretty fast.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s an example to help illustrate the process.
The database holds 7 entities with the following ID-s: 1001, 1002, 1003, 1004,
1005, 1006, 1007.&lt;/p&gt;
&lt;p&gt;Worker 0 starts up and selects all entities where the result of &lt;code&gt;ID mod 5 = 0&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1001 mod 5 = 1&lt;/li&gt;
&lt;li&gt;1002 mod 5 = 2&lt;/li&gt;
&lt;li&gt;1003 mod 5 = 3&lt;/li&gt;
&lt;li&gt;1004 mod 5 = 4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1005 mod 5 = 0&lt;/strong&gt; &amp;lt;&amp;ndash; this one&lt;/li&gt;
&lt;li&gt;1006 mod 5 = 1&lt;/li&gt;
&lt;li&gt;1007 mod 5 = 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Worker 0 selects entity 1005.&lt;/p&gt;
&lt;p&gt;Worker 1 selects entities 1001, 1006.&lt;/p&gt;
&lt;p&gt;Worker 2 selects entities 1002, 1007.&lt;/p&gt;
&lt;p&gt;Worker 3 selects entity 1003.&lt;/p&gt;
&lt;p&gt;Worker 4 selects entity 1004.&lt;/p&gt;
&lt;p&gt;All the workers operate in parallel.&lt;/p&gt;
&lt;h3 id=&#34;caveats&#34;&gt;Caveats&lt;/h3&gt;
&lt;p&gt;This solution isn&amp;rsquo;t perfect and has some caveats related to certain
implementation details.&lt;/p&gt;
&lt;p&gt;Adding additional workers is relatively simple, but requires lots of small but
well-documented steps. This will only be a problem if the system sees additional
growth that it cannot handle, but that should be years from now. I like to think
of it as job security for future generations.&lt;/p&gt;
&lt;p&gt;Due to the way the scheduled jobs solution is built, it is possible for
one instance of the service to run more than one worker at once, which could
be a problem for compute-heavy or memory-hungry processing work. However, for this
use case it&amp;rsquo;s not a problem.&lt;/p&gt;
&lt;p&gt;All-in-all, I&amp;rsquo;m happy with the solution, the team was happy after I made the
&lt;em&gt;&lt;strong&gt;TechTipsy certified quickfix™&lt;/strong&gt;&lt;/em&gt; more maintainable, and everyone relying on this solution
to work properly were also happy.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Control - how to make a game enjoyable for casual audiences</title>
      <link>https://ounapuu.ee/posts/2023/12/01/control/</link>
      <pubDate>Fri, 01 Dec 2023 10:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/12/01/control/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I&amp;rsquo;ve decided to intentionally take more time to play video games this year,
since it&amp;rsquo;s a relatively healthy way to escape from the real world once in a while.
A friend recommended one game in particular: &lt;a href=&#34;https://store.steampowered.com/app/870780/Control_Ultimate_Edition/&#34;&gt;Control: Ultimate Edition&lt;/a&gt;.
During the Steam summer sale of 2023, I went ahead and bought it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/12/01/control/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/12/01/control/media/cover_hud3984191c483f87d82c64a1f3d66d534_127980_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;800&#34;
             alt=&#34;yeet&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      yeet
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I have liked it more than I expected to.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/12/01/control/media/image-1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/12/01/control/media/image-1_huc78dd68e0fe2bcc204a35a1d71167138_28698_1280x800_fit_box_3.png&#34;
             width=&#34;408&#34;
             height=&#34;84&#34;
             alt=&#34;And I&amp;#39;m not even done with the game!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      And I&amp;#39;m not even done with the game!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;What prompted me to cover this game wasn&amp;rsquo;t the captivating story, the sheer amount
of content available in the Ultimate Edition of the game, or the wild action
that you can find yourself in, it&amp;rsquo;s much more simple than that.&lt;/p&gt;
&lt;p&gt;In short, Control provides you with &amp;ldquo;Assist mode&amp;rdquo;, a set of options that allow
you to adjust the high difficulty of the game. This includes settings that help lock on to enemies,
which is great for players using controllers. There are also sliders to adjust
the recovery rate of various resources and even a one-hit kill mode.&lt;/p&gt;
&lt;p&gt;My favourite of all of these is the immortality toggle.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/12/01/control/media/image-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/12/01/control/media/image-2_hu303c116f761c6b0b694b9f642299b372_56017_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;800&#34;
             alt=&#34;Assist mode options in Control.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Assist mode options in Control.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I don&amp;rsquo;t take time to play video games to add more stress to my life. I work with
legacy software that falls over in novel ways almost weekly at this point, there&amp;rsquo;s
too much stress in my life already. I like a
good challenge once in a while, but in most cases I play games to have fun. I&amp;rsquo;m
also a fan of great stories, and many great stories are told via the medium of
video games. I&amp;rsquo;d hate to miss out on those experiences due to the game being
too difficult or making me feel frustrated.&lt;/p&gt;
&lt;p&gt;In the case of Control, the immortality toggle was what allowed me to relax,
follow the story with great interest, and feel like a &lt;em&gt;&lt;strong&gt;god&lt;/strong&gt;&lt;/em&gt; that kept
&lt;em&gt;yeeting&lt;/em&gt; exploding forklifts at various enemies with explosive gun shots
sprinkled inbetween. There were still some challenging parts in the game even
with immortality in place, but they did not cause me to feel stressed out or
get frustrated with the game.&lt;/p&gt;
&lt;p&gt;This one simple toggle is probably the sole reason why this game has become one
of my all-time favourites.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure that there are people out there who disagree with the view that games
should always be easy or enjoyable. I don&amp;rsquo;t care. I play games for myself, not
to be validated by some bozo on the internet.&lt;/p&gt;
&lt;p&gt;While writing this post, I looked around the internet to see what others think
of Control and its difficulty, and what caught my eye were numerous results
discussing the difficulty of the game. I was also happy to see that &lt;a href=&#34;https://www.wired.com/story/casual-gamer-control-easy-mode-wait/&#34;&gt;there are
others out there who agree with me&lt;/a&gt;
(or more precisely I agree with them). I found it surprising that the &amp;ldquo;Assist mode&amp;rdquo;
was added to the game a year after its release. Guess it pays off to be a patient
gamer.&lt;/p&gt;
&lt;p&gt;Perhaps all of this explains why I had such a blast playing GTA San Andreas as
a teenager. Cheats like &lt;code&gt;HESOYAM&lt;/code&gt; and &lt;code&gt;AEZAKMI&lt;/code&gt; are still hardwired in my brain
since I used them a lot, and they allowed me to wreak havoc in-game and not have
to worry about getting stuck at an annoyingly difficult mission.&lt;/p&gt;
&lt;p&gt;Hats off to Remedy Entertainment for adding the assist mode, I really appreciate it.&lt;/p&gt;
&lt;p&gt;Oh, and the game works well on the Steam Deck. Great job!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>The optimization treadmill: why I keep changing my computing setup all the time</title>
      <link>https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/</link>
      <pubDate>Wed, 25 Oct 2023 10:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I have a bad habit of changing my computing setups all the time. I tend to see new gear, then I get
some new ideas, and then I obsessively think about it for weeks and months until I just buy it.
And then the cycle repeats.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve had time to think about why that keeps happening and I think I&amp;rsquo;ve got it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;I keep changing the goals, constantly,&lt;/strong&gt;&lt;/em&gt; and with that I kept optimizing my
setup in a different direction every time.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/cover_hu310c0aadc6bf39437feb4083be5550d3_345633_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;Oh my, that&amp;#39;s a lot of money spent over the years. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Oh my, that&amp;#39;s a lot of money spent over the years. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This post also serves as a way to explain &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/&#34;&gt;my thought process behind my last post about the Zimaboard&lt;/a&gt;,
since my writing may not have been clear enough on that point, or some of you just can&amp;rsquo;t read.&lt;/p&gt;
&lt;h3 id=&#34;the-treadmill&#34;&gt;The treadmill&lt;/h3&gt;
&lt;p&gt;It all started with the first step in my self-hosting adventure. I had a 1TB WD external hard drive that was a single copy
of all my important files, which is less than ideal if you want to preserve your data.
My goal became to have another redundant copy of the storage, so I built a server from old PC parts and
used hard drives, all running ZFS, and hosted in a room where loud PC-s were more of a norm.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-1_hu1d3f723e57ce8e73a8540de6ffcf1771_2877826_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;First actual server setup that I had.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      First actual server setup that I had.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;After that setup moved to my rented apartment, I discovered that having a buzzing tower of 8 hard drives
(that was an upgrade I later made) consumes
a lot of power and is also unbearable when you&amp;rsquo;re trying to sleep in the same room.
My goal became to reduce the noise and the power consumption, so I upgraded to a Ryzen 2000-series based setup
and at least two WD Red 4TB hard drives. It was quieter, faster and more power efficient compared to the previous setup.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-2_hu31998f6754d53c547d2d6a0668a5fc3e_6183845_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Fun fact: one of the WD Red drives died and had to be replaced through warranty. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Fun fact: one of the WD Red drives died and had to be replaced through warranty. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Then I discovered that laptops use even less power than that. A ThinkPad X230 I had around used less than 10 watts
when idling, and it just so happened that I had one to play around with.
My goal became to reduce the power consumption of my home server setup even more.
I ended up putting my storage on two
4TB WD Red hard drives connected over USB 3.0 and running my home services off of that ThinkPad.&lt;/p&gt;
&lt;p&gt;Soon after that, I discovered that having a cat around USB-connected storage running &lt;code&gt;btrfs&lt;/code&gt; is a really bad idea.
There was data loss, but luckily nothing I could not replace. My goal became to have a low power setup that was more
cat-proof and did not rely on USB-based storage. That&amp;rsquo;s how I ended up with a TerraMaster F2-221.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-3_hu11a90c0c9395d5d8c699bc5e5b46d829_5335111_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Meet Tux, the data loss queen. Hopefully makes up for the fact that I don&amp;#39;t have a 
picture of those two setups.  &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Meet Tux, the data loss queen. Hopefully makes up for the fact that I don&amp;#39;t have a 
picture of those two setups.  
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Damn, these hard drives sure are loud in that NAS! I also discovered that some external 2.5&amp;quot; hard drive enclosures
can be opened up to reveal 2.5&amp;quot; 15mm SATA hard drives in up to 5TB capacities.
&lt;a href=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/&#34;&gt;And you can plop those onto a PCIe card, for some reason.&lt;/a&gt;
And I really liked the Thermaltake Core V1 and SSD-s for certain types of storage.
My goal became to build a really cool and performant server that housed both hard drives and SSD-s, because why not?&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-4.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-4_hu14966252d29ffda07d7b73dd02cb0e75_2166008_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;RGB-powered server.  &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      RGB-powered server.  
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Oh, wait, no, that thing uses a lot of power and a ThinkPad T430 became available in my computing fleet.
I probably got a good deal on some 8TB hard drives around this time as well.
My goal became having a lot of storage around while also using less power, and having it all
as cat-proof as possible. That&amp;rsquo;s how a ThinkPad T430 ended up being a home server.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-5.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-5_hu2b8407867b2bc39674f03cc482fa7c01_1803790_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Embrace the jank.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Embrace the jank.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Oh, crap, that ThinkPad kept overheating because the CPU in it was a bit too much at higher loads!
My goal became to find a suitable replacement that did not use a lot of power.
Luckily I heard about the concept of &lt;a href=&#34;https://www.servethehome.com/introducing-project-tinyminimicro-home-lab-revolution/&#34;&gt;TinyMiniMicro&lt;/a&gt;
and got myself a Lenovo ThinkCentre M73 Tiny.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-6.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-6_hu213fcc0ac78d601bc735238c2bfb774f_1857759_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The original TinyMiniMicro setup. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The original TinyMiniMicro setup. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Damn, those hard drives sure are noisy, apparently due to WD running those at 7200rpm.
My goal became to silence those hard drives as much as possible. I got a lot of acoustic foam, and what ended up working
was to stack the drives horizontally, and add some foam between the pieces, that got rid of the humming. I also
added a fan to keep the drives from overheating.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-7.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-7_hu3cd2dff577803d2344a9558f914c6e7a_2315883_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The TinyMiniMicro setup with some foam. I added the fan later. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The TinyMiniMicro setup with some foam. I added the fan later. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Hold on, the Raspberry Pi 4 is allegedly usable as a home server now? And it uses even less power when idling?
My goal then became to have a server setup that has a single-digit idle power consumption, meaning less than 10 watts.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-8.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-8_hu2a06d0b2d5069fb969becfe349f15773_1660532_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The Raspberry Pi 4 that I did testing with. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The Raspberry Pi 4 that I did testing with. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Unfortunately I could not get the software part running right, the setup would freeze due to unknown reasons. At least
&lt;a href=&#34;https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/&#34;&gt;I wrote a post about troubleshooting ZFS issues&lt;/a&gt;
as part of this run, and Google keeps recommending it to people according to Google Search Console data.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/screenshot-google.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/screenshot-google_hu09fbb762bafbde7853da1338fb373811_201145_1280x800_fit_box_3.png&#34;
             width=&#34;933&#34;
             height=&#34;800&#34;
             alt=&#34;If Google keeps recommending it, then I guess it&amp;#39;s useful to people. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      If Google keeps recommending it, then I guess it&amp;#39;s useful to people. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Alright, I can&amp;rsquo;t make the setup more efficient. Hold on, I also have a desktop PC, and that also consumes power when
idling. That seems wasteful. My goal became to do my computing all on one machine, filling the roles of a server,
workstation and gaming PC all at the same time. &lt;a href=&#34;https://ounapuu.ee/posts/2021/05/23/self-hosting-endgame/&#34;&gt;And I did it, and wrote a post about it as well!&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-9.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-9_hu12b911fe17f91ea97fa81a0db89546d9_2772994_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The all-in-one setup. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The all-in-one setup. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Spoiler alert: it was in fact &lt;em&gt;not&lt;/em&gt; the end-game of my setup, because I soon discovered that having everything on the
same PC requires quite a special setup, and a reboot on the host OS affects all the other use cases. If you care about
uptime, then it&amp;rsquo;s probably better to have separate machines for all of that. I didn&amp;rsquo;t want to give up on the idea of virtualized
setups just yet, and thus my goal became to have one PC for my server and gaming needs. Games need storage, lots of it.
My server has lots of storage. Makes sense, right?&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-10.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-10_huec4a047eb42ac3a8ad29d0392314a0a2_2112846_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The heart of the new setup: ASRock X570M Pro4 motherboard.  &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The heart of the new setup: ASRock X570M Pro4 motherboard.  
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;After using that setup, &lt;a href=&#34;https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/&#34;&gt;I discovered that VR and virtualized gaming don&amp;rsquo;t mix that well.&lt;/a&gt;
Damnit. Oh, hey, I have all these SSD-s now from that experiment, and if I shrink my data needs a bit, I could
fit it all on a mirrored setup of two 4TB SSD-s, and they don&amp;rsquo;t use much power as well. That opened up a
lot of possibilities regarding my next setup because a lot of small PC-s can handle two SATA SSD-s just fine.
My goal became to build a silent and efficient home server. &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;This resulted in the ASRock Deskmini X300 setup.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-11.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-11_hud6ecd4468bba7f8211a95d3db7ea8146_4039917_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Look how tiny it is!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Look how tiny it is!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;blockquote&gt;
&lt;p&gt;I’m hoping that the current DeskMini-based server configuration is the one that will last me a while.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That aged well.&lt;/p&gt;
&lt;p&gt;I had a ThinkPad T430 lying around, and now that my storage needs were served by two 4TB SSD-s, I could
finally do that &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/stupid-project-ideas-1/&#34;&gt;one stupid idea from 2020&lt;/a&gt;.
I also dislike knowing that I have perfectly good hardware sitting in a box and collecting dust.
My goal then became to use
my ThinkPad T430 as a low-power, silent and efficient home server.
&lt;a href=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/&#34;&gt;It was successful.&lt;/a&gt;
&lt;a href=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/&#34;&gt;Or at least mostly successful.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-12.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-12_hu5d12ec59cca79144422c6fc1b7a9b98d_4916185_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The ThinkPad T430 as a server.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The ThinkPad T430 as a server.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;But the search for that elusive combination of low power consumption, adequate performance, stability, resilience and silence
was not over. My blog gained traction from time to time and it would be really embarrassing if an overheated
laptop or a longer power outage resulted in an outage. You see, the ThinkPad was good as a server, but it
still overheated under specific conditions and once the battery runs out, the &amp;ldquo;Power on with AC attach&amp;rdquo; functionality
does not work, which is quite bad for a server. My goal became to find that elusive solution.&lt;/p&gt;
&lt;p&gt;I tried the LattePanda V1 since I got it for a good price. &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/&#34;&gt;Didn&amp;rsquo;t work out for my use case, sadly.&lt;/a&gt;
The website situation got solved with moving that portion of my
self-hosting setup to &lt;a href=&#34;https://ounapuu.ee/posts/2023/03/26/hosted-on-kspace/&#34;&gt;k-space hosting&lt;/a&gt;, leaving me to do further experiments
without affecting my lovely website that much.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-13.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-13_hu999cfc2d93af52838b5cd766ae84fd24_3777695_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The LattePanda test setup.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The LattePanda test setup.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;After keeping my eyes open for various options, &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/&#34;&gt;the Zimaboard was the one that finally won.&lt;/a&gt;
Silent. Meets my storage, networking and performance requirements. Small. Super low power usage. x86 based so I know my stuff
runs on it well. It&amp;rsquo;s not perfect, but it did all of those things.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-14.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/media/setup-14_hu147012bd2854d1f9428512f78d118e50_2529969_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Hopefully this one sticks.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Hopefully this one sticks.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;And there you have it, the reason why I have written over half of these blog posts, and why my setup just keeps changing
and depleting my wallet at the same time.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s be honest, I&amp;rsquo;m sure that as soon as I find something
exciting in the tech world to play around with, I&amp;rsquo;m probably going to try it out. Some call it &lt;em&gt;passion&lt;/em&gt;, I call it
&lt;em&gt;lack of fiscal responsibility&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Free tech tip&lt;/strong&gt;&lt;/em&gt; to those starting out in self-hosting: experimentation
is really fun, but it&amp;rsquo;s easy to lose focus and get carried
away with changing your setup all the time. You can do a lot with much less
hardware than you think, so try to approach building a minimum viable home server
setup first and upgrade only if absolutely necessary. In my experience it&amp;rsquo;s just as fun
and probably much cheaper as well.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Zimaboard: the closest thing to my dream home server setup</title>
      <link>https://ounapuu.ee/posts/2023/10/09/zimaboard/</link>
      <pubDate>Mon, 09 Oct 2023 14:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/10/09/zimaboard/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I stumbled upon &lt;a href=&#34;https://youtu.be/V_ZdvrIMKEQ&#34;&gt;this Hardware Haven video about the Zimaboard recently.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I liked it a lot.&lt;/p&gt;
&lt;p&gt;I finally bought one.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/cover_hu2c08a0a24f9b2677477296053ae56db2_2448960_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;In short, &lt;a href=&#34;https://www.zimaboard.com/zimaboard/product&#34;&gt;Zimaboard&lt;/a&gt; is a small single-board computer that is relatively affordable and comes
with an interesting selection of ports, which includes an exposed PCI Express port.&lt;/p&gt;
&lt;p&gt;Before we get down to the build, here&amp;rsquo;s a list of aspects that I want to see in my dream home server:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;low power usage (2-15W typical power usage)&lt;/li&gt;
&lt;li&gt;8GB of RAM or better&lt;/li&gt;
&lt;li&gt;enough performance to run my workloads, most of which are containerized&lt;/li&gt;
&lt;li&gt;2x SATA or NVMe SSD slots, plus option for a third drive for the OS&lt;/li&gt;
&lt;li&gt;passively cooled and completely silent&lt;/li&gt;
&lt;li&gt;compact size&lt;/li&gt;
&lt;li&gt;gigabit Ethernet or better&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You might be thinking, &amp;ldquo;&lt;em&gt;Wait, that&amp;rsquo;s your &lt;strong&gt;dream setup&lt;/strong&gt;? No clusters of machines, Threadrippers, 10 Gigabit networking, crazy number of disks?&lt;/em&gt;&amp;rdquo;.
Well, yes. After years of trying all sorts of setups and learning about my home server usage patterns, this is the set of requirements that finds a balance between performance, efficiency
and silence.&lt;/p&gt;
&lt;h3 id=&#34;basics&#34;&gt;Basics&lt;/h3&gt;
&lt;p&gt;I recommend checking &lt;a href=&#34;https://www.zimaboard.com/zimaboard/product&#34;&gt;the product page&lt;/a&gt; to see the exact specifications.
The configuration I bought was the 832 model: 8GB of RAM, 32GB of eMMC storage and a quad-core Intel Celeron N3450 CPU.
It&amp;rsquo;s not the most powerful setup or even a recent one with the CPU being from 2016, but it&amp;rsquo;s just powerful enough to fit
my needs.&lt;/p&gt;
&lt;p&gt;This variant of the board costs 200 USD, but other configurations cost much less
than that, I just needed the extra memory to be on the safe side. If you don&amp;rsquo;t
care about the noise and size aspect of home servers, then you can get a better
deal on the used market (&lt;a href=&#34;https://www.servethehome.com/introducing-project-tinyminimicro-home-lab-revolution/&#34;&gt;see the TinyMiniMicro project for inspiration)&lt;/a&gt;,
but as you know by this point, I care about those aspects a lot.&lt;/p&gt;
&lt;h3 id=&#34;the-package&#34;&gt;The package&lt;/h3&gt;
&lt;p&gt;What sets the Zimaboard apart from other single board computers is how polished the product feels.
Unlike a board like the Raspberry Pi, this one comes with a case and a cooling setup
already attached to it. I suspect that a similarily configured Raspberry Pi 4/5
with all the accessories added on top would result in a price that&amp;rsquo;s quite
similar to the cost of a top-of-the-line Zimaboard.&lt;/p&gt;
&lt;p&gt;The heatsink looks great and is practical at the same time.
Under the most torturous loads I could only see the CPU being around 72°C and due
to it being passively cooled it made absolutely no noise. With the case being
present, I do not have to worry about placing the board on my desk and scratching
the table or shorting something out.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/theboard.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/theboard_hu6c1b6a830bf3d559150de9b4726aa27f_3498380_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Just plop it wherever.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Just plop it wherever.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The board does not seem to have a power button, but by default it&amp;rsquo;s configured
to power on as soon as you connect the power supply, which is great if you&amp;rsquo;re
going to use this as a home server.&lt;/p&gt;
&lt;p&gt;The box that the board was shipped survived and overall I&amp;rsquo;d say that the packaging
is good. The board comes with some stickers and a single SATA data+power cable.
The included power adapter comes with EU, US and UK plugs all included.&lt;/p&gt;
&lt;p&gt;Shipping to Estonia was quite fast, taking just 10 days. The shipping costs were
18 USD.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/box.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/box_hu76da91a855cec7efe7cc445c706070f2_2144401_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The box did its job.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The box did its job.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;storage&#34;&gt;Storage&lt;/h3&gt;
&lt;p&gt;The included 32GB eMMC storage is fine for hosting your operating system. The
read speeds cap out at around 175 MB/s and the typical write speeds I observed
were around 50-100 MB/s. The storage is identified as &lt;code&gt;mmc-BJTD4R_0xc7d04e40&lt;/code&gt; under
&lt;code&gt;/dev/disk/by-id/&lt;/code&gt;, and searching online suggests that it&amp;rsquo;s a Samsung chip.&lt;/p&gt;
&lt;p&gt;Because this board offers two SATA ports, I also added a SATA Y-cable to my order
(4 USD) so that I can take my existing Samsung 870 QVO 4TB SATA drives and move
my home server setup to this board.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/ycable.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/ycable_hu274ae1922594f3b973c5b875085287a1_3577750_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;SATA Y-cable in action.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      SATA Y-cable in action.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Allegedly this cable can also be used to drive
two 3.5&amp;quot; hard drives powered by the board itself according to &lt;a href=&#34;https://shop.zimaboard.com/products/sata-y-cable-for-zimaboard-2-5-inch-hdd-3-5-inch-hdd-raid-free-nas-unraid&#34;&gt;the shop page
for the Y-cable&lt;/a&gt;, but I suspect that at that point you&amp;rsquo;ll be pushing the limits of
the 12V/3A power adapter.&lt;/p&gt;
&lt;p&gt;There is also a white drive activity LED
placed near the SATA power connector on the board. Perhaps not for everyone, but I
like the aesthetic and the sight of the server doing server things.&lt;/p&gt;
&lt;p&gt;The performance of the SATA ports is what you would expect. When performing
read operations on both SSD-s I saw the maximum total transfer rates hover around
900-950MB/s, which is pretty close to the SATA III transfer speed limit.&lt;/p&gt;
&lt;p&gt;There is no native way to mount the two SATA drives to the Zimaboard. The creators
of the board do sell a metal bracket, but it doesn&amp;rsquo;t seem to integrate that well
to the board. However, &lt;a href=&#34;https://www.printables.com/model/224057-zimaboard-dual-hdd-stand&#34;&gt;there exists a 3D printable design that houses two
2.5&amp;quot; drives, even 15mm ones&lt;/a&gt;, and
that&amp;rsquo;s how I ended up using a 3D printer for the first time in my life.
The print was done using a &lt;a href=&#34;https://wiki.k-space.ee/en/utilities/3D-Printer&#34;&gt;Voron v2 Afterburner printer hosted at k-space&lt;/a&gt;
and it came out pretty well.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/3dprint-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/3dprint-1_huf70380e185f90e159fc776b2831d9896_3078409_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Print in progress.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Print in progress.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/3dprint-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/3dprint-2_hu752c37d1e17753c6e343ccb4b873a65f_2168377_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The final product&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The final product
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/3dprint-3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/3dprint-3_hu10c2dc0a06747a74e577cc516acca8dd_2202245_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Another angle.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Another angle.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/3dprint-4.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/3dprint-4_huf319adc4e48cc6a298722bcfb2e7e1c5_2316941_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Some 3D printing related inconsistencies, but nothing serious.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Some 3D printing related inconsistencies, but nothing serious.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The SSD mounting holes were a bit finicky due
to slight printing errors, and during my first installation attempt I forgot to
put in the plastic middle layer of the case that&amp;rsquo;s between the PCB and the stock
bottom cover, but other than that the installation was a breeze.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/board-backside.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/board-backside_hu274ae1922594f3b973c5b875085287a1_3220963_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Installation of the caddy requires removing the stock backplate and splitting it.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Installation of the caddy requires removing the stock backplate and splitting it.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-1_hua9184edc251c38c0f11832201baa618f_2992666_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The finished result.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The finished result.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;






  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-2_hu06f0f4a327e982253f04ee2e79d40f70_1943488_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-3_huee34d1e5685f5eec5ce4dd6fd718bd5e_1955399_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-4.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-4_huc3f76dc845f779b66651336a37be1923_2389369_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-5.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-5_huaae2ce206b36cbc8496a7ca6fb8df953_2182946_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-6.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-6_hu274ae1922594f3b973c5b875085287a1_2559258_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-7.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/caddy-7_hu6005690906979ff4f13657485fce192e_1574253_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;The drives never hit above 64°C, which is absolutely okay for these SSD-s. I&amp;rsquo;m not
sure how actual spinning hard drives might fare in this environment, but I don&amp;rsquo;t
think that it&amp;rsquo;s going to be that serious because 2.5&amp;quot; hard drives should not
generate as much heat in the first place.&lt;/p&gt;
&lt;h3 id=&#34;power-consumption&#34;&gt;Power consumption&lt;/h3&gt;
&lt;p&gt;What I love about this board is the power usage. At this point my home server
is not even the most power hungry component of my setup, that honor now goes
to the ISP-provided router/modem combo box that always draws at least 12W, even
when it&amp;rsquo;s in bridge mode.&lt;/p&gt;
&lt;p&gt;Here are my power usage measurements (measured with a simple power meter):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;idle: 2.5W&lt;/li&gt;
&lt;li&gt;no drives attached, CPU stress test (&lt;code&gt;stress -c 4&lt;/code&gt;): 9.0W&lt;/li&gt;
&lt;li&gt;one Samsung 870 QVO 4TB SSD attached, CPU stress test: 13.2W&lt;/li&gt;
&lt;li&gt;2 SSD-s attached, typical power draw in my setup (~10-40% CPU usage): ~8-9W&lt;/li&gt;
&lt;li&gt;2 SSD-s attached, max load on SSD-s and CPU: ~14W&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Zimaboard, ISP modem/router box, my TP-Link router/Wi-Fi AP and my CyberPower
UPS all together use at most around 34W, all combined. That&amp;rsquo;s even less than
what my Dell monitor uses at reasonably low brightness levels!&lt;/p&gt;
&lt;p&gt;These tests are not scientifically accurate, but they should give you an idea on what
power consumption numbers to expect when running this setup.&lt;/p&gt;
&lt;h3 id=&#34;performance&#34;&gt;Performance&lt;/h3&gt;
&lt;p&gt;I use a simple Prometheus Node Exporter + Grafana setup to view how much resources
my various servers use. My home server has lately either been an &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;ASRock Deskmini X300 based setup&lt;/a&gt; or
an &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/&#34;&gt;old ThinkPad T430&lt;/a&gt;, and something that both had in common was that the CPU usage was
generally very low, mostly at or below the 10% mark. There would be bursty loads
from time to time and backup processes running that bump that up, but not significantly.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/prom-old.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/prom-old_huea11d161badcce588cbed615ac1c56a1_132285_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;674&#34;
             alt=&#34;Typical CPU performance on a ThinkPad T430 acting as a home server.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Typical CPU performance on a ThinkPad T430 acting as a home server.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Memory usage of my setup was also quite low, with all my services and containers
fitting into 2GB during typical usage. With this information and some CPU performance
comparisons done, I knew that the Zimaboard will likely be able to handle my home
server tasks.&lt;/p&gt;
&lt;p&gt;This board is not very powerful, but if you mainly rely on containerized workloads
and can rely on Intel QuickSync to accelerate media transcodes, then you&amp;rsquo;ll be
just fine.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/prom-new.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/prom-new_hu9c391d9431a1ac152a2c6a20c90ec904_336307_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;674&#34;
             alt=&#34;Zimaboard CPU usage, which includes migrating filesystems, creating new multi-TB
backups from scratch and a lot of Jellyfin playback and GPU-accelerated transcoding.
Pretty much the worst case scenario for this board.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Zimaboard CPU usage, which includes migrating filesystems, creating new multi-TB
backups from scratch and a lot of Jellyfin playback and GPU-accelerated transcoding.
Pretty much the worst case scenario for this board.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I was actually impressed with how well the GPU-accelerated transcode
worked on this machine once you set everything up properly.
If you&amp;rsquo;re running Linux and Jellyfin,
run &lt;code&gt;vainfo&lt;/code&gt; to get a list of supported codecs and make sure that you have hardware
decoding selected for those in Jellyfin settings. Also enable hardware encoding.
I checked with &lt;code&gt;intel_gpu_top&lt;/code&gt; to see if work was offloaded to the GPU and saw
activity there, which means that hardware acceleration for Jellyfin worked out great!
&lt;a href=&#34;https://jellyfin.org/docs/general/administration/hardware-acceleration/&#34;&gt;Check the Jellyfin hardware acceleration for more details on other requirements
that have to be met for all of this to work.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/jellyfin-qs-conf.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/jellyfin-qs-conf_hu43c0581b909067652f5756f1f94a087a_121374_1280x800_fit_box_3.png&#34;
             width=&#34;715&#34;
             height=&#34;800&#34;
             alt=&#34;The Jellyfin QuickSync hardware acceleration config that works on my Zimaboard.
May not be 100% correct but so far have not encountered issues.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The Jellyfin QuickSync hardware acceleration config that works on my Zimaboard.
May not be 100% correct but so far have not encountered issues.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/intel-gpu-top.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/intel-gpu-top_huea9f3ca46683dfd1ed036b99d4cb02af_34076_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;204&#34;
             alt=&#34;intel_gpu_top during Jellyfin transcoded media playback. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      intel_gpu_top during Jellyfin transcoded media playback. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;caveats&#34;&gt;Caveats&lt;/h3&gt;
&lt;p&gt;The Zimaboard does ship with a Linux-based OS called CasaOS. However, I had no
intention of using it as I know what my requirements are and my infrastructure
is already decently documented and set up via Ansible, which is why I can&amp;rsquo;t say
how good that experience is. I also did not test Windows 10 or 11.&lt;/p&gt;
&lt;p&gt;During testing, I noticed that the USB 3 ports can act a bit weird. The Fedora
Server USB stick would not boot properly if connected to one of the USB ports,
and when doing other tests with external USB storage I noticed hiccups from time to time.
Not sure what might be the cause, but I&amp;rsquo;m writing it down nevertheless. It&amp;rsquo;s not
a dealbreaker for me luckily since I don&amp;rsquo;t rely much on the USB ports in typical use anyway.&lt;/p&gt;
&lt;p&gt;I did not test the PCI Express port, simply because I don&amp;rsquo;t need it, yet. It&amp;rsquo;s
a great addition, though, and opens up plenty of modding capabilities in the
future.&lt;/p&gt;
&lt;h3 id=&#34;fedora-server-and-btrfs&#34;&gt;Fedora Server and btrfs&lt;/h3&gt;
&lt;p&gt;The Zimaboard gave me an opportunity to start fresh with my home server.&lt;/p&gt;
&lt;p&gt;I made a leap: I&amp;rsquo;ve ditched ZFS and am now running
Fedora Server with my storage being on a btrfs RAID1 setup, snapshotted
and backed up using &lt;a href=&#34;https://ounapuu.ee/posts/2022/07/09/btrbk-is-awesome/&#34;&gt;btrbk&lt;/a&gt;.
It was a bit tricky to migrate and set everything
up regarding backups and snapshotting, but I got it working.&lt;/p&gt;
&lt;p&gt;ZFS is great, but it has always felt like an unwanted guest in the Linux ecosystem.
The kernel developers don&amp;rsquo;t care much for maintaining compatibility with ZFS since
it&amp;rsquo;s not in the kernel due to licensing issues, and Ubuntu has been one of the few
distros that actually ships a kernel that includes ZFS built in. I didn&amp;rsquo;t want
to be tied to Ubuntu forever, especially because of how they try to make &lt;code&gt;snap&lt;/code&gt;
a thing. ZFS DKMS builds are generally okay on distros like Debian, but on
others you might find yourself not being able to access your data after a reboot
because of a kernel update.&lt;/p&gt;
&lt;p&gt;btrfs has had some issues in the past, especially with the RAID5/6 setup, but
in my single and dual disk setups it has been solid for years, except for that one time around
2018-2019 when I ran btrfs RAID1 over USB storage. To be fair to btrfs, that
was a pretty stupid setup.&lt;/p&gt;
&lt;p&gt;Before committing
to btrfs, I used two USB sticks to create a RAID1 setup and created real torture test scenarios.
Tests looked something like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;write a file to the filesystem&lt;/li&gt;
&lt;li&gt;use &lt;code&gt;md5sum&lt;/code&gt; to calculate a hash of it for verification purposes&lt;/li&gt;
&lt;li&gt;completely wipe one USB drive with &lt;code&gt;dd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;run &lt;code&gt;md5sum&lt;/code&gt; to calculate the hash again (it matched every time)&lt;/li&gt;
&lt;li&gt;run &lt;code&gt;btrfs scrub&lt;/code&gt; on the filesystem to fix all errors&lt;/li&gt;
&lt;li&gt;rinse and repeat with variations to this setup&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After doing all that, I was quite confident that this was going to work.&lt;/p&gt;
&lt;p&gt;One thing to note with &lt;code&gt;btrfs&lt;/code&gt;: if you&amp;rsquo;re running any type of multi-disk and
redundant setup like RAID1 or RAID10, then make sure to include the mount option
&lt;code&gt;degraded&lt;/code&gt; in &lt;code&gt;/etc/fstab&lt;/code&gt; so that you can still mount your filesystem if one or
more of your drives fail. If you lose too many drives then it&amp;rsquo;s still probably going to fail to boot.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s my &lt;code&gt;/etc/fstab&lt;/code&gt; setup to serve as an example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;LABEL=turbo /turbo      btrfs subvol=turbo,compress-force=zstd:1,ssd,degraded,nofail            0 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When doing the migration I kept all the paths the same, and each ZFS dataset
was recreated using &lt;code&gt;btrfs&lt;/code&gt; subvolumes, which is why this filesystem is mounted on a top-level folder.&lt;/p&gt;
&lt;h3 id=&#34;alternatives&#34;&gt;Alternatives&lt;/h3&gt;
&lt;p&gt;My notes for the next dream home server setup included a few candidates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the Zimaboard&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.asustor.com/en/product?p_id=79&#34;&gt;Asustor Flashstor 6&lt;/a&gt; or &lt;a href=&#34;https://www.asustor.com/en/product?p_id=80&#34;&gt;Flashstor 12&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a TinyMiniMicro style machine with at least two NVMe SSD slots&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first two fall nicely into my requirements for the dream home server. I picked
the Zimaboard mainly because it&amp;rsquo;s much cheaper and I was already running two SATA SSD-s
for my home server storage, so migrating would be really easy and I would not
have to buy any new drives.&lt;/p&gt;
&lt;p&gt;If large capacity SATA SSD-s start becoming less common and NVMe SSD-s become
even cheaper than they already are, then I&amp;rsquo;ll have to look into something like a Flashstor.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Overall, I&amp;rsquo;m very happy with this purchase. The performance is just enough for
my services to work reasonably fast, the board uses very little power and it&amp;rsquo;s
silent, and it looks good on my wall.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/wallsetup.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/wallsetup_hu147012bd2854d1f9428512f78d118e50_2529969_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Oh it&amp;#39;s a setup it&amp;#39;s a setup it&amp;#39;s a setup 🎶&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Oh it&amp;#39;s a setup it&amp;#39;s a setup it&amp;#39;s a setup 🎶
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/cablegore.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/10/09/zimaboard/media/cablegore_hu31ef052dce3896a81eccf0b787f8cd55_2097261_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Managing the coax cable like this feels so wrong, and yet it works fine.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Managing the coax cable like this feels so wrong, and yet it works fine.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;My setup is also quite flexible, so in case I need more resources, I can get
more Zimaboards and make them serve different purposes. However, it&amp;rsquo;s more likely
that I&amp;rsquo;m going to discover a new toy to experiment and play with by the time
I run out of resources on this one.&lt;/p&gt;
&lt;h3 id=&#34;2024-08-20-update&#34;&gt;2024-08-20 update&lt;/h3&gt;
&lt;p&gt;I ran the Zimaboard for over half a year, but decided to switch back to
the &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;ASRock Deskmini X300.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I still love the low power consumption and the expandability, but I ended up putting more load on the system than I
initially anticipated CPU-wise (running over 20 different Docker containers, some heavy). Should&amp;rsquo;ve guessed that it would happen eventually.&lt;/p&gt;
&lt;p&gt;If it came with an embedded AMD Ryzen APU, then that would probably change things up quite a bit.&lt;/p&gt;
&lt;p&gt;Zimaboard: still the closest thing to my dream home server, but it&amp;rsquo;s that last little bit of performance being missing
that gets me. If your needs are moderate or low, then it&amp;rsquo;s still a fantastic option, if the price is right.&lt;/p&gt;
&lt;p&gt;My eyes are now on
the &lt;a href=&#34;https://nascompares.com/2024/06/10/the-asustor-flashstor-gen2-performance-and-pci-lanes/&#34;&gt;Asustor Flashstor Gen 2&lt;/a&gt;
machines.
Up to 12 NVMe SSD-s plus 4 cores of AMD Ryzen goodness sounds too good to be true. Let&amp;rsquo;s see what the reviews will say
once it&amp;rsquo;s out.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>My trip to the Communication and Laptop Museum in Estonia</title>
      <link>https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/</link>
      <pubDate>Tue, 19 Sep 2023 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;While on vacation I went on a small road-trip across Estonia. During the second half of the trip I ended up being in Võrumaa,
and while driving I suddenly remembered a random fact that some people mentioned in a hackerspace Slack channel: there&amp;rsquo;s
a new museum around here!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/cover_hu385f4d5a990a29342c21f5824809d77d_4403768_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;&lt;a href=&#34;https://vorumaateataja.ee/koik-uudised/uudised/31199-marko-koemets-avas-laupaeval-oma-hallimae-talus-side-ja-laptopimuuseumi&#34;&gt;The museum was officially opened on 10th of June 2023&lt;/a&gt;
&lt;a href=&#34;https://menu.err.ee/1609004267/vorumaa-mees-avas-vanade-sidevahendite-naituse&#34;&gt;(more news coverage from ERR)&lt;/a&gt;
and when me and my wife got there, we were visitors number 96 and 97. By the time we arrived there, other visitors were
wrapping up and we were greeted by the owner of the museum.&lt;/p&gt;
&lt;p&gt;The bulk of the museum lives in a small wooden house. While the building might be small, there was plenty to look at on
the inside. Old servers, mobile phones, rotary dial phones, telecommunications equipment, promotional phone company
materials from 90s and 00s, it had it all. Some of the phones were even connected together and you could make actual
calls between them.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/promotional.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/promotional_hu681a24fa67aa808e5888084d0f2cf838_2537750_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Promotional materials and actual customer support desks that used to belong to EMT (Eesti Mobiiltelefon), a telecom
company that operated since 1991.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Promotional materials and actual customer support desks that used to belong to EMT (Eesti Mobiiltelefon), a telecom
company that operated since 1991.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/promotional2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/promotional2_huc8319c0eaca55d3ecbc9da310a57afc0_2269912_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Ads used to be wild.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Ads used to be wild.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/mobilephones.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/mobilephones_hu829554031ce5356e68e3c2df41309e94_3185078_1280x800_fit_q75_box.jpg&#34;
             width=&#34;504&#34;
             height=&#34;800&#34;
             alt=&#34;Lots of older mobile phones. Most of them were relevant during various parts of my childhood.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Lots of older mobile phones. Most of them were relevant during various parts of my childhood.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/bigphones.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/bigphones_hu8fa39ec6d39061d0e601320be5881964_2565698_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Big mobile phones.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Big mobile phones.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/ipuhhonee.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/ipuhhonee_hu54fa58e778eb6fc443da675b2f4a5a45_3379373_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The biggest mobile phone: promotional display monitor shaped as one of the first iPhones.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The biggest mobile phone: promotional display monitor shaped as one of the first iPhones.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Next to the building was an actual 2G/3G tower. Not as high as the real thing, but all the equipment was there and set up.
It wasn&amp;rsquo;t connected or operating for obvious reasons, but still, pretty cool to look at. So cool that I forgot to take
a picture of it.&lt;/p&gt;
&lt;p&gt;There were a bunch of old payphones lined up near the museum building. If I remember correctly, one of those was connected
up to the other phones inside. Now these were a blast from the past, I remember seeing these payphones all over Tallinn
during 2000s, didn&amp;rsquo;t use them much myself though. The payphones also contained examples of plastic cards that you had to
use to be able to use the payphone. Those had all sorts of wild designs so there was plenty of opportunity for personalization.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/payphone.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/payphone_hu86c512ffdb1d3ab405e1e22a414472b7_4773832_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Payphone with various pay cards present behind a plastic shield.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Payphone with various pay cards present behind a plastic shield.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/hellothere.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/hellothere_hu1e0e296e7d3b970c114cd4c7d87ff327_4757132_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Party like it&amp;#39;s 1999.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Party like it&amp;#39;s 1999.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The yard contains a selection of signs from telecom companies over the years. Those used to live on the outside of buildings
or within shopping centers.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/signs.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/signs_hu585ac8c76af86905c16b03258547bfdc_5296713_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;You can see when the rebranding started and evolved.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      You can see when the rebranding started and evolved.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/signs2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/signs2_hu8f257c245923bbb597947fdd89c41480_6239762_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The signs are bigger than you realize when you get closer to them.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The signs are bigger than you realize when you get closer to them.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The highlight of the museum for me was the owner and maintainer, Marko Koemets. It&amp;rsquo;s clear from the way he speaks that
he is passionate about communications equipment and technology in general. With each exhibition he always had interesting
stories to share, either about the equipment on display or the history of Estonian telecommunications starting from the
90s. I won&amp;rsquo;t spoil any of those here, you&amp;rsquo;ll have to visit and hear them first-hand.&lt;/p&gt;
&lt;p&gt;He also shared some future plans with the museum. If there are enough donations, then the museum
is going to expand with a second building dedicated to old laptops. The owner has 600+ laptops waiting to be shown off.&lt;/p&gt;
&lt;p&gt;If you ever find yourself in south-east Estonia and you&amp;rsquo;re interested in this type of tech, then do give this place a visit.
Details about opening times, prices and contact information can be found on
&lt;a href=&#34;https://www.lanec.eu/english.htm&#34;&gt;this lovely appropriately themed website.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you can&amp;rsquo;t make it there physically but are interested in supporting the museum, then you can make donations to the bank account
listed on the website. &lt;a href=&#34;https://www.lanec.eu/tasutaannetajad.htm&#34;&gt;You&amp;rsquo;ll also get a mention on the website!&lt;/a&gt;
There&amp;rsquo;s also merch that you can buy on-site to support the museum.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/merch.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/19/trip-to-communication-laptop-museum/media/merch_hufdff5ce5c0eed0764d21d029a3c30ff0_2395656_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Ultra limited edition &amp;#34;Side ja laptopi muuseum&amp;#34; mug. Inside are some pens, two of them belonging to a telecommunications
company EMT. &#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Ultra limited edition &amp;#34;Side ja laptopi muuseum&amp;#34; mug. Inside are some pens, two of them belonging to a telecommunications
company EMT. 
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I recommend checking the website and details about the opening times before planning a visit. At the time of writing
you need to call ahead to set up a visit. It&amp;rsquo;s definitely worth the effort and after the visit you can explore south
Estonia, &lt;a href=&#34;https://www.visitestonia.com/en/where-to-go/south-estonia&#34;&gt;there&amp;rsquo;s plenty to see and do there.&lt;/a&gt;&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Steam local network game transfers are a game-changer</title>
      <link>https://ounapuu.ee/posts/2023/09/11/steam-cache/</link>
      <pubDate>Mon, 11 Sep 2023 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/09/11/steam-cache/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Steam recently launched a new feature: &lt;a href=&#34;https://help.steampowered.com/en/faqs/view/46BD-6BA8-B012-CE43&#34;&gt;local network game transfers.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/cover_hu48d04272f62996ad8f383125bf9e7d24_1654203_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;599&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;The idea is simple: if you have a game downloaded on another PC and you&amp;rsquo;re both on the same local network, then Steam can download game data
from that PC, avoiding the need to download the game over public internet. Using this method you can reduce your internet
usage and enjoy faster download times.&lt;/p&gt;
&lt;p&gt;I think this feature is absolutely brilliant. There are many homes out there, even in developed countries, where the
internet connection sucks. The speed might be capped at something very slow, such as 10 Mbit/s down, or you might
have a bandwidth cap in place. Perhaps you have multiple gaming PC-s and you want to avoid downloading 100+ gigabytes
worth of files over the internet to avoid hitting your bandwidth cap. In those situations being able to download your games to a PC that has a bunch of storage in it
makes a lot of sense.&lt;/p&gt;
&lt;p&gt;This isn&amp;rsquo;t the only way to achieve the same goal as &lt;a href=&#34;https://lancache.net/&#34;&gt;projects like LanCache exist.&lt;/a&gt; However, with
Steam the setup is so simple that anyone who knows how to install Steam could achieve a similar result. The only caveat is that
you&amp;rsquo;re limited to games installed through Steam, LanCache supports many other services.&lt;/p&gt;
&lt;p&gt;Here are some ideas on how you can set up your own Steam cache.&lt;/p&gt;
&lt;h3 id=&#34;using-an-old-laptop&#34;&gt;Using an old laptop&lt;/h3&gt;
&lt;p&gt;If you have an older laptop around and it has a gigabit Ethernet connection, then that can be a good candidate for
setting up a Steam cache.&lt;/p&gt;
&lt;p&gt;The hardware I picked for this test is a ThinkPad T430. It has a 4 core CPU in it, 16 GB of RAM and plenty of ways
to attach storage to it. With storage I tried two approaches: using an older 1TB 2.5&amp;quot; SATA HDD, and using
two Samsung 870 EVO 1TB SATA SSD-s in RAID0.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/image0.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/image0_hue71e6d8ba4fc6cab9ef1b64a0e27d612_2391037_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;It&amp;#39;s a Steam cache. See, it says so right on the lid!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      It&amp;#39;s a Steam cache. See, it says so right on the lid!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The hard drive based solution isn&amp;rsquo;t something I recommend, unless you plan on running two or more in a RAID-like setup.
The Steam cache use case seems to have hit the limits of the hard drive and that limited the transfer speeds
significantly.&lt;/p&gt;
&lt;p&gt;The SSD-based setup was great! You might want to run something other than a RAID0 setup if you want to avoid a drive
failure taking your whole Steam library with you, I ran with this setup mainly to see where the limits are. The Steam
library is also something you can easily redownload, should things go really wrong.&lt;/p&gt;
&lt;p&gt;One benefit of setting up an older laptop as a Steam cache is that you can take it with you to a place that has great
internet connectivity, download your games there and bring it back home with you. That&amp;rsquo;s exactly what I did when
performing testing, I went to my local hackerspace, started the downloads, and came back half a day later to find
that over a terabyte worth of games had been downloaded. Doing the same on a slower home network would have taken days.
I guess the idea of &lt;a href=&#34;https://en.wikipedia.org/wiki/IP_over_Avian_Carriers&#34;&gt;IP over avian carriers&lt;/a&gt;,
&lt;a href=&#34;https://www.jeffgeerling.com/blog/2023/pigeon-still-faster-internet&#34;&gt;or over humans&lt;/a&gt;,
isn&amp;rsquo;t dead yet.&lt;/p&gt;
&lt;p&gt;When downloading the games, I noticed that Steam was hitting the CPU hard. Even on a decent 4-core Intel i7-3820QM the
CPU was often running at 100%. This meant that download speeds were usually around 500-700 Mbit/s, which is still good,
but nowhere near saturating the gigabit link that the laptop had.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/image1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/image1_hu86c49054af4840db91061392b808601d_4086501_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The CPU is really struggling here.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The CPU is really struggling here.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Now that I had all the games downloaded, it was time to test the performance. The maximum transfer speeds were around
400-500 Mbit/s over my local network. I used my Steam Deck over an USB-C dock to start the downloads and picked the
internal NVMe SSD as the download target to avoid any storage speed bottlenecks. I would have liked to see speeds
close to 1 Gbit/s, but these speeds are still a massive improvement if your network speeds are something like
50 Mbit/s down, that&amp;rsquo;s a 10x improvement!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/image2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/image2_hu69992d3c06cf8f05e1e058fb7c90f68f_3515799_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Typical transfer speeds observed with this setup.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Typical transfer speeds observed with this setup.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;If you&amp;rsquo;re worried about the fact that &lt;a href=&#34;https://learn.microsoft.com/en-us/lifecycle/products/windows-10-home-and-pro&#34;&gt;Windows 10 is going to lose support in October 2025&lt;/a&gt;
and your Steam cache PC is not supported by Windows 11, then don&amp;rsquo;t worry, you can do the same thing over Linux.&lt;/p&gt;
&lt;h3 id=&#34;using-a-virtual-machine&#34;&gt;Using a virtual machine&lt;/h3&gt;
&lt;p&gt;If you already have a NAS or a home server running, then you can create a new VM, add a bunch of storage to it,
setup the OS and Steam and you&amp;rsquo;re good to go!&lt;/p&gt;
&lt;p&gt;I did most of the testing on a Windows 10 VM and a 1TB HDD attached over USB 3.0. I setup the VM using a bog-standard
QEMU/KVM setup and set everything up through &lt;code&gt;virt-manager&lt;/code&gt; in Linux. The only noteworthy part is that I set up the
network interface as a &lt;code&gt;macvtap&lt;/code&gt; device, resulting in the VM showing up on my local home network as if it was a separate
PC. That step was taken to avoid any issues with the Steam instances on different PC-s not being able to transfer data
directly between each other.&lt;/p&gt;
&lt;p&gt;My server runs on the &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;ASRock Deskmini X300&lt;/a&gt;. It has plenty of CPU
performance, but during testing I ran into performance issues with the hard drive again. When I added SSD-based storage
to the VM, I found that the performance was great and quite similar to what I saw on the laptop.&lt;/p&gt;
&lt;p&gt;The downside with the Windows 10 VM setup was the CPU usage. While the VM was idling, my server saw a noticeable
increase in idle CPU usage, utilizing about 10-20% of my CPU at all times. During transfers the VM was using most of
my CPU cores.&lt;/p&gt;
&lt;p&gt;I did testing on a Linux VM to see if those are more efficient compared to a Windows 10 VM. The answer is obviously
&amp;ldquo;yes&amp;rdquo;, but there is one issue: I could not get Steam to work. At the time of testing, Steam had recently released a
bigger visual overhaul and I suspect that it might have something to do with those issues. The VM has no GPU
acceleration and opening Steam would result in &amp;ldquo;Loading user data&amp;rdquo; popup showing up, but nothing else happening.
I tried Ubuntu Desktop 22.04, Fedora Linux 38, and even Flatpak installations of Steam. All of them ran into the same
exact issue. There are probably ways to set Steam to not require GPU acceleration without opening its settings view
graphically, but I did not bother with that.&lt;/p&gt;
&lt;p&gt;If you like to think in virtual machines, then this is a good option. However, it&amp;rsquo;s not something I stuck with due to
the inefficient resource usage that a Windows 10 VM exhibited.&lt;/p&gt;
&lt;h3 id=&#34;using-containers&#34;&gt;Using containers&lt;/h3&gt;
&lt;p&gt;This is the solution that I am currently running.&lt;/p&gt;
&lt;p&gt;I recently found the &lt;a href=&#34;https://docs.linuxserver.io/images/docker-webtop&#34;&gt;LinuxServer.io webtop Docker images.&lt;/a&gt; These
containers allow you to run various Linux desktop environments and distros on the same machine. You can connect to them
using the integrated KasmVNC solution over a browser. You can even use your GPU on the container host machine to improve
the video rendering performance in the container!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/image3.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/11/steam-cache/media/image3_hu34521c4d2da8ffadea1d6cf53d059a51_604195_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;697&#34;
             alt=&#34;Fedora XFCE desktop running in a container.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Fedora XFCE desktop running in a container.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I picked the &lt;code&gt;fedora-xfce&lt;/code&gt; option because Fedora is great, and the XFCE desktop environment is not that resource
intensive. I also utilized &lt;a href=&#34;https://github.com/linuxserver/docker-mods/tree/universal-package-install&#34;&gt;the linuxserver.io package install mod&lt;/a&gt;
to install Steam on container startup. For networking, I created a separate Docker network using the &lt;code&gt;macvlan&lt;/code&gt; driver to
achieve something similar to the VM setup, resulting in the container showing up as a separate machine on the local
network. Inside the container I set up Steam to start on startup using standard GUI tools that XFCE provides for this
purpose.&lt;/p&gt;
&lt;p&gt;I really like this setup. I can easily point the Steam downloads to a larger storage pool and make use of all the CPU
power that Steam needs to perform the transfers.&lt;/p&gt;
&lt;p&gt;During testing the limitation seems to have been my Steam Deck. I could still not saturate the 1 Gbit/s link.&lt;/p&gt;
&lt;p&gt;The KasmVNC solution is quite nice and performant. The fact that I could use it in the browser makes it very convenient
to use as well.&lt;/p&gt;
&lt;p&gt;The CPU usage during idle is very small, except for when you accidentally leave the Steam window open with animated
content being displayed. During file transfers the CPU gets a beating, but it&amp;rsquo;s nothing the AMD Ryzen 7 5700G can&amp;rsquo;t handle.&lt;/p&gt;
&lt;p&gt;For storage I eventually ended up using a 1TB Lexar NVMe SSD. That&amp;rsquo;s not enough to download all the games I have in my
Steam library, but at least I can download those games that take 20+GB of space and not have to worry about downloading
those over a slower internet connection.&lt;/p&gt;
&lt;p&gt;I have not ended up using this setup too much yet, but I imagine that with games growing in size this is going to become
much more relevant for my Steam Deck. And if I were to move to the countryside where the only internet connection
available is a mobile 4G connection capped at 10 Mbit/s down, then this setup would be fantastic to have.&lt;/p&gt;
&lt;h3 id=&#34;tech-tips&#34;&gt;Tech tips&lt;/h3&gt;
&lt;p&gt;If you intend to run a similar setup, I recommend enabling &amp;ldquo;Scheduled updates&amp;rdquo; to run during the night. I set mine up
to auto-update games between 00:00 and 06:00, which is where I&amp;rsquo;m likely going to sleep and not notice that game downloads
are taking place. Steam is notorious for hogging all of the bandwidth on the network and this nifty feature helps
avoid disturbing other users on the network.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re performing the initial mass download of your games but would like for it to take place during scheduled times, start downloading
all of the games and then restart your machine. When Steam starts up again, you&amp;rsquo;ll notice that all your games are
queued up nicely to download during your scheduled updates time slot.&lt;/p&gt;
&lt;h3 id=&#34;caveats&#34;&gt;Caveats&lt;/h3&gt;
&lt;p&gt;This setup is not ideal and &lt;a href=&#34;https://help.steampowered.com/en/faqs/view/46BD-6BA8-B012-CE43&#34;&gt;the Steam support page highlights it well.&lt;/a&gt;
For example, this setup does not work in fully offline situations as internet connectivity is required for the initial
setup of the local network game transfer. I recommend giving that page a read to understand the requirements and technical specifics of this setup.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>The IKEA-powered homelab on a wall</title>
      <link>https://ounapuu.ee/posts/2023/09/07/ikea-powered-homelab/</link>
      <pubDate>Thu, 07 Sep 2023 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/09/07/ikea-powered-homelab/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I recently learned about &lt;a href=&#34;https://www.ikea.com/us/en/cat/skadis-series-37813/&#34;&gt;the IKEA SKÅDIS series&lt;/a&gt;, which is a
pegboard that supports a variety of extras. During my self-hosting journey having to figure out the best
place for putting all my compute stuff to has always been at the back of my mind, especially due to limited floor
space at my home. This pegboard gave me an idea.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/07/ikea-powered-homelab/media/image1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/07/ikea-powered-homelab/media/image1_hu829554031ce5356e68e3c2df41309e94_1159748_1280x800_fit_q75_box.jpg&#34;
             width=&#34;825&#34;
             height=&#34;800&#34;
             alt=&#34;Behold: the homelab on a wall!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Behold: the homelab on a wall!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Note that this idea also applies to other types of pegboards that you can find, I just went with the IKEA one for
&lt;em&gt;aesthetics&lt;/em&gt; (and the wife approval factor).&lt;/p&gt;
&lt;p&gt;The layout was improvised during the assembly process, but in the end I&amp;rsquo;m quite happy with how this turned out.
Everything is held in place with zip ties of varying sizes. The biggest ones I used are 360x4.5mm, which fit nicely
due to the slot width of the pegboard being 5mm. Some of the zip tie ends have been cut off for aesthetic reasons, but
most of them are intact in case I want to perform maintenance on this setup.&lt;/p&gt;
&lt;p&gt;There are some improvements that I might implement to a revision of this board. The USB cables connecting the external
SSD-s seem to be just small enough to be routable behind the pegboard. Other cables that are visible can probably
be hidden on the other side as well, giving the setup a much cleaner look.&lt;/p&gt;
&lt;p&gt;I also installed a second pegboard to have access to most commonly used cables and other stuff that I usually store
on my table in a chaotic fashion. It&amp;rsquo;s a work in progress, but it looks very promising already.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/09/07/ikea-powered-homelab/media/image2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/09/07/ikea-powered-homelab/media/image2_hu7b3bd0a0f44ba62b03e740abc8fd55d0_1954483_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The misalignment is a representation of my struggle to install the damn thing properly. I&amp;#39;ll fix it eventually.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The misalignment is a representation of my struggle to install the damn thing properly. I&amp;#39;ll fix it eventually.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Maintenance is not going to be very easy on this setup. Luckily the UPS should be maintenance-free for the next 2-4
years or whenever the battery dies, and with the ASRock Deskmini X300 I can unscrew the 4 screws on the back and slide
the thing out without having to take off the whole pegboard. I hope that the external SSD-s don&amp;rsquo;t die on me soon, but
if they do, then sliding them out of the zip ties should not be that difficult.&lt;/p&gt;
&lt;p&gt;Those more familiar with my content might see echoes of &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/&#34;&gt;the seedbox on a wall&lt;/a&gt;
in this post.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Why you might not want to publicly self-host a Wikipedia clone</title>
      <link>https://ounapuu.ee/posts/2023/08/29/why-you-might-not-want-to-self-host-wikipedia/</link>
      <pubDate>Tue, 29 Aug 2023 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/08/29/why-you-might-not-want-to-self-host-wikipedia/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;A while ago I wrote about how easy it is to &lt;a href=&#34;https://ounapuu.ee/posts/2021/12/09/self-hosting-wikipedia/&#34;&gt;download an archive of Wikipedia and host it anywhere
you want using Kiwix.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/29/why-you-might-not-want-to-self-host-wikipedia/media/image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/29/why-you-might-not-want-to-self-host-wikipedia/media/image_hu80c0f478b5e05bba3f8a245bca9d50f5_77089_1280x800_fit_q75_box.jpg&#34;
             width=&#34;920&#34;
             height=&#34;518&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Here are a few things you might want to consider before doing so yourself.&lt;/p&gt;
&lt;h3 id=&#34;the-spam&#34;&gt;The spam&lt;/h3&gt;
&lt;p&gt;I have a specific e-mail address set up so that readers of my blog can reach out to me no matter where they see my post.
I knew about the risk of spam, but receiving genuine feedback and questions is something I appreciate a lot and I&amp;rsquo;m
willing to mark everything else as spam if needed.&lt;/p&gt;
&lt;p&gt;What I did not expect was the amount of spam that originates from my self-hosted copy of Wikipedia, or that they&amp;rsquo;d
use the e-mail that is present on the main &lt;code&gt;ounapuu.ee&lt;/code&gt; domain.&lt;/p&gt;
&lt;p&gt;The scheme seems to work like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;crawl the web&lt;/li&gt;
&lt;li&gt;find links to genuine sources that have broken (HTTP 404 errors)&lt;/li&gt;
&lt;li&gt;spam the owner of the site with a politely worded e-mail template that asks you to fix those broken links with
these new ones that link to some marketing garbage or SEO spam&lt;/li&gt;
&lt;li&gt;go to step 0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And the worst part is that this probably works for a lot of smaller sites with non-technical owners.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve deleted most of the spam but have some recent examples (click on the image to see the higher quality image).&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/29/why-you-might-not-want-to-self-host-wikipedia/media/legitstuff1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/29/why-you-might-not-want-to-self-host-wikipedia/media/legitstuff1_hu810420c441c9eacce2fbef943816911f_195981_1280x800_fit_box_3.png&#34;
             width=&#34;1027&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/29/why-you-might-not-want-to-self-host-wikipedia/media/legitstuff2.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/29/why-you-might-not-want-to-self-host-wikipedia/media/legitstuff2_hu56230e58718c2686b4bd0c28216da0bd_197886_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;753&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Wikipedia has a lot of broken links and since my copy of it will always be a little bit out of date, I will probably
keep receiving spam like this until the end of time.&lt;/p&gt;
&lt;h3 id=&#34;security&#34;&gt;Security&lt;/h3&gt;
&lt;p&gt;Turns out that the version of Kiwix that you can &lt;code&gt;sudo apt install&lt;/code&gt; in Ubuntu Server 22.04 LTS is really out of date.
I learned about that when &lt;a href=&#34;https://www.ria.ee/en/cyber-security/handling-cyber-incidents-cert-ee/monitoring-cyberspace-and-impeding-incidents&#34;&gt;CERT-EE&lt;/a&gt;
reached out to me about an &lt;a href=&#34;https://github.com/kiwix/kiwix-tools/issues/605&#34;&gt;XSS vulnerability that Kiwix had&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re running a Kiwix version older than 12.0.0, then congratulations, you have this vulnerability!&lt;/p&gt;
&lt;p&gt;If your distro ships the latest version (Arch Linux, Fedora Linux etc.), then you&amp;rsquo;re good to go!&lt;/p&gt;
&lt;p&gt;If your distro doesn&amp;rsquo;t, then feel free to use the &lt;a href=&#34;https://github.com/orgs/kiwix/packages&#34;&gt;Kiwix Docker images&lt;/a&gt;
to get around that limitation.&lt;/p&gt;
&lt;p&gt;A very basic example command that should get you started:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run --rm  \
    --name=kiwix \
    -v /path/to/content/:/data \
    ghcr.io/kiwix/kiwix-serve:latest \
    /data/*.zim
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;2024-09-05-update-llm-bots&#34;&gt;2024-09-05 update: LLM bots!&lt;/h3&gt;
&lt;p&gt;Well, it turns out that Kiwix is horribly inefficient at disk usage when LLM data scrapers are hitting it at 50+ requests
per second.&lt;/p&gt;
&lt;p&gt;The following is the result of running Kiwix for 4 days. Over 8 TB of disk reads is incredibly wasteful.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;CONTAINER ID   NAME                          CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
734d8e1b4385   kiwix                         50.28%    10.36GiB / 27.27GiB   38.00%    7.73GB / 94.7GB   8.45TB / 12.9GB   7
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;ve decided to finally take down my instance of &lt;code&gt;kiwix.ounapuu.ee&lt;/code&gt; as a result.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>My experience at the k-space hackerspace hackathon</title>
      <link>https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/</link>
      <pubDate>Thu, 03 Aug 2023 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/</guid>
      <description>
        
          
          
          
        
        
        






  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/cover_hua5674d6445c9a94f435c4ddad024add8_1614719_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;626&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;&lt;a href=&#34;https://www.k-space.ee/&#34;&gt;k-space&lt;/a&gt; is a hackerspace in Tallinn, Estonia, and they organized
a hackathon recently. Unlike in most hackathons, in this one you could whatever you like with no
expectations about building a business or coming up with an MVP, just come on down to the space and
start working on your passion projects!&lt;/p&gt;
&lt;p&gt;I had some ideas on what I could do, but a few of them would have required access to workshop tools,
for which I did not have a key. I could always get one, but was too lazy to bother with it. I looked at
&lt;a href=&#34;https://wiki.k-space.ee/en/hackathon/2023&#34;&gt;the list of ideas that had been written down by other hackerspace members&lt;/a&gt; and picked
the one marked as &lt;code&gt;[easy]&lt;/code&gt;:  &lt;em&gt;Wire up electronic lock for workshop&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;If I achieve that goal, then I don&amp;rsquo;t have to worry about getting another key, and I could also get access to all
the workshop tooling! And since it was marked as easy, I figured that I could do it and have some time
left over for playing around with things like the laser cutter.&lt;/p&gt;
&lt;h2 id=&#34;impressions&#34;&gt;Impressions&lt;/h2&gt;
&lt;p&gt;Before I get to the technical part, I&amp;rsquo;d like to say a few words about the hackathon and the organization itself.&lt;/p&gt;
&lt;p&gt;The highlight of the hackathon was the immense sense of accomplishment that I felt. I work as a software
developer at my day job, which often involves dealing with incidents, migrating services from virtual machines
to Kubernetes, and sometimes from Kubernetes to Kubernetes, and anything else that comes my way.
The issue with most software teams is that the products that you build and maintain are often disconnected
from the real world. You don&amp;rsquo;t see the physical impact of the work that you do, and that can leave you
feeling empty. Sure, you spent days switching a service to Kubernetes, but you don&amp;rsquo;t feel like you did anything at all.&lt;/p&gt;
&lt;p&gt;During this hackathon I had the opportunity to build things with my own hands, and the door controller software doing
its thing resulted in real-life actions. You swipe the card, it beeps, and you can hear the electronic lock being
opened. That, and the opportunity to work on a project involving a Raspberry Pi and mounting it so neatly was very
satisfying.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image0.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image0_hu84fe62d88fa600dfb3f804cb93f3870a_8123925_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1200&#34;
             height=&#34;800&#34;
             alt=&#34;Software developer at work. Photo by Arti Zirk.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Software developer at work. Photo by Arti Zirk.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The hackathon crowd itself was not that big, hovering around 15 or so people. We even had guests from Germany who were
really helpful, great to talk with and they provided their expertise to help out wherever possible. I loved how the
collaboration worked for the rewrite of the door controller software to the Go programming language. One guy knew all about
the original software and how it works but was just learning Go, and the other guy was just visiting the space and had
extensive Go experience.&lt;/p&gt;
&lt;p&gt;Although this post is mainly about my own experience and the stuff that I worked on, there were plenty of other
cool projects going on during the hackathon as well. One that I really liked due to how practical it was is &lt;a href=&#34;https://wiki.k-space.ee/en/utilities/kegerator&#34;&gt;&amp;ldquo;the kegerator&amp;rdquo;&lt;/a&gt;
that provided cold carbonated mate tea throughout the hackathon. It lives in an old fridge and I think the execution
of it was really neat! &lt;a href=&#34;https://youtu.be/x4Qh9MTCzQo&#34;&gt;Here&amp;rsquo;s the livestream recording where other projects are also covered.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There were plenty of refreshments available and I took full advantage of that because if there&amp;rsquo;s one thing that can get
my brain working on overdrive, it&amp;rsquo;s copious amounts of sugar and caffeinated beverages. Oh, and we got pancakes as well!
Peetri Pizza really blew it with the pizzas though, never seen pizzas that are this sad.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image1_hu6aeb46a246e67404fa41f3020c471778_1636677_1280x800_fit_q75_box.jpg&#34;
             width=&#34;601&#34;
             height=&#34;800&#34;
             alt=&#34;Vibes on day 0.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Vibes on day 0.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;There were some small issues, such as the streaming setup crapping out at the last day during the part where we presented
our work, but overall I was happy with how the hackathon turned out.&lt;/p&gt;
&lt;p&gt;For future hackathons we probably need to do a bit more marketing and think about the dates more so that we can get
more enthusiasts on board. Having our German friends around really added a lot to the event and I would like to see
more knowledge-sharing between communities in the future.&lt;/p&gt;
&lt;h2 id=&#34;build-log&#34;&gt;Build log&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s a rundown of what I did during the hackathon.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/x4Qh9MTCzQo?t=985&#34;&gt;There&amp;rsquo;s also a video where I talk about my hackathon work!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Whenever you see the name &lt;a href=&#34;https://zirk.me&#34;&gt;Arti&lt;/a&gt;, then that refers to my good friend who helped out a lot during the hackathon.&lt;/p&gt;
&lt;h3 id=&#34;day-0&#34;&gt;Day 0&lt;/h3&gt;
&lt;p&gt;The hackathon began on 27th of July at 18:00.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=eZLQK60Cj3c&#34;&gt;Everyone presented their plans&lt;/a&gt; and then the work begun.&lt;/p&gt;
&lt;p&gt;I used the first evening to put together a rough plan and figure out what needs to be done. In short, the
plan was like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;buy some quick splice terminals&lt;/li&gt;
&lt;li&gt;assemble the Raspberry Pi with the custom HAT that is used to interact with the card reader and electronic door lock&lt;/li&gt;
&lt;li&gt;install the card reader on the door&lt;/li&gt;
&lt;li&gt;run the networking and power cables&lt;/li&gt;
&lt;li&gt;connect all the cables to the Pi&lt;/li&gt;
&lt;li&gt;set up the card reader software&lt;/li&gt;
&lt;li&gt;test in production&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After taking some pictures of the door lock test setup that another participant assembled, I decided to go and rest for what&amp;rsquo;s
to come.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image3_hu294e342fe12d62d84d32f47df9307362_8766195_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1200&#34;
             height=&#34;800&#34;
             alt=&#34;Door controller test setup. Photo by Arti Zirk.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Door controller test setup. Photo by Arti Zirk.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;day-1&#34;&gt;Day 1&lt;/h3&gt;
&lt;p&gt;This is the part where all the action started.&lt;/p&gt;
&lt;p&gt;I began by taking stuff apart.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image4.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image4_huef913d00af60cb7c4ec040915a1f4c21_2001594_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;After making some additional holes I ran the cable that connects to the electronic door switch. That was easy enough.&lt;/p&gt;
&lt;p&gt;Then I began thinking about where the Raspberry Pi door controller setup would go. The workshop is a very
dusty place and it would probably need some kind of protection from it. The first idea was to custom design
a 3D printed case or customise an existing design, but after a short discussion and brainstorming we realized
that getting a plastic box big enough to house the Pi and all the wiring makes more sense.&lt;/p&gt;
&lt;p&gt;Me and Arti set off to find something like that in the hackerspace. After going through lots of boxes and shelves,
we stumbled upon two metal boxes. Those boxes used to house some kind of security equipment and had inside
circuitry that converts 220V AC to 13.6V DC, which was ideal for our use case. It also had leads to connect
an UPS battery, which was even better!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image5.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image5_hu4843d4f50a138b4519fee3e91c2e7194_1532479_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Oh, and we also found this fun little thing.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image6.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image6_hu64c5c5a4e6d6939d4036be105e8a69d3_3148336_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Anyway, I went ahead and drilled some mounting holes for the Pi. We had M2.5 nylon screws and standoffs available
at the space, and with some assistance from Arti I learned about the wonders of countersink drill bits.&lt;/p&gt;
&lt;p&gt;I really liked how the mounted Pi looked. I&amp;rsquo;ve seen a ton of projects on YouTube and elsewhere with Raspberry Pi-s
being modded and mounted in all sorts of ways, but doing it myself felt really good, especially since I
was reusing an old metal box that had no other purpose.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image7.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image7_hu07efe01a24265be23400d4480941e825_1784005_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;I set up the microSD card with Raspberry Pi OS and figured that I could find it on the k-space network. However,
I then remembered that the internal network was &lt;code&gt;/16&lt;/code&gt;, which made the process much longer. I did not have access
to the network switch, but I did end up getting acces to &lt;em&gt;a&lt;/em&gt; Pi, it just wasn&amp;rsquo;t the one I just set up. That was a
fun discovery.&lt;/p&gt;
&lt;p&gt;I decided to go with the easy route and connect the Pi to an actual monitor and keyboard. That process ended
up being faster than scanning the network for Pi-s.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image8.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image8_hu0cb9271a8d12d93f8ae72d76a4f3a4a2_2927249_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;I also added an UPS battery to the setup. It barely fit the enclosure and it had to be raised a bit so that
the lid on the box would close properly. But it worked out really well!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image9.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image9_hud510d083c7cbf0d8b700f9541dc2b9dc_2180425_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;By the end of the day we also had the card reader installed on the door. We contemplated putting the reader on the other
side of the glass because the reader can read cards up to 9cm away, and quick tests showed that it would actually work,
however we had concerns about mounting it that way, and it would look a bit too janky even by k-space standards.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image10.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image10_huefdd8708d6198f81aaba5c4b39aa19b7_1852709_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;h3 id=&#34;day-2&#34;&gt;Day 2&lt;/h3&gt;
&lt;p&gt;Day 2 started with me trying to figure out how to run the cables. Making a suitably sized CAT5e cable was easy and
it worked on the first try and drilling a hole through plywood was also simple, but when trying to figure out how to
run the power I ran into a bit of trouble. There was very little room in the junction point that I intended to use, and
when my brain shorted out I asked Arti for some help (again). He figured out a way to run the additional cable while not
interfering with the power cables that ran to the light fixtures.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image11.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image11_hu5506e4f92dc0c840d13152ed4b7ac1de_2539967_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;In hindsight, that first aid kit didn&amp;#39;t really have anything that would help with an electricity-related accident.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      In hindsight, that first aid kit didn&amp;#39;t really have anything that would help with an electricity-related accident.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Due to the way we decided to run the card reader cables, we had to extend the cable that comes from the card reader.
For that I used a CAT5e cable and some quick splices. I later learned that using your thumb power alone is not enough to
splice cables, you actually need to push them all the way in with plyers. Once that was figured out, me and Arti
installed a very professional looking cable cover involving a random piece of plastic tube, zipties and screws.
Not that I needed the help, Arti was just working on porting some Python code to Golang and wanted a break. He ended
up making a lot of breaks, not sure what that says about the learning curve of Golang.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image12.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image12_hud79f347e5630403036845181afb26127_1817759_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Now came the difficult part. I had to wire up everything to the Raspberry Pi without breaking anything. I had the photos
I took on day 0, but in hindsight they were not that great since I had trouble figuring out what went where. Luckily
another door controller in the space had a similar setup and I could use that as a reference point.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image13.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image13_hu34954ae11237d86cff6b57e62f097b62_2493262_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;The Raspberry Pi HAT gets 12V input power, some of that is passed to the door controller, and then we have two leads
that are connected to both the door controller and the electronic lock. If someone swipes their card and they have access to
that particular door, the card reader light
goes green and 12V is applied to the electronic door lock, making it open it. There&amp;rsquo;s software that controls it, but
I did not have to worry about that too much because two other hackathon participants were working on that.&lt;/p&gt;
&lt;p&gt;I had Arti check the cabling before the initial test and after a hesitant go-ahead from him we powered it on. The Pi
powered on, but the card reader was not doing anything. It was supposed to do a few beeps and show a red light. Uh-oh.
That&amp;rsquo;s when Arti reviewed the quick splices that I used and pointed out that they were not pushed all the way in. After
using brute force (pliers), we powered it on again and it worked!&lt;/p&gt;
&lt;p&gt;The rest of the evening was spent testing out the card reader software that was being ported. That revealed a few issues,
but &lt;a href=&#34;media/dooropen.mov&#34;&gt;we did get a successful door opening!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At this point I was very happy and I think half the hackerspace heard that.&lt;/p&gt;
&lt;h3 id=&#34;day-3&#34;&gt;Day 3&lt;/h3&gt;
&lt;p&gt;At this point I was quite tired, but I felt really accomplished. I assembled the setup without burning everything down,
and I only shorted out the UPS battery once after absent-mindedly connecting the same alligator clip to both power
leads. Whoops.&lt;/p&gt;
&lt;p&gt;I spent that half-day cleaning everything up and mounting the power and networking cables to the wall. I also labeled
the box so that we know what that mysterious white box is and where it gets its power.&lt;/p&gt;
&lt;p&gt;At 14:00 the hackathon timer ran to zero and we were wondering what would happen with the countdown. Well&amp;hellip;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image14.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image14_hudca9a224681225fe0c4712425e6585cd_2414018_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;I presented my work, listened to what others were up to, and then we got some creative awards. Arti, the guy working
on the Golang port of the door controller software, got &amp;ldquo;K-SPACE Certified Go Developer&amp;rdquo;, and I am now a &amp;ldquo;K-SPACE
Certified Licensed Electrician&amp;rdquo;. Whoo!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image15.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image15_hu87067bac8811cb79977b43b8531422bc_2268357_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;I&amp;rsquo;d like to thank everyone who organized the event, and Arti Zirk for helping out with the project on many occasions!&lt;/p&gt;
&lt;p&gt;That was pretty much it!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image16.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/08/03/k-space-hackathon/media/image16_hu533c6cd9a31b8a9b9a306d4ceeb0e4f7_7574541_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1200&#34;
             height=&#34;800&#34;
             alt=&#34;Left: happy hackathon participant. Right: the guy responsible for organizing it. Photo by Arti Zirk.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Left: happy hackathon participant. Right: the guy responsible for organizing it. Photo by Arti Zirk.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;


        
        </description>
    </item>
    
    
    
    <item>
      <title>How I blew up my backup server (Valve pls fix)</title>
      <link>https://ounapuu.ee/posts/2023/06/10/how-i-blew-up-my-backup-server/</link>
      <pubDate>Sat, 10 Jun 2023 12:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/06/10/how-i-blew-up-my-backup-server/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;It all started with me getting a Steam Deck.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/06/10/how-i-blew-up-my-backup-server/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/06/10/how-i-blew-up-my-backup-server/media/cover_hu08f3cacfb2d2a0dce87a333884b231cf_1492343_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;770&#34;
             alt=&#34;RIP the Ubuntu Server installation on my LattePanda V1.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      RIP the Ubuntu Server installation on my LattePanda V1.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;
&lt;p&gt;After getting familiar with the Steam Deck and how the Proton compatibility layer works, I decided to write a
backup script that would back up everything in the home folder, excluding the Steam games themselves due to the sheer &lt;em&gt;&lt;strong&gt;girth&lt;/strong&gt;&lt;/em&gt;
of modern games (how the hell has GTA V ballooned up to 100+GB???).&lt;/p&gt;
&lt;p&gt;Among the folders that I backed up was &lt;code&gt;compatdata&lt;/code&gt;, a folder that contains files that Proton needs
to make Windows games run. If you browse the folder, the contents look like a mini-Windows installation,
and among those files you can also find your savegames. It made sense to me to back up this folder, and
I was quite happy to know that no matter what happens, my game saves would be safe as long as I made a copy
of this folder.&lt;/p&gt;
&lt;p&gt;Fast forward a few weeks: I&amp;rsquo;m doing some changes to my self-hosting infrastructure and decide to
redeploy changes to a backup server that I have. Nothing fancy, just Ansible roles that make sure
that the backup server has some configuration present and that the backup folder has the right permissions.&lt;/p&gt;
&lt;p&gt;The step looks something like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;- name: Fix permissions
  ansible.builtin.file:
    name: /path/to/backups
    state: directory
    owner: user
    group: user
    recurse: yes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Everything was okay until I saw this.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/06/10/how-i-blew-up-my-backup-server/media/image-0.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/06/10/how-i-blew-up-my-backup-server/media/image-0_hu124dfc209d07fd99423b5072b7bb15a9_29950_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;121&#34;
             alt=&#34;Uh-oh.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Uh-oh.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;After trying to recover the backup server and giving up as soon as I found that I cannot log in as root or
use &lt;code&gt;sudo&lt;/code&gt;, I gave up on doing that over the network and decided to get physical acccess to the server.
One reinstall and Ansible run later, the server is okay again.&lt;/p&gt;
&lt;h3 id=&#34;investigation&#34;&gt;Investigation&lt;/h3&gt;
&lt;p&gt;How did we end up here though?&lt;/p&gt;
&lt;p&gt;The backups from the Steam Deck are made to my home server using &lt;code&gt;rsync&lt;/code&gt;. The Steam Deck is just a Linux
machine, after all, and it made the most sense to me as I could make a backup that preserves all the
permissions and links. Should I ever screw something up, I can run the same script in reverse and have everything working
as it used to. I would hate setting up all my games and customizations again.&lt;/p&gt;
&lt;p&gt;The script looked something like this.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rsync -aAXzv --delete-before /home/deck/ backupuser@myserver:/path/to/steamdeck/ \
  --exclude .local/share/Steam/steamapps/common \
  --exclude .local/share/Steam/steamapps/downloading

sudo shutdown now
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Free tech tip: you can create a desktop entry for any script, add it to Steam, and run it
within the Steam Deck UI when you&amp;rsquo;re done playing. You&amp;rsquo;ll have a backup and the
system will shut down automatically once it&amp;rsquo;s done!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Nothing suspicious about the script, right?&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s one problem with it: &lt;code&gt;rsync&lt;/code&gt; also sends over links. These come in various types (symlinks, hard links)
and act as a pointer to another file or folder. Turns out that Proton (or Wine) loves using symlinks. Most
usages I saw were pointing towards common distributions of Proton, which makes perfect sense since it saves
disk space.&lt;/p&gt;
&lt;p&gt;There are also links that point to the root folder &lt;code&gt;/&lt;/code&gt;. The use case for these seems also makes sense:
present the game with a drive like &lt;code&gt;Z:&lt;/code&gt;, and point it to &lt;code&gt;/&lt;/code&gt; on Linux side, and now the user can easily
navigate their whole file system within the context of the game they&amp;rsquo;re running. Maybe you want to install
the game or its add-ons into a different folder, or maybe you want to load a save game that you
have somewhere on your Steam Deck.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/06/10/how-i-blew-up-my-backup-server/media/image-1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/06/10/how-i-blew-up-my-backup-server/media/image-1_hud38af6a29d5d7758509693f08a5ec960_35519_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;62&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Just one problem with this: what happens when you have this symlink on another machine, such as my backup server,
and you use Ansible to set the permissions for a folder containing this symlink, recursively?
And what if the &lt;code&gt;follow&lt;/code&gt; setting in Ansible &lt;a href=&#34;https://docs.ansible.com/ansible/latest/collections/ansible/builtin/file_module.html#parameter-follow&#34;&gt;is on by default since Ansible 2.5&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Turns out that the answer is that you&amp;rsquo;re going to mess up the file permissions on the whole machine, and
most things stop working at that point. I could still login to one user on that box, but I could not do
anything that would help recover the state of the machine at that point.&lt;/p&gt;
&lt;h3 id=&#34;the-fix-&#34;&gt;The fix (?)&lt;/h3&gt;
&lt;p&gt;There are many options for avoiding this problem, or at least working around it. I&amp;rsquo;m not sure what the perfect
fix looks like. In case you know one, let me know.&lt;/p&gt;
&lt;p&gt;One thing I added to my backup script was &lt;code&gt;--no-links&lt;/code&gt;, which instructs &lt;code&gt;rsync&lt;/code&gt; to not copy symlinks. That setting
has to appear after the first batch of arguments (&lt;code&gt;rsync -aAXzv&lt;/code&gt;) because otherwise it will be overridden by the &lt;code&gt;-a&lt;/code&gt;
parameter.&lt;/p&gt;
&lt;p&gt;I also updated my Ansible setup to avoid setting the permissions for the Steam Deck backup folder as a precaution.&lt;/p&gt;
&lt;p&gt;The major downside with my tweaks is that I don&amp;rsquo;t really have a &amp;ldquo;full&amp;rdquo; backup of my Steam Deck anymore.
I do have backups of my game saves, but recovering from the backup will become a bit of a hassle due to
me having to find and copy the game saves manually to the new &lt;code&gt;compatdata&lt;/code&gt; folders since the backed up
ones are missing all the symlinks to Proton/Wine-managed dependencies.&lt;/p&gt;
&lt;p&gt;Alternatively I can consider using a backup tool like &lt;code&gt;restic&lt;/code&gt; that &lt;a href=&#34;https://restic.readthedocs.io/en/latest/040_backup.html#backing-up-special-items-and-metadata&#34;&gt;should
preserve symlinks&lt;/a&gt;. I&amp;rsquo;ll just
need to also test recovering from that backup method.&lt;/p&gt;
&lt;p&gt;Either way I can&amp;rsquo;t really blame Valve, Wine or Proton developers for my own fuck-up.
They used symlinks in a way that allowed them to save disk space and give the user
easier access to their files in-game. It&amp;rsquo;s just unfortunate that I learned about
this setup the hard way.&lt;/p&gt;
&lt;p&gt;Completely unrelated to my issue, but I can&amp;rsquo;t help but remember &lt;a href=&#34;https://github.com/valvesoftware/steam-for-linux/issues/3671&#34;&gt;that one person whose machine got wiped by
Steam.&lt;/a&gt;&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>I held a talk about my self-hosting adventure!</title>
      <link>https://ounapuu.ee/posts/2023/05/26/my-selfhosting-adventure/</link>
      <pubDate>Fri, 26 May 2023 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/05/26/my-selfhosting-adventure/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;There are two reasons why I haven&amp;rsquo;t written much lately, and one of them is that I was cooking up a
talk about self-hosting, more specifically my own self-hosting adventure (the other one is the Steam Deck, more about
that in the future).&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/05/26/my-selfhosting-adventure/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/05/26/my-selfhosting-adventure/media/cover_hu7849b20ce9ad2599a2189d7278ab15e2_331880_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;That&amp;#39;s me!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      That&amp;#39;s me!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The talk took place on May 25th 2023 at &lt;a href=&#34;https://www.k-space.ee/&#34;&gt;k-space, a hackerspace in Tallinn, Estonia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This talk was livestreamed and you can watch the recording by &lt;a href=&#34;https://www.youtube.com/watch?v=V5dMKLHO4dM&#34;&gt;clicking on this link&lt;/a&gt;.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Dell Latitude 5411: the Linux compatibility sweet spot</title>
      <link>https://ounapuu.ee/posts/2023/04/28/dell-latitude-5411/</link>
      <pubDate>Fri, 28 Apr 2023 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/04/28/dell-latitude-5411/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;&lt;em&gt;Oh boy, here I go testing a new laptop again!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Well, it &lt;em&gt;was&lt;/em&gt; new back in 2020.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/04/28/dell-latitude-5411/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/04/28/dell-latitude-5411/media/cover_hu274ae1922594f3b973c5b875085287a1_1940795_1280x800_fit_q75_box.jpg&#34;
             width=&#34;994&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;You might remember &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/&#34;&gt;my article on why I went back to a ThinkPad T430 in 2022&lt;/a&gt;.
Or that other time when I got a new HP laptop for testing and got so frustrated that &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/&#34;&gt;I wrote about it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Well, today I&amp;rsquo;m writing about the &lt;a href=&#34;https://www.dell.com/en-nz/shop/business-laptop-notebook-computers/latitude-5411-business-laptop/spd/latitude-14-5411-laptop&#34;&gt;Dell Latitude 5411&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not the newest laptop in the world, but I decided to give it a go because of a few reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nobody wanted one at work due to the reputation of this laptop (sounds like a jet engine)&lt;/li&gt;
&lt;li&gt;it&amp;rsquo;s almost 3 years old at this point, which is the Linux compatibility sweet spot (in theory)&lt;/li&gt;
&lt;li&gt;there were some changes coming to the office, which meant more flexible seating arrangements and everything
being designed around USB-C, and I wanted to continue my employment at the same company which might have been tricky
with a ThinkPad T430&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And that&amp;rsquo;s how I ended up with one.&lt;/p&gt;
&lt;h3 id=&#34;the-linux-compatibility-sweet-spot&#34;&gt;The Linux compatibility sweet spot&lt;/h3&gt;
&lt;p&gt;If you have spent any time using new hardware on Linux, then you probably know how painful it can be.
You might get lucky and receive hardware that has support right from the get-go, but in most cases
there are issues around that may or may not get fixed with time.&lt;/p&gt;
&lt;p&gt;If you take the same device a couple of years later, it&amp;rsquo;s highly likely that the Linux support on it
will be much better. The price of the device will also be much lower than before, especially if you get
it on the second hand market.&lt;/p&gt;
&lt;p&gt;Any machine that falls into this time window is what I like to call &amp;ldquo;the Linux compatibility sweet spot&amp;rdquo;.
This Dell happens to be one such machine.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a quick rundown of some specifications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU: Intel Core i7-10850H 6C/12T, 2.7 GHz/ 5.1 GHz&lt;/li&gt;
&lt;li&gt;RAM: 32GB DDR4&lt;/li&gt;
&lt;li&gt;SSD: 512 GB NVMe&lt;/li&gt;
&lt;li&gt;OS: Fedora Linux 38&lt;/li&gt;
&lt;li&gt;Thunderbolt support&lt;/li&gt;
&lt;li&gt;Wi-Fi, Ethernet based on Intel chips&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Dell Latitude 5411 is powerful, and the components in it seem to be working just fine under Linux.
The USB-C port has not had major issues in a work environment, and it also works tolerably with a Dell WD19TB Thunderbolt 3
dock. My ultrawide monitor works, the Ethernet port on the dock can push gigabit speeds, and USB 3 ports work as expected.&lt;/p&gt;
&lt;p&gt;Honestly, that&amp;rsquo;s pretty much it regarding compatibility. It just works &lt;em&gt;most of the time&lt;/em&gt;, and that&amp;rsquo;s why I like this machine.&lt;/p&gt;
&lt;h3 id=&#34;oh-god-the-noise&#34;&gt;Oh god, the noise&lt;/h3&gt;
&lt;p&gt;Not everything about this machine is ideal, though.&lt;/p&gt;
&lt;p&gt;One of the first things I noticed with this machine is some kind of electrical noise. Some call it &amp;ldquo;coil whine&amp;rdquo;,
but all I know is that it&amp;rsquo;s this high-pitched squealing that&amp;rsquo;s coming from the laptop. Based on some searching
and personal testing I can confirm that the noise is related to the CPU switching between idle and really high turbo boost speeds very quickly. If you remember
the spec sheet, you&amp;rsquo;ll know that this CPU can reach &lt;strong&gt;5.1 GHz&lt;/strong&gt;. The noise is apparent whenever there&amp;rsquo;s a load
on the CPU, and it&amp;rsquo;s probably the sound of the power delivery components screaming in pain to deliver all this power
that this furnace of a CPU requires.&lt;/p&gt;
&lt;p&gt;There is a workaround to the electrical noise: try running the CPU at a lower speed. You can do that by disabling
Intel Turbo Boost, for example. There&amp;rsquo;s an UEFI setting for that, but on Fedora Linux 38 there&amp;rsquo;s an even easier
option in the form of the &amp;ldquo;Power Profiles&amp;rdquo; setting. When running the CPU slower, the noise is much less severe.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/04/28/dell-latitude-5411/media/image-1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/04/28/dell-latitude-5411/media/image-1_hu05ffe12eb702d9f1d40576e37277f00c_34310_1280x800_fit_box_3.png&#34;
             width=&#34;494&#34;
             height=&#34;492&#34;
             alt=&#34;Power Profiles in GNOME 44.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Power Profiles in GNOME 44.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This machine got the reputation of being a jet engine at work, and I agree with those people as this thing can
be damn loud even when it&amp;rsquo;s seemingly not doing much. This is a result of the CPU demanding a lot of power and the
cooling solution not being able to catch up. I feel that the stock fan curve is quite aggressive to prevent
any reliability issues after long-term use.&lt;/p&gt;
&lt;p&gt;If you have the same laptop and are looking for a fix to that issue, then you&amp;rsquo;re in luck!
There are plenty of solutions out there and I am personally a fan of &lt;a href=&#34;https://wiki.archlinux.org/title/fan_speed_control#Dell_laptops&#34;&gt;this Arch Wiki section&lt;/a&gt;.
I use &lt;a href=&#34;https://github.com/TomFreudenberg/dell-bios-fan-control&#34;&gt;dell-bios-fan-control&lt;/a&gt; to be able to control
the fan speed myself, and a simple script to fine-tune the behaviour of the system. The script looks something like
this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set -e
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Finding device path.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;device_path&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;echo /sys/devices/platform/dell_smm_hwmon/hwmon/hwmon*&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Device path: &lt;/span&gt;$device_path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Testing existence of paths.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$device_path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/temp1_input
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$device_path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/pwm1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Testing existence of paths done.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Disabling Dell stock BIOS fan control.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/root/.local/bin/dell-bios-fan-control &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Done!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; true; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  temp&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;cat &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$device_path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/temp1_input&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# Only two fan speed levels seem to exist, anything above 200 is basically&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# equivalent to full speed.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;temp &amp;gt; 50000&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt; &amp;gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$device_path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/pwm1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &amp;gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$device_path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/pwm1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  sleep &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The CPU is already temperature limited even in the stock configuration and will throttle under load, which should
mean that running the machine at a lower fan speed is just fine. Let&amp;rsquo;s hope that I&amp;rsquo;m right.&lt;/p&gt;
&lt;h3 id=&#34;the-damn-usb-c-port&#34;&gt;The damn USB-C port&lt;/h3&gt;
&lt;p&gt;While the USB-C port generally works well, I do still get annoyed with it. When connecting it to my
Dell WD19TB Thunderbolt 3 dock, there&amp;rsquo;s a good chance that it will do nothing but charge. Restarting the machine
with the dock connected will usually work, but it does take away from the portability of the setup.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m convinced at this point that USB-C is a cursed standard and will never &amp;ldquo;just work&amp;rdquo;. If you disagree, then
please look up any article that tries to explain how USB-C works and all the things you have to keep in
mind if you want to buy a damn cable for your device that does what you want. And then add Thunderbolt to the mix.&lt;/p&gt;
&lt;p&gt;If this aspect starts becoming very annoying, then it might become a dealbreaker for me, but right now it happens
infrequently enough that I can ignore it.&lt;/p&gt;
&lt;p&gt;Oh, wait, it happened again while writing this article. Damn it all.&lt;/p&gt;
&lt;h3 id=&#34;other-notes&#34;&gt;Other notes&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s a rundown of some observations that I&amp;rsquo;ve made while using this machine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you can actually boot from the microSD card, which is nice&lt;/li&gt;
&lt;li&gt;if you dual boot Fedora (two completely separate installations), then you&amp;rsquo;ll get two Fedora entries
in the boot options list, and although the names are identical, you can set a preferred boot order just fine&lt;/li&gt;
&lt;li&gt;keyboard and touchpad are not the best things out there, but they are at the very least tolerable&lt;/li&gt;
&lt;li&gt;cannot say the same about the &lt;a href=&#34;https://xkcd.com/243/&#34;&gt;clit mouse&lt;/a&gt;, it&amp;rsquo;s not that good&lt;/li&gt;
&lt;li&gt;battery life is what I expected from a laptop that&amp;rsquo;s not an Apple M1/M2 based laptop: 2-4 hours of use when doing
any real work, and up to 8 hours if your work involves staring at the screen with the brightness set to low and Wi-Fi/Bluetooth
turned off&lt;/li&gt;
&lt;li&gt;lowest power draw I observed with &lt;code&gt;upower&lt;/code&gt; was around 6 watts&lt;/li&gt;
&lt;li&gt;this machine has enough power to be a solid desktop replacement for software development&lt;/li&gt;
&lt;li&gt;the above is true even when you switch turbo boost off, you still have 6 cores running at 2.7 GHz!&lt;/li&gt;
&lt;li&gt;never managed to overheat the machine, even if I accidentally forgot to turn the laptop fan back on
while running heavy loads (CPU throttled to around 2.2-2.4 GHz, which is impressive!), or when I accidentally
put it in my backpack while it was still running&lt;/li&gt;
&lt;li&gt;&amp;ldquo;power on with USB-C connected&amp;rdquo; or any other UEFI setting with a similar purpose should be avoided, you
&lt;strong&gt;will&lt;/strong&gt; end up putting it into your backpack while it&amp;rsquo;s running&lt;/li&gt;
&lt;li&gt;this laptop has a full sized Ethernet port, which is incredibly handy for many IT professionals&lt;/li&gt;
&lt;li&gt;it even has the old Dell barrel plug charging port, which is great for situations where you&amp;rsquo;ve damaged the only
USB-C port on the laptop&lt;/li&gt;
&lt;li&gt;I don&amp;rsquo;t have too much faith in the construction of the machine, some parts feel very plasticky and might not hold up
well 5-10 years from now&lt;/li&gt;
&lt;li&gt;I was the one who actually made the recommendation to purchase this particular laptop model at my current job
back in 2020 due to the fleet of ThinkPads being compatibility nightmares with the monitors and docks available, and
in that regard it was an improvement. Shame about the fan and electrical noise.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Will I end up switching to a modern laptop now? Maybe. I&amp;rsquo;ve done so for my day job already, but the jury is still
out on whether I might end up with this particular model for my personal use (especially because of the damn Thunderbolt
dock issue). There are alternative laptops out there with similar pricing that are also in this Linux compatibility sweet spot.&lt;/p&gt;
&lt;p&gt;Should you get one? If the price is right and you don&amp;rsquo;t mind applying the workarounds for the issues I mentioned, then
go for it!&lt;/p&gt;
&lt;p&gt;I have restored some faith in modern laptops now. They all suck in different ways, but this one is
not the worst one, and that&amp;rsquo;s good enough for me. Probably. I&amp;rsquo;ll keep my ThinkPad T430 in an easy to reach spot, just in
case.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Life is maintenance, maintenance is life</title>
      <link>https://ounapuu.ee/posts/2023/04/20/maintenance/</link>
      <pubDate>Thu, 20 Apr 2023 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/04/20/maintenance/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Over my relatively short career (6+ years), I&amp;rsquo;ve noticed a change in the way I approach building things.
When I was still an inexperienced junior developer who barely survived operating in a Linux
environment and saw backend development as a black box, I was happy to get things
working at all.&lt;/p&gt;
&lt;p&gt;Nowadays, no matter what I do, I have to take maintenance into account.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/04/20/maintenance/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/04/20/maintenance/media/cover_huc0b1a451042aedd0bc2d8c53878829cb_1679870_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;619&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;In software development, having to account for maintenance means being picky about what dependencies to include.&lt;/p&gt;
&lt;p&gt;Do the developers of the dependency have a good track record?&lt;/p&gt;
&lt;p&gt;Does it still receive regular new releases?&lt;/p&gt;
&lt;p&gt;How often does it break compatibility with new major releases?&lt;/p&gt;
&lt;p&gt;Would it be possible to avoid including the dependency by going with another solution, such as writing a small amount
of code yourself?&lt;/p&gt;
&lt;p&gt;Is this project maintained by a single person?&lt;/p&gt;
&lt;p&gt;Or solely by a VC-backed company that is burning through cash fast?&lt;/p&gt;
&lt;p&gt;What if that company has layoffs or goes under?&lt;/p&gt;
&lt;p&gt;If you ask yourself these questions, you&amp;rsquo;re probably going to make a choice that&amp;rsquo;s at least somewhat informed, and
you might be able to avoid some pain later on.&lt;/p&gt;
&lt;h3 id=&#34;its-a-gamble&#34;&gt;It&amp;rsquo;s a gamble&lt;/h3&gt;
&lt;p&gt;But sometimes you just can&amp;rsquo;t win.&lt;/p&gt;
&lt;p&gt;When working as a junior developer, I was happy to add yet another dependency to the project because it solved that one particular
problem I was working on without me having to worry about implementing the functionality myself. I really didn&amp;rsquo;t give much
thought to what would happen to that dependency years from now.&lt;/p&gt;
&lt;p&gt;After working in multiple software development teams, I know how painful it is to get a neglected software development
project back on track (hi, T3!). Choices made in the past (and not necessarily by you) can interrupt your team and
put brakes on any other development that you were planning on.&lt;/p&gt;
&lt;p&gt;One relatively recent example comes to mind. I wasn&amp;rsquo;t working on this change myself, but saw how it affected the team.
There was a frontend project based on React, Redux and a bunch of other pieces that were thrown together. One of those
dependencies was a library that was used to render all sorts of tables. There was just one little issue with it: that
dependency was now unmaintained and blocking updates to other dependencies in the project, like React.
One abandoned library that was utilized in a good chunk of the project meant that another solution had to be
chosen and all existing usages had to be ripped out. Given the poor technical state of the project in general
(and that&amp;rsquo;s putting it nicely), that was no easy task, and many weeks were spent on trying to get the house
in order. Eventually the team succeeded, but the cost was high, all because a choice made in the past did not pay off.&lt;/p&gt;
&lt;p&gt;You might do some basic research, consider the ups and downs of all the choices, and still make a choice that will
haunt you or the next developer. Sometimes it&amp;rsquo;s simply a coin toss. Life happens, and developers are not
immune to it. The developer might be working on that one library as a passion project, but decide to quit after burning
out. Or they get other priorities, like starting a family, or they decide to switch careers entirely. Or they might
have simply passed away. Such is life.&lt;/p&gt;
&lt;h3 id=&#34;the-issue-with-tutorials&#34;&gt;The issue with tutorials&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re looking to solve a particular problem, you&amp;rsquo;re probably going to go straight to your search engine of choice
and throwing in some related keywords.&lt;/p&gt;
&lt;p&gt;Looking at what&amp;rsquo;s out there in terms of tech often results in browsing through search results and a bunch of tutorials.
Those tutorials are often focused on the bare minimum: here&amp;rsquo;s what we&amp;rsquo;re setting up, here are some commands that you
need to run to get there, and &lt;em&gt;et voilà&lt;/em&gt;, you have something that works!&lt;/p&gt;
&lt;p&gt;When was the last time you saw a tutorial that also focused on the maintenance of that solution?&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re new to this industry, maintenance is not something that you necessarily think about as you&amp;rsquo;re most likely
focused on getting things to work in the first place. Building things, exposing them to the world and then ignoring
maintenance is one of the many reasons why the software landscape is in shambles. Best case scenario, the world around
your little service updates and introduces outages that you could have avoided with a little love and care. Worst case
scenario, you get in the crosshairs of a bot that&amp;rsquo;s scanning the whole Internet for vulnerable services, and your
little service might be following orders from adversarial countries and taking part in cyberattacks.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re setting something up, think about what the maintenance will look like, and try to estimate the amount of time
you&amp;rsquo;ll have to spend on it. If you can automate a big part of maintenance, then that&amp;rsquo;s even better.&lt;/p&gt;
&lt;p&gt;You should still build new things, but you can&amp;rsquo;t ignore maintenance.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re someone who just realized that they have this one web service running on a VM somewhere in the cloud with
uptime measured in years and no automatic updates being applied, then I guess you now know what you&amp;rsquo;ll be working on
this week.&lt;/p&gt;
&lt;h3 id=&#34;not-just-software&#34;&gt;Not Just Software&lt;/h3&gt;
&lt;p&gt;Maintenance applies elsewhere as well.&lt;/p&gt;
&lt;p&gt;You decide to buy a smartphone, and you care about using the hardware for a long time, perhaps 5+ years. Perhaps due to
environmental concerns, or due to smartphones being ridiculously expensive in 2023.&lt;/p&gt;
&lt;p&gt;This means that you probably want one where you can replace the battery with a reasonable cost, since that&amp;rsquo;s considered
to be a consumable item in electronics and it &lt;em&gt;will&lt;/em&gt; eventually stop holding a charge.&lt;/p&gt;
&lt;p&gt;Which option would you go with?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ifixit.com/Guide/iPhone+14+Battery+Replacement/152966&#34;&gt;Apple iPhone 14&lt;/a&gt;, battery replacement takes 1-2 hours
and specialized tools&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ifixit.com/Guide/Google+Pixel+7+Battery+Replacement/154680&#34;&gt;Google Pixel 7&lt;/a&gt;, again, 1-2 hours and
specialized tools needed&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ifixit.com/Guide/Fairphone+4+Battery+Replacement/152861&#34;&gt;Fairphone 4&lt;/a&gt;, &lt;strong&gt;30-60 seconds&lt;/strong&gt; to replace the
battery, no tools needed if you can pry the back cover up with your fingernail&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From this perspective the Fairphone 4 is the obvious choice. You will have to consider other aspects as well when
picking a smartphone, such as the camera quality, performance and any other features you expect from it, so it&amp;rsquo;s not
always about maintenance, but it can still play a big part in the decision-making process.&lt;/p&gt;
&lt;p&gt;Or let&amp;rsquo;s consider a laptop instead. You can cheap out and get one with the lowest price from the store, but
it&amp;rsquo;s unlikely to last more than a few years before it has issues, and repairing it might not make sense due to lack of
spare parts or the repairability of the device being a nightmare. If you care about longevity, you can instead opt for
an used business-class laptop that has better physical construction and lots of affordable spare parts available for
quite a long time.&lt;/p&gt;
&lt;p&gt;If you can forego having a car, then that&amp;rsquo;s
a load off your back, since those hunks of metal tend to attract all sorts of problems and require expensive maintenance.
Trust me, I have one made by a certain German car manufacturer notorious for having expensive repairs, and it&amp;rsquo;s not fun.&lt;/p&gt;
&lt;p&gt;When choosing a place to live, consider that a bigger apartment or house will have a larger surface area for problems
to exist. More rooms, more area, more things that need attention and repairs.&lt;/p&gt;
&lt;p&gt;If you start looking at the choices you make through the lens of maintenance, you can reduce the amount of time and money
that you&amp;rsquo;ll later regret having to spend due to choices made in the past. Any new object you acquire will likely need
maintenance for it to last for a long time. Are you willing to put in that effort? You&amp;rsquo;ll be paying either way, with
your money or your own time, or both.&lt;/p&gt;
&lt;h3 id=&#34;free-tech-tip-to-developers&#34;&gt;Free tech tip to developers&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re having trouble explaining the need to perform regular maintenance in your
software development project to the business side, then try using an analogy. Most people probably would not want to
work in an office with broken windows, a leaky roof and the heating system malfunctioning, so why should your software
get treated differently?&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Maintenance is something you can&amp;rsquo;t ignore. It will catch up with you eventually, and it will not let you choose the
place or time for it. If you make conscious decisions, you can reduce the burden and avoid some of the pain later on.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Tiered storage: use the right tool for the job</title>
      <link>https://ounapuu.ee/posts/2023/03/26/tiered-storage/</link>
      <pubDate>Sun, 26 Mar 2023 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/03/26/tiered-storage/</guid>
      <description>
        
          
          
          
        
        
        






  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/03/26/tiered-storage/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/03/26/tiered-storage/media/cover_hu96d75f598f9697ebcedae2885e872b6e_217485_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Hard drives are still the default choice for many homelab and data hoarding
enthusiasts. They still hold the gigabytes per dollar advantage over SSD-s (for now),
and if you buy the big external drives and take the drives out of the enclosures,
you can get a pretty good deal.&lt;/p&gt;
&lt;p&gt;Spinning rust has one obvious downside: it&amp;rsquo;s slow, both in maximum transfer
speeds and in latency. For most use cases this is fine, but if you run a service
that depends on a database or if you have a lot of clients relying on that storage,
you&amp;rsquo;ll find that hard drives just won&amp;rsquo;t cut it.&lt;/p&gt;
&lt;p&gt;At this point you probably don&amp;rsquo;t want to &lt;a href=&#34;https://www.jeffgeerling.com/blog/2022/building-fast-all-ssd-nas-on-budget&#34;&gt;splurge and build an all-SSD NAS&lt;/a&gt;,
so you look up caching solutions. Depending on your platform, you&amp;rsquo;ll have all sorts
of options.&lt;/p&gt;
&lt;p&gt;If you run ZFS, you&amp;rsquo;ll likely learn about L2ARC and why you probably don&amp;rsquo;t want
to use it (hint: check your ZFS ARC hit/miss ratio first).
Or &lt;a href=&#34;https://klarasystems.com/articles/what-makes-a-good-time-to-use-openzfs-slog-and-when-should-you-avoid-it/&#34;&gt;SLOG&lt;/a&gt;,
or the &lt;a href=&#34;https://forum.level1techs.com/t/zfs-metadata-special-device-z/159954/&#34;&gt;special metadata device.&lt;/a&gt;
And in most cases the top recommendation is to add as much RAM as you can to
the system so that you can benefit from a bigger filesystem cache. You&amp;rsquo;ll see
some improvements, but not all workloads will benefit from this and you might
up being disappointed after all that work.&lt;/p&gt;
&lt;p&gt;I cannot speak for options on other platforms, but in most cases the idea is
similar: buy a separate sacrificial SSD and use it as a cache drive.&lt;/p&gt;
&lt;h3 id=&#34;cache-is-not-king&#34;&gt;Cache is (not) king&lt;/h3&gt;
&lt;p&gt;Take a moment and think about what type of data you&amp;rsquo;re storing.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an overview based on my own setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;archived YouTube videos (bunch of big files)&lt;/li&gt;
&lt;li&gt;cat pictures (bunch of small and big files)&lt;/li&gt;
&lt;li&gt;services that utilize a database (bunch of smaller files)&lt;/li&gt;
&lt;li&gt;various installation media (bunch of big files)&lt;/li&gt;
&lt;li&gt;backups of physical disks (bunch of big files)&lt;/li&gt;
&lt;li&gt;a copy of my Steam library (bunch of big and small files)&lt;/li&gt;
&lt;li&gt;a web server (bunch of small files)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most of the data I have is accessed relatively infrequently, and when it is,
the performance requirements are not that high. Any hard drive based array
will be able to handle streaming video or copying big bulky files over the
network.&lt;/p&gt;
&lt;p&gt;Data that is more latency sensitive, such as Nextcloud, Jellyfin (and its
.sqlite DB) and PostgreSQL, take up a relatively small part of the overall
storage.&lt;/p&gt;
&lt;p&gt;In this case (and assuming that the setup allows for it physically), the
solution is simple: add a smaller flash-based storage pool to the
setup and use it for data that benefits from it.&lt;/p&gt;
&lt;p&gt;I experimented with a similar setup in the past with two 8 TB hard drives holding
all the big files and a pair of 250 GB SSD-s handling Nextcloud and other
services. Now I had the best of both worlds.&lt;/p&gt;
&lt;p&gt;In short, you don&amp;rsquo;t need to mess around with a fancy caching solution if your
storage usage patterns are simple and predictable. If you do a little bit of
investigation once, you can bypass all the logic that is usually built into
various caching solutions and get a better end result as no caching solution is
100% perfect.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>I looked at this site on the Wayback Machine</title>
      <link>https://ounapuu.ee/posts/2023/03/06/way-way-back/</link>
      <pubDate>Mon, 06 Mar 2023 18:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/03/06/way-way-back/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;&lt;a href=&#34;https://www.valimised.ee/&#34;&gt;Yesterday was election day in Estonia and the results are in,&lt;/a&gt; which is why
I remembered that one time I looked at my website on &lt;a href=&#34;https://archive.org/web/&#34;&gt;the Wayback Machine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This domain used to point to a &lt;a href=&#34;https://web.archive.org/web/20131106131123/http://ounapuu.ee/&#34;&gt;Wordpress site that hosted
content for a candidate in the local elections&lt;/a&gt;,
at least around 2011-2014.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/03/06/way-way-back/media/cover.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/03/06/way-way-back/media/cover_hu84cce4c5407128f92f250120734ea5e7_419479_1280x800_fit_box_3.png&#34;
             width=&#34;1004&#34;
             height=&#34;708&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;For international readers: &amp;ldquo;Õunapuu&amp;rdquo; is a relatively common last name in Estonia.
Special characters in domains weren&amp;rsquo;t that widely adopted back then, which is
how you end up using &amp;ldquo;Ounapuu&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The site is political in nature and a quick glance at the writing reveals that
the text is&amp;hellip; &lt;em&gt;interesting&lt;/em&gt;, to put it nicely.&lt;/p&gt;
&lt;p&gt;After 2014, things seem to have changed as the blog did not get any new posts and
at some point the domain was not renewed. &lt;a href=&#34;https://web.archive.org/web/20170926081245/http://ounapuu.ee/&#34;&gt;Around 2017&lt;/a&gt;
I registered the domain because a friend recommended that I get myself a domain,
because personal domains are cool. Best move I&amp;rsquo;ve made in my career, especially
as I later heard from a colleague that someone else with the same last name was
asking about this domain name and wanted to register it in their name.&lt;/p&gt;
&lt;p&gt;The site has gone through some changes. It used to &lt;a href=&#34;https://web.archive.org/web/20180601184813/https://ounapuu.ee/&#34;&gt;host a super basic page
that referred to my work&lt;/a&gt;,
and it also linked to &lt;a href=&#34;https://web.archive.org/web/20190325122634/https://blog.ounapuu.ee/&#34;&gt;a blog that never quite took off&lt;/a&gt;.
It did eventually, but not in that form.&lt;/p&gt;
&lt;p&gt;The setup that you&amp;rsquo;re looking at right now &lt;a href=&#34;https://web.archive.org/web/20200810114604/https://ounapuu.ee/&#34;&gt;was established in 2020&lt;/a&gt;.
I ended up taking a ready-made Hugo theme and tweaking it to my liking.&lt;/p&gt;
&lt;p&gt;And that&amp;rsquo;s pretty much it. I didn&amp;rsquo;t expect this domain to have much history,
but thanks to &lt;a href=&#34;https://archive.org/&#34;&gt;the Internet Archive&lt;/a&gt; we have records of it.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s to hoping that I don&amp;rsquo;t forget to renew the domain!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>TOMO M4: probably the coolest power bank I&#39;ve owned</title>
      <link>https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/</link>
      <pubDate>Fri, 03 Mar 2023 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;A friend once showed me a power bank that was so cool that I had to get one
myself. Ended up getting two, and here&amp;rsquo;s why.&lt;/p&gt;
&lt;p&gt;This post is &lt;strong&gt;not&lt;/strong&gt; sponsored.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/media/cover_hudd00b24d9872d998c548ef5459b66a89_993639_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1053&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;h3 id=&#34;removable-batteries&#34;&gt;Removable batteries&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s start with the feature that I appreciate the most: removable batteries!
The TOMO M4 accepts up to 4 18650 lithium ion battery cells, which are very
common nowadays and can be purchased from lots of retailers. You can also mix
and match cells and even run the power bank with 1-3 cells in it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/media/image-0.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/media/image-0_hue91608a9b7ad9051c161b6114e420320_2485454_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;TOMO M4 running on two battery cells.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      TOMO M4 running on two battery cells.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;If you&amp;rsquo;re feeling adventurous and you know what you&amp;rsquo;re doing, you could in
theory take an used battery pack from a device that utilises 18650 lithium ion
cells, disassemble it completely and use the healthier cells inside power banks
like this one. They might not be healthy enough to power bigger
devices, such as e-scooters, but they might be just enough to charge your phone.
This is something I want to try out eventually with things like old ThinkPad
laptop batteries since the risk of burning the whole building down is smaller
with those.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve previously bought cheap &amp;ldquo;10000 mAh&amp;rdquo; power banks from brands like Xiaomi
and have had mixed experiences. Yeah, they usually get the job done, but should
the battery die in it, then you&amp;rsquo;re probably just going to throw the thing away
because the battery is not easily replaceable. That&amp;rsquo;s really wasteful.&lt;/p&gt;
&lt;p&gt;With the TOMO M4 it&amp;rsquo;s a matter of sliding the plastic case open and just
replacing the cells, similar to what you&amp;rsquo;d do for a TV remote with AA batteries.
It&amp;rsquo;s so easy that even your grandma could do it!&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t understand why it&amp;rsquo;s acceptable to enclose consumable items like
batteries in devices that are difficult or impossible to open up (the real
reason is probably profits, right?). The battery &lt;strong&gt;will die&lt;/strong&gt; at some point, no
matter how well you take care of it.&lt;/p&gt;
&lt;p&gt;If the rest of the device holds up, then the TOMO M4 could realistically be the
last power bank I buy.&lt;/p&gt;
&lt;h3 id=&#34;the-cool-factor&#34;&gt;The cool factor&lt;/h3&gt;
&lt;p&gt;Now that we&amp;rsquo;re done with the most practical aspect, let&amp;rsquo;s look at the display.
Once you power it on, you&amp;rsquo;ll see the green-lit LCD screen light up. The screen
shows the charge level of the individual cells during standby. While charging,
you&amp;rsquo;ll see a nice little animation.&lt;/p&gt;
&lt;p&gt;But that&amp;rsquo;s not the coolest part. If you connect a device to one of the USB ports,
it will show the voltage and current that the power bank is outputting. Multiply
those two numbers and you can actually see the wattage that a device is pulling.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/media/image-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/media/image-1_hu187007e453230d72a5a130b1dfa401bb_2734466_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The display does exhibit ghosting, which is most noticeable during charging.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The display does exhibit ghosting, which is most noticeable during charging.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Not everyone probably appreciates this as much as I do, but I just find it
to be really cool.&lt;/p&gt;
&lt;h3 id=&#34;the-downsides&#34;&gt;The downsides&lt;/h3&gt;
&lt;p&gt;There are some things I&amp;rsquo;ve noticed about this power bank that are less than
ideal.&lt;/p&gt;
&lt;p&gt;The charging port is micro-USB, which is not that great in 2023. Out of all the
IT gear that I own, this power bank is the only regularly used item that
charges via that port. I&amp;rsquo;d love to see this replaced with USB-C port, just for
the sake of uniformity. It&amp;rsquo;s probably possible to modify this power bank and
replace the charging port with an USB-C port, but I have not got around to
doing that yet.&lt;/p&gt;
&lt;p&gt;The display backlight can be turned off with a single click of the power button.
However, if you&amp;rsquo;re charging a device that is close to being fully charged and
starts trickle-charging, the display backlight will turn back on. This is less
than ideal in situations where the backlight illumination bothers you, such as
during night.&lt;/p&gt;
&lt;p&gt;The detailed analysis that I mention in the next paragraph mentioned that this
power bank &lt;em&gt;&amp;ldquo;Can be used as UPS&amp;rdquo;&lt;/em&gt;. I put this to the test with two devices:
Raspberry Pi model B+ and a LattePanda V1. The Raspberry Pi struggled a lot and
the red power LED flickered constantly, indicating issues with power delivery.
The LattePanda V1 booted up and ran nicely for a while, but under a bigger load
it threw some errors into kernel logs and eventually locked up completely. On
a functional level this power bank can probably act as a UPS, but in practice
it did not work out for me. Other factors, such as the USB cable used and/or
the lithium ion cells that I used in the power bank, might have also influenced
the results of this quick test.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/media/image-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/03/03/tomo-m4-powerbank/media/image-2_hu7c803699d44697a18eb154e5a514e199_3052414_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;LattePanda V1, powered by the TOMO M4.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      LattePanda V1, powered by the TOMO M4.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;the-technical-details-in-detail&#34;&gt;The technical details, in detail&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re interested in all the technical details for this particular power bank,
then definitely check out &lt;a href=&#34;https://lygte-info.dk/review/Review%20USB%20battery%20box%20Tomo%20M4%20UK.html&#34;&gt;this review on lygte-info.dk&lt;/a&gt;.
It&amp;rsquo;s a very detailed overview of the capabilities of this power bank, its
behaviour under different circumstances and a bunch of measurements and
explanations to back it all up.&lt;/p&gt;
&lt;p&gt;I also like the way they phrased the verdict: &lt;em&gt;&amp;ldquo;I will rate it as acceptable.&amp;rdquo;&lt;/em&gt;
Short and concise.&lt;/p&gt;
&lt;p&gt;The author also reviews lots of other products and has the &lt;a href=&#34;https://lygte-info.dk/info/Review%20UK.html&#34;&gt;reviewing process
documented in detail.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;closing-thoughts&#34;&gt;Closing thoughts&lt;/h3&gt;
&lt;p&gt;In general, I&amp;rsquo;m very happy with this power bank. Although I&amp;rsquo;d probably not
recommend it as an UPS for low-power computers, I&amp;rsquo;d happily recommend this to
someone who needs a simple power bank that they won&amp;rsquo;t have to throw away
after a few years.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>LattePanda V1 - my experience with a Raspberry Pi alternative</title>
      <link>https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/</link>
      <pubDate>Tue, 28 Feb 2023 09:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;As with many homelab experiments around 2022/2023, it all started with Raspberry Pi-s
being either out of stock or absurdly overpriced.&lt;/p&gt;
&lt;p&gt;I once noticed a listing for a &lt;a href=&#34;https://www.lattepanda.com/lattepanda-v1&#34;&gt;LattePanda V1&lt;/a&gt; on a local auction site.
The price was reasonable at 45 EUR, and after I looked at the specifications, I
had to get one to play around with.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/cover_huec534e76353611742e6ea4495f1e13d8_2928677_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Embrace the jank!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Embrace the jank!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The auction site usually sells used items, but this LattePanda V1 was brand new
in box, which surprised me. I got the 2GB RAM/32GB eMMC option.&lt;/p&gt;
&lt;p&gt;I put the LattePanda through its paces, and here&amp;rsquo;s what I learned.&lt;/p&gt;
&lt;p&gt;Please note that my use cases are more on the software side, I did not try out
the hardware capabilities that SBC-s are also associated with (GPIO, camera/display
ports etc).&lt;/p&gt;
&lt;h3 id=&#34;the-hardware&#34;&gt;The hardware&lt;/h3&gt;
&lt;p&gt;What makes the LattePanda V1 special is that it&amp;rsquo;s based off of an x86 CPU.
Mine came with an &lt;a href=&#34;https://ark.intel.com/content/www/us/en/ark/products/93361/intel-atom-x5z8350-processor-2m-cache-up-to-1-92-ghz.html&#34;&gt;Intel Atom x5-Z8350&lt;/a&gt;.
4 cores, not very fast ones, but similar or better to what you&amp;rsquo;d find in a
Raspberry Pi 4. Most single-board computers usually come with an ARM-based CPU.&lt;/p&gt;
&lt;p&gt;The board behaves like any normal PC. You power it on, you see the LattePanda
logo, and the OS just starts up. Smashing the &amp;ldquo;Delete&amp;rdquo; key during the boot
will direct you to the UEFI settings. Since this board is marketed towards
the technical crowd, it has so many settings that you can play with.
Definitely more than what I&amp;rsquo;d know to do with.&lt;/p&gt;
&lt;p&gt;The board comes with Windows 10 preinstalled. I booted it up and gave it a go,
and it was slow as molasses while it downloaded the latest updates. At one
point I reinstalled Windows 10 and ran into issues. It &amp;ldquo;works&amp;rdquo;, but I had trouble
getting any Intel GPU drivers installed on it, which rendered it almost useless
for any media playback use case that I could have used it for.&lt;/p&gt;
&lt;p&gt;The port selection is okay. It comes with 100 Mbit/s Ethernet, one USB 3.0 port
and two USB 2.0 ports. I could get around 350 MB/s out of the USB 3 port with
an external SSD, and the USB 2 ports pulled anywhere between 15-40 MB/s,
depending on my luck. If you fancy a gigabit connection, then an USB-to-Ethernet
adapter might do the trick.&lt;/p&gt;
&lt;p&gt;Adding one external HDD or SSD over USB is okay and works well, but after
adding a second one I noticed issues with either one of the disks not receiving
enough power. If you intend to use the LattePanda V1 as the brains for a cheap
NAS, then use drives that are powered externally.&lt;/p&gt;
&lt;p&gt;The eMMC storage on the board is decent. Regarding performance it&amp;rsquo;s somewhere
between a hard drive and a proper SSD, and the sequential read speeds max out
around 150 MB/s. My main concern with it is the durability. The eMMC chip is probably hidden
behind the metal shielding on the board and replacing it (if that is even
possible) might turn out to be tricky. &lt;code&gt;ls -lah /dev/disk/by-id/&lt;/code&gt; lists the
eMMC chip as &lt;code&gt;mmc-DA4032&lt;/code&gt;, which a little bit of Googling refers to it being a
SanDisk chip.&lt;/p&gt;
&lt;p&gt;The microSD card port works, but either booting from the microSD card is not
possible or the board was a bit temperamental when I gave it a go with Ubuntu Server 22.04.&lt;/p&gt;
&lt;p&gt;The board runs hot in its barebones configuration, any decent load over a longer time period
will result in the CPU throttling itself. I recommend rigging up a metal
heat sink to the bottom of the board to avoid throttling and stability issues
under very high load. A thermal pad, a piece of metal, and a bunch of zip ties
will do wonders.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/image-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/image-1_hu79ace2da0d1055071d397e6de63d6b78_2141238_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Do not look at the bend.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Do not look at the bend.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;the-linux-experience&#34;&gt;The Linux experience&lt;/h3&gt;
&lt;p&gt;When experimenting with Linux, I found a couple of annoyances. The LattePanda V1
seems to have a display connector on board. However, in Linux it turned out to
be an annoyance as the system always presented a 1024x768 display being
connected to the system. Booting into a Fedora Linux liveUSB environment will
lead you to staring a blank view with only the wallpaper present.
Playing with settings in UEFI did not lead to any improvements. What works is
&lt;a href=&#34;https://unix.stackexchange.com/a/526619&#34;&gt;adding a kernel parameter&lt;/a&gt;:
&lt;code&gt;video=DSI-1:d&lt;/code&gt;. With Fedora Linux, if you apply this fix in GRUB when first
booting into the liveUSB environment, it will persist after the installation
is done.&lt;/p&gt;
&lt;p&gt;Once I had Fedora Linux booted up, I did not have a good time. The display
flickered when I dragged the mouse near the edges and the performance was awful.
It didn&amp;rsquo;t take long for the desktop session to crash.&lt;/p&gt;
&lt;p&gt;One of the main reasons I wanted to experiment with this setup was the low power
usage of this board. The LattePanda V1 idles at around 3 watts, and under a high
CPU load generated with &lt;code&gt;stress -c 4&lt;/code&gt; I could get it to 5-6 watts. This made it
a great candidate for running this website and Wireguard VPN 24/7 at home.
I ended up installing Ubuntu Server 22.04 on it and actually ran this website
off of it for about a week or so.&lt;/p&gt;
&lt;p&gt;The reason I stopped using the LattePanda V1 for that purpose was the
performance. The 100 Mbit/s Ethernet wasn&amp;rsquo;t a disaster, but it did set limits
to how much traffic I could push through the board. What made me reconsider was
the CPU performance. Simply put: SSL encryption speeds were about 5-10x slower
than on my ThinkPad T430 that ran as a server before.&lt;/p&gt;
&lt;p&gt;My performance testing wasn&amp;rsquo;t scientific or anything, but I did run simple tests.
One of the involved running &lt;code&gt;curl&lt;/code&gt; against resources, such as an image on my
blog, in an infinite loop and over multiple threads. The ThinkPad T430 peaked at
around 650 Mbit/s of network bandwidth while the LattePanda V1 struggled at
around 60 Mbit/s.&lt;/p&gt;
&lt;p&gt;After looking for some other benchmarking options that I could set up really
quickly, I also gave &lt;a href=&#34;https://serverfault.com/a/160807&#34;&gt;ApacheBenchmark a go&lt;/a&gt;.
This more-or-less confirmed my findings and the requests per second results
are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ThinkPad T430: 301.72&lt;/li&gt;
&lt;li&gt;LattePanda V1: 55.86&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/bench-T430.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/bench-T430_huabfd7d7daed7e3533919c18a259f99f9_76039_1280x800_fit_box_3.png&#34;
             width=&#34;626&#34;
             height=&#34;733&#34;
             alt=&#34;ApacheBenchmark results for the ThinkPad T430.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      ApacheBenchmark results for the ThinkPad T430.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/bench-lattepanda.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/bench-lattepanda_huecb499bfc73c854838d65b380edb6639_76704_1280x800_fit_box_3.png&#34;
             width=&#34;626&#34;
             height=&#34;708&#34;
             alt=&#34;ApacheBenchmark results for the LattePanda V1.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      ApacheBenchmark results for the LattePanda V1.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The LattePanda V1 was over 5 times slower in that test. With a slow internet
uplink this might not matter much, though.&lt;/p&gt;
&lt;p&gt;I ended up putting the T430 back in service after doing more calculations.
One idea I had with the LattePanda V1 was to have that run 24/7 due to its
low idle power usage and have another beefy server run during certain hours.
I liked that idea until I calculated the difference in power savings. Having
the main server with around 12 W of idle power turn off for 6 hours and the
LattePanda running at the same time would have actually increased the total
power consumption of the setup compared to having the main server running 24/7.&lt;/p&gt;
&lt;p&gt;The math will make sense if your main server uses much more power. Most desktop
PC-s that I have seen idle around 35-50 W and rack-mounted servers use even
more than that, so in those situations this might make more sense. &lt;a href=&#34;https://maximiliangolla.com/blog/2022-10-wol-plex-server/&#34;&gt;Or you can
whip up a solution that starts and stops machines in your homelab on-demand.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Oh, and don&amp;rsquo;t expect to run CPU or GPU based transcoding off of this thing with
Jellyfin. It works okay for certain video formats and resolutions, but a 1080p
H.265 video transcoded to H.264 is just not fast enough on this machine.&lt;/p&gt;
&lt;h3 id=&#34;a-suitable-use-case&#34;&gt;A suitable use case&lt;/h3&gt;
&lt;p&gt;I might change my mind at one point and give the LattePanda a go again as a
low power web server. &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/&#34;&gt;I hate unused hardware&lt;/a&gt;,
which is why this LattePanda V1 is now serving as an offsite backup. The USB 3
port makes sense for attaching a bigger storage device and if you run ZFS, you
can also send your whole filesystem to it with &lt;code&gt;zfs send/receive&lt;/code&gt; or &lt;code&gt;syncoid&lt;/code&gt;.
I haven&amp;rsquo;t had much luck with ARM and ZFS, but with the LattePanda and its
x86-based CPU I have not had issues.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/image-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/28/lattepanda-v1/media/image-2_hub5f173055b242f3c356e1660613a1fc0_3782088_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;LattePanda V1 in its final form: a backup endpoint.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      LattePanda V1 in its final form: a backup endpoint.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;All-in-all, it&amp;rsquo;s a neat little board that shows signs of instability from time to time.
If you intend to just run Ubuntu Server on it and your workloads are not
very performance critical, then it might work out well for you. Think of it
like a juiced-up Raspberry Pi 4 to get an idea of what it might be suitable for
regarding performance.&lt;/p&gt;
&lt;p&gt;It did not fit the use case I intended to use it for, but I&amp;rsquo;m still happy that
I could play around with this board. It was fun!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Shrinkflation, SanDisk style</title>
      <link>https://ounapuu.ee/posts/2023/02/15/shrinkflation/</link>
      <pubDate>Wed, 15 Feb 2023 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/02/15/shrinkflation/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;&lt;strong&gt;2023-02-16 update:&lt;/strong&gt; this post is &lt;strong&gt;not&lt;/strong&gt; about the &amp;ldquo;GB vs GiB&amp;rdquo; issue, or the &amp;ldquo;lost disk space&amp;rdquo; that you
notice after formatting the device in an OS. Please read the article in full before
making inaccurate comments online.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/cover_hue55650f24ccae1df6ba9600ac6388803_3083644_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;For many years, I have used two SanDisk Ultra 16 GB USB flash drives
as OS installation media. Since I do not trust &lt;a href=&#34;https://www.ventoy.net/en/index.html&#34;&gt;Ventoy&lt;/a&gt; yet,
and alternative &amp;ldquo;one stick that does it all&amp;rdquo; solutions have had odd bugs from time to time,
I prefer having separate physical USB sticks for each OS, one for Fedora Linux,
and one for Windows 10.&lt;/p&gt;
&lt;p&gt;I hate reflashing sticks all the time and would like to have at least one around
that always has Fedora Linux on it, so I decided to get two more USB sticks of the
same brand and size. Once they arrived, I got annoyed.&lt;/p&gt;
&lt;p&gt;The old flash drive shows up like this in GNOME Disks.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/image-0.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/image-0_hu5f53604770277213d671889dd62e7c2e_17449_1280x800_fit_box_3.png&#34;
             width=&#34;397&#34;
             height=&#34;122&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Here&amp;rsquo;s the new one.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/image-1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/image-1_hu84e88f762108b625574c50462ec22319_18951_1280x800_fit_box_3.png&#34;
             width=&#34;409&#34;
             height=&#34;120&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Although it does not matter one &lt;em&gt;bit&lt;/em&gt; for my use case, I am annoyed that the new one
is shipping with much fewer bits than the old one. I&amp;rsquo;m a whole 607125504 bytes short!
That&amp;rsquo;s 579 MB, or about half a gigabyte.&lt;/p&gt;
&lt;p&gt;The only difference that I can make out on the surface is that the new one was manufactured in Malaysia.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/image-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/image-2_hud185d251168f546813f51a131acf004c_3020299_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Other than years worth of wear and tear, they look almost identical.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Other than years worth of wear and tear, they look almost identical.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;But it seems that SanDisk (or their new owner Western Digital) has legally covered their butt with
&lt;a href=&#34;https://support-en.wd.com/app/answers/detailweb/a_id/35080&#34;&gt;this knowledge base article.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/image-3.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/02/15/shrinkflation/media/image-3_hu7a838cfa0a683bc2de8ab11bc8eaf344_25361_1280x800_fit_box_3.png&#34;
             width=&#34;862&#34;
             height=&#34;179&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Here&amp;rsquo;s the line that explains why some bytes are seemingly missing on formatted media.
This is what consumers are usually concerned about once they use their storage device.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SanDisk defines 1 GB as 1,000,000,000 bytes.  Operating Systems define 1 GB as 1,073,741,824 BYTES.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;However, this section is the one actually relevant to my finding.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A portion of the total capacity is used to store certain functions including optimizations of the memory
that support performance and endurance and therefore is not available for user storage.
This is disclosed on our packaging and marketing materials when you see the statement &amp;ldquo;Actual user storage less.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Based on this, I assume that SanDisk cheaped out and decided to not add enough flash to provide
both the advertised storage of 16 000 000 000 bytes available to the user &lt;em&gt;and&lt;/em&gt; some room for
over-provisioning that flash storage benefits from. And somehow they are the only ones who do it
this way, as all other storage media that I own shows up with the proper number of bytes.&lt;/p&gt;
&lt;p&gt;And for those interested, here&amp;rsquo;s &lt;code&gt;f3&lt;/code&gt; output for both the old and new sticks.&lt;/p&gt;
&lt;p&gt;Old:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# f3probe /dev/sdc --destructive --time-ops
F3 probe 8.0
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

WARNING: Probing normally takes from a few seconds to 15 minutes, but
         it can take longer. Please be patient.

Good news: The device `/dev/sdc&amp;#39; is the real thing

Device geometry:
	         *Usable* size: 14.91 GB (31266816 blocks)
	        Announced size: 14.91 GB (31266816 blocks)
	                Module: 16.00 GB (2^34 Bytes)
	Approximate cache size: 0.00 Byte (0 blocks), need-reset=no
	   Physical block size: 512.00 Byte (2^9 Bytes)

Probe time: 1&amp;#39;49&amp;#34;
 Operation: total time / count = avg time
      Read: 463.8ms / 4814 = 96us
     Write: 1&amp;#39;48&amp;#34; / 4192321 = 25us
     Reset: 1us / 1 = 1us
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;New:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# f3probe /dev/sdd --destructive --time-ops
F3 probe 8.0
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

WARNING: Probing normally takes from a few seconds to 15 minutes, but
         it can take longer. Please be patient.

Good news: The device `/dev/sdd&amp;#39; is the real thing

Device geometry:
	         *Usable* size: 14.34 GB (30081024 blocks)
	        Announced size: 14.34 GB (30081024 blocks)
	                Module: 16.00 GB (2^34 Bytes)
	Approximate cache size: 0.00 Byte (0 blocks), need-reset=no
	   Physical block size: 512.00 Byte (2^9 Bytes)

Probe time: 1&amp;#39;02&amp;#34;
 Operation: total time / count = avg time
      Read: 338.2ms / 4814 = 70us
     Write: 1&amp;#39;02&amp;#34; / 4192321 = 14us
     Reset: 1us / 1 = 1us
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;m not even mad, I&amp;rsquo;m just disappointed.&lt;/p&gt;
&lt;h3 id=&#34;2023-02-16-update&#34;&gt;2023-02-16 update&lt;/h3&gt;
&lt;p&gt;This post received more attention than usual, so here are some additional details and clarifications.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why do you not trust Ventoy?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ventoy is a great tool from what I&amp;rsquo;ve seen online and the use case it fills does save time and resources.
However, I have some reservations about it. If I had to compromise a bunch of critical systems
over a long time period, then publishing a great tool and having it tamper with your OS installation media
silently would be a really good pick. At this time, I don&amp;rsquo;t trust the developers of the tool enough
and I don&amp;rsquo;t have the time or skills to perform repeated audits of the software every time they release a
new version.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;MBR vs GPT partitioning&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That was an oversight on my part, I should have presented both disks with the same partitioning scheme
to avoid unnecessary confusion. This has now been corrected.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Alternatives to Ventoy&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One reader pointed out a physical device that can be used for a similar purpose as Ventoy: &lt;a href=&#34;http://iodd.kr&#34;&gt;IODD&lt;/a&gt;.
I have not tested on myself and reportedly it has some bugs and is not 100% perfect, but it seems like
a neat hardware-based alternative.&lt;/p&gt;
&lt;p&gt;I have personally tried out things like &lt;a href=&#34;https://www.drivedroid.io/&#34;&gt;DriveDroid&lt;/a&gt; in the past, but
that required a rooted Android phone and it was not 100% bug-free either.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Everyone knows that GB and GiB are not the same, why is this post even a thing,
the author is clearly incompetent and dumb.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Read the article.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>ThinkPad as a server: the follow-up</title>
      <link>https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/</link>
      <pubDate>Fri, 27 Jan 2023 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;It&amp;rsquo;s been a while since I last wrote about my &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/&#34;&gt;ThinkPad T430 that was tasked with being a home server.&lt;/a&gt;
After doing some experiments with my setup a couple of times, it is once again the main server for all my self-hosting
needs. However, this time I have made some adjustments.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/media/cover_hu3eff0461015a1063446097f6f99372b6_4496664_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;
&lt;p&gt;The monstrosity that you&amp;rsquo;re looking at is what I&amp;rsquo;d call &amp;ldquo;the minimum viable ThinkPad as a server&amp;rdquo;. To be fair, you &lt;em&gt;could&lt;/em&gt;
go even more minimal by ripping out everything but the motherboard and the drives, but for my use case this is how far I
was willing to go.&lt;/p&gt;
&lt;p&gt;In my previous post about this setup, I mentioned that the T430 suffered unexpected shutdowns under certain situations,
which usually involved running the fan at the lowest speed, moderate to high CPU load, and a lot of storage activity.
It wasn&amp;rsquo;t the CPU as the temperatures were way below the critical point, so I suspected either the motherboard or the
storage running hot and tripping some sensor that I wasn&amp;rsquo;t aware of.&lt;/p&gt;
&lt;p&gt;For a while now, I have been thinking about running the T430 as bare as possible. One idea involved taking the bare
motherboard and the storage and slapping it on an acrylic sheet with some stand-offs, which should give it the best
chance at cooling. Unfortunately I didn&amp;rsquo;t have enough time to commit to this, and that setup would have had some
downsides as well. At some point an idea popped to my mind: I could probably achieve a similar result by stripping
everything but the bare necessities from the laptop and improve the cooling as a result. That&amp;rsquo;s how I ended up with
what you just saw.&lt;/p&gt;
&lt;h3 id=&#34;t430-stripped&#34;&gt;T430, stripped&lt;/h3&gt;
&lt;p&gt;I ended up removing the following from the T430:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;palm rest&lt;/li&gt;
&lt;li&gt;smart card reader&lt;/li&gt;
&lt;li&gt;Bluetooth chip&lt;/li&gt;
&lt;li&gt;WiFi chip&lt;/li&gt;
&lt;li&gt;the whole display assembly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This was in part motivated by the fact that those parts are the ones that are not in the best shape on my main ThinkPad
T430 that I use as an actual laptop. The other part was this nagging feeling that the most powerful PC that I own
&lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;(the ASRock DeskMini X300)&lt;/a&gt; was woefully underutilized as my home
server.&lt;/p&gt;
&lt;p&gt;The keyboard had to stay because the power button is part of the keyboard assembly. There are ways to power on the
laptop without the keyboard:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;put the laptop in a dock and use the power button that is present on the dock&lt;/li&gt;
&lt;li&gt;short a specific pin on the keyboard connector to ground&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I do have some extra ThinkPad docks around that I could have used for this purpose, but it would have made the setup
bulkier, which is why I did not go for that, at least not yet.&lt;/p&gt;
&lt;p&gt;There is also an option in UEFI settings that can be used to turn the laptop on by connecting the charger
(&amp;ldquo;Power on with AC attach&amp;rdquo;), but that only seems to work if you have a battery connected and after you have turned the
laptop on manually once. The same caveat applies for Wake on LAN functionality. If the laptop overheats or it runs out
of battery completely, then you need to manually power it on.&lt;/p&gt;
&lt;h3 id=&#34;the-cooling-situation&#34;&gt;The cooling situation&lt;/h3&gt;
&lt;p&gt;Removing the palm rest reveals something that might be related to the unexpected shutdowns that I observed with this
setup previously.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/media/image-0.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/media/image-0_hu86aa342f13332ad57e6d23b80702fc99_3740626_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Under this area is a chip on the motherboard that seems to generate a modest amount of heat. While the machine is running,
it gets warm to touch and gets hot if you throw a high load at the system, especially if you include storage in the
mix. With the laptop lid closed and the palm rest being present, the cooling situation for this area can be quite bad
indeed. Now that the palm rest is removed, this area of the laptop is now exposed, which should help with the cooling
for this chip.&lt;/p&gt;
&lt;p&gt;Having the keyboard connected in this state isn&amp;rsquo;t too bad. It does restrict the airflow a bit, yes, but at least it can
be fastened using two screws, which means that it won&amp;rsquo;t move around and cause any other issues.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/media/image-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/media/image-1_hu0fffb9232cf2d9017868694a63d19181_3436749_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;With this setup, the cooling has improved noticeably. Unfortunately it didn&amp;rsquo;t come to my mind to make a before/after
comparison to better illustrate this, so I will just write about how well it operates in this configuration.&lt;/p&gt;
&lt;p&gt;Currently, I have the laptop fan controlled by a modified version of &lt;a href=&#34;https://ounapuu.ee/posts/2022/09/26/minimum-viable-fan-control-script/&#34;&gt;the minimum viable fan control script&lt;/a&gt;.
The fan only kicks in after the CPU reaches 60°C, ramps up to a moderate speed at over 85°C, and lets the default fan
behaviour handle everything if the temperatures reaches over 95°C. This results in the fan being off completely for most
of the day as the server is idling at around 5-10% CPU usage and temperatures being anywhere between 45-60°C. When there
is a workload on the system that taxes the CPU, the fan will kick on with a small delay.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also disabled turbo boost on the Intel i7-3632QM that is currently in this T430, which limits the clock speed to
2.2 GHz max. Performance takes a small hit, but the CPU is now running much more efficiently. This is one of the tweaks
that allows the laptop to be near silent. At a full 8 thread CPU load using &lt;code&gt;stress -c 8&lt;/code&gt;, the CPU core temperatures
peak at 70°C at 22°C ambient temperature, with the fan running at around 2600 RPM.&lt;/p&gt;
&lt;p&gt;As a result of all of this, the T430 is very quiet while using about 10-12W of power while idling.
Under the maximum CPU load generated by &lt;code&gt;stress&lt;/code&gt;, the total system power usage is around 34W.&lt;/p&gt;
&lt;h3 id=&#34;putting-the-paste-in-thermal-paste&#34;&gt;Putting the &amp;ldquo;paste&amp;rdquo; in thermal paste&lt;/h3&gt;
&lt;p&gt;Originally, the T430-as-a-server ran vertically using a basic laptop vertical stand. Back when I concluded the initial
test in 2022, I disassembled the machine and noticed something very odd with the thermal paste.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/media/image-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/01/27/thinkpad-as-server-followup/media/image-2_hub384c9ec523906b36073b8a5b50e66aa_2839919_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Based on this image and the fact that I ran the machine quite warm most of the time (CPU temperatures around 60-80°C),
I assume that the excess thermal paste started slowly dripping down. The part that concerns me the most is that the top
of the chip was barely covered by the thermal paste. Either that part of the chip had great contact with the heatsink,
or the thermal paste drooped down with time and left it mostly uncovered. It could explain some of the issues, but
I&amp;rsquo;ll avoid making any definitive conclusions from this alone.&lt;/p&gt;
&lt;p&gt;To avoid similar issues in the future, the laptop is now on a stand at about 60° angle. Not sure if it will work,
but it&amp;rsquo;s worth a shot.&lt;/p&gt;
&lt;h3 id=&#34;closing-thoughts&#34;&gt;Closing thoughts&lt;/h3&gt;
&lt;p&gt;Overall, I&amp;rsquo;m happy with how this experiment turned out. Cooling is no longer an issue, and the T430 that I initially
got for spare parts is actually being useful. The amount of performance this machine offers while using very little
power seems to be a good balance for the workloads that I run on my home server.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Anything&#39;s a portable speaker if you&#39;re brave enough</title>
      <link>https://ounapuu.ee/posts/2023/01/02/anythings-a-portable-speaker/</link>
      <pubDate>Mon, 02 Jan 2023 07:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2023/01/02/anythings-a-portable-speaker/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I hate buying things that are single-purpose, which is why I ended up with this
setup.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/01/02/anythings-a-portable-speaker/media/0-image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/01/02/anythings-a-portable-speaker/media/0-image_hu072af6930251a71d8a8cb44f8e6d4b32_3494340_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2023/01/02/anythings-a-portable-speaker/media/1-image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2023/01/02/anythings-a-portable-speaker/media/1-image_huba3da6f08d561ad60ed6a2d8d7bd5993_6380856_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Take a speaker, a battery, put them together, and what you now have is a
portable speaker. Since I had access to both, I felt no need to buy a separate
portable speaker for use in social events.&lt;/p&gt;
&lt;p&gt;The fact that this JBL soundbar supports Bluetooth was what sealed the deal.
Just make sure to keep the setup a fair distance away from any bigger bonfires,
liquids and bugs, and you should be good to go.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>About the time I used Google Drive as a CMS for a web app</title>
      <link>https://ounapuu.ee/posts/2022/12/12/google-drive-cms/</link>
      <pubDate>Mon, 12 Dec 2022 07:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/12/12/google-drive-cms/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Near the beginning of my software development career, I worked on a pretty
standard web application. The project was not a commercial success, but it did
give me a good technical foundation that turned out to be very useful for my
career so far.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/12/12/google-drive-cms/media/image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/12/12/google-drive-cms/media/image_hud99401c856be1dfdb58575c697cb8c43_34432_1280x800_fit_q75_box.jpg&#34;
             width=&#34;680&#34;
             height=&#34;283&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;For those interested, the tech stack was relatively boring (in a good way) with
the backend service written in Java and frontend written in Angular 2+.&lt;/p&gt;
&lt;p&gt;One of the most memorable aspects of that project was how we built the news/blog
section. I might have forgotten some of the specifics, but the high-level idea
should still be accurate.&lt;/p&gt;
&lt;h3 id=&#34;the-implementation&#34;&gt;The implementation&lt;/h3&gt;
&lt;p&gt;It all started with a need to be able to display articles written by the
company. By that time the rest of the product was mostly in place and the
section meant for articles had a simple placeholder.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not completely sure on how we even landed on the choice that we eventually
ended up making. I do know that the solution had to be simple and convenient
enough to be used by non-technical people. Running a separate service, such as
Wordpress, just to be able to post articles was probably not a reasonable
choice.&lt;/p&gt;
&lt;p&gt;The idea for the CMS implementation ended up relying on Google Docs. The person
writing the articles would create a new document in a specific Google Drive
folder. The title of the document would be used as the title of the article,
and the content would be shown as-is on the web page. To support localization,
there was one subfolder for every language as well.&lt;/p&gt;
&lt;p&gt;The backend service would periodically query the contents of the shared Google
Drive folder. If new posts were found, it would export them into HTML and store
them on the backend. If I recall correctly, it might have also done some
sanitization or tweaks to overcome some limitations related to this setup.&lt;/p&gt;
&lt;p&gt;The frontend would then load the latest post and show it on the landing page.
There was also a view that showed the full list of articles. By default, Angular
2 would strip out all of the styling in order to sanitize the data, and it does
make sense for most use cases, since you probably don&amp;rsquo;t want an user named
&lt;code&gt;Little Bobby &amp;lt;script&amp;gt;alert(&#39;lol&#39;);&amp;lt;/script&amp;gt; Tables&lt;/code&gt; causing trouble. You could
work around that by using a functionality that turned all of that off. Unless
you had malicious users writing the content, you should be fine. And if those
people had access to the Google account hosting those documents, then you
probably had bigger issues anyway.&lt;/p&gt;
&lt;p&gt;If you look at this solution from another angle, it makes a lot of sense. What
we ended up doing was using Google Docs as the editor and host for any content
that we wanted to show. You don&amp;rsquo;t need to implement an editor into your
back-office interface if you rely on a big company that has done all that work
for you. No need to retrain users as well, just point them to the folder and
let them work with the editor that is likely already familiar to them.&lt;/p&gt;
&lt;p&gt;I cannot say much about the long-term viability of this solution, as the project
ended up being shut down not long after. Based on experience gained ever since,
I&amp;rsquo;d reckon that this solution could fail in all sorts of fun ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google changing the Google Drive API&lt;/li&gt;
&lt;li&gt;Google automatically banning your account because its &amp;ldquo;AI&amp;rdquo; deemed your content
to be in violation of some policies&lt;/li&gt;
&lt;li&gt;Someone accidentally deleting the shared folder or contents within it&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m not sure if I would consider something similar in a future project.
Implementing a good chunk of this as a junior developer was pretty fun though.
It also serves as a good example of creativity and not reinventing the wheel
when it&amp;rsquo;s not necessary.&lt;/p&gt;
&lt;p&gt;I am happy to see that others have come up with similar solutions since then.
If you look up &amp;ldquo;google drive cms&amp;rdquo;, you&amp;rsquo;ll find some relevant results:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://jamstack.org/headless-cms/google-drive-cms/&#34;&gt;Google Drive CMS | Jamstack&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://css-tricks.com/using-google-drive-as-a-cms/&#34;&gt; Using Google Drive as a CMS | CSS-Tricks&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.drivecms.xyz/&#34;&gt;Google Drive CMS&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While I can&amp;rsquo;t say that the solution we built was the first of its kind, I do
feel validated that other smart people have also come up with a similar solution.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>What changing the CPU on a laptop looks like</title>
      <link>https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/</link>
      <pubDate>Fri, 09 Dec 2022 07:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;This post illustrates something that is not common on modern laptops:
changing the CPU.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/0-cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/0-cover_hu236e4a778577a479eaa25cdab85c13ad_2977782_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The CPU we&amp;#39;re replacing in the T430: a 45W Intel i7-3820QM.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The CPU we&amp;#39;re replacing in the T430: a 45W Intel i7-3820QM.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/1-unscrew.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/1-unscrew_hue5201fa1f0e01edb068837cb1515c3de_3134454_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Loosen the CPU by turning the screw with a flathead screwdriver.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Loosen the CPU by turning the screw with a flathead screwdriver.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/2-socket.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/2-socket_hu3c2d4656bbdd3527fa448a228c46b372_3470682_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;A CPU socket in a laptop.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      A CPU socket in a laptop.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/3-replacement.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/3-replacement_hu582ce70fdedcccf0d97fa3dc5307cd14_2978083_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Make sure the golden triangle aligns with the marking on the socket, and pop that new CPU in.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Make sure the golden triangle aligns with the marking on the socket, and pop that new CPU in.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/4-cleaned-up.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/12/09/changing-cpu-in-a-laptop/media/4-cleaned-up_hu011d8516a31b813b7086da369ce4d138_2866877_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;A bit of 98% alcohol goes a long way.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      A bit of 98% alcohol goes a long way.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;
&lt;p&gt;One of the modifications that you can do to a ThinkPad T430 laptop is changing
the CPU to a more powerful quad core model. That&amp;rsquo;s exactly what I did back in 2017,
but due to the poor availability of compatible CPU-s in my region I went for
one with a 45W TDP, which is a bit much for a laptop designed for CPU-s with a
35W TDP.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ounapuu.ee/posts/2022/09/26/minimum-viable-fan-control-script/&#34;&gt;You could work around this issue with software&lt;/a&gt;,
and that&amp;rsquo;s what I also did for a long time. Since I now own two T430-s and the
availability of 35W parts is better now, I decided to go for one to see how
well these two options compare (result: it doesn&amp;rsquo;t overheat as often, but it
managed to do it once anyway).&lt;/p&gt;
&lt;p&gt;Unlike my T430, most modern laptops come with a soldered CPU.
&lt;a href=&#34;https://www.tech-critter.com/review-level51-forge-15r/&#34;&gt;There do exist laptops that come with a socketed CPU&lt;/a&gt;,
but those are not that common and are designed for very specific use cases.&lt;/p&gt;
&lt;p&gt;Soldering the CPU right to the board has its benefits, such as the machine
being thinner, and CPU-s don&amp;rsquo;t really die all that often. However, what we have
lost out on is the option to upgrade older machines with more powerful
components, extending the useful lifetime of the device.&lt;/p&gt;
&lt;p&gt;Yes, you &lt;em&gt;can&lt;/em&gt; replace soldered CPU-s, but that requires a skillset and
equipment that few people have.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>HoloISO: the unofficial Steam Deck experience on your PC</title>
      <link>https://ounapuu.ee/posts/2022/12/01/holoiso-steam-deck-experience/</link>
      <pubDate>Thu, 01 Dec 2022 07:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/12/01/holoiso-steam-deck-experience/</guid>
      <description>
        
          
          
          
        
        
        






  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/12/01/holoiso-steam-deck-experience/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/12/01/holoiso-steam-deck-experience/media/cover_hu7726ace16c9775bfcf2ebe8e9c53d723_32510_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;If you have spent any time in gaming hardware circles, then you&amp;rsquo;ve probably
heard about the &lt;a href=&#34;https://store.steampowered.com/steamdeck&#34;&gt;Steam Deck&lt;/a&gt;, the
Linux-based handheld gaming PC built by Valve. Yes, you heard that right: not
Windows, but Linux.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve had my fair share of attempts at gaming on Linux. When it works, it&amp;rsquo;s
amazing. When it doesn&amp;rsquo;t, it&amp;rsquo;s incredibly frustrating. The last thing I want
to do when playing a game is to become a developer and start troubleshooting
issues with all the layers between the hardware and the game.&lt;/p&gt;
&lt;p&gt;What makes the Steam Deck different is that the compatibility layer (Proton) and
all the bits and pieces associated with it are integrated in a way that &lt;em&gt;should&lt;/em&gt;
make it unnoticeable to the user. Just start up your Steam Deck, pick your game,
play, and you&amp;rsquo;re good to go.&lt;/p&gt;
&lt;p&gt;Although I&amp;rsquo;ve thought about buying a Steam Deck myself for tinkering and testing
purposes, I could not justify that purchase. But thanks to &lt;a href=&#34;https://www.youtube.com/watch?v=x4gZO7TZT9g&#34;&gt;videos from
the ETAPRIME YouTube channel&lt;/a&gt; I
learned about the existence of &lt;a href=&#34;https://github.com/theVakhovskeIsTaken/holoiso&#34;&gt;HoloISO&lt;/a&gt;,
an unofficial SteamOS 3 installer.&lt;/p&gt;
&lt;h3 id=&#34;holoiso&#34;&gt;HoloISO&lt;/h3&gt;
&lt;p&gt;HoloISO aims to be as close to the native SteamOS 3 experience as possible.
The only reason it exists right now is because Valve does not yet officially
support SteamOS 3 as a distro that you can go and install. That might change
in the future, but for those that are impatient like myself, HoloISO is a nice
option.&lt;/p&gt;
&lt;p&gt;To test out HoloISO and give it a good chance at succeeding, I chose my &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;ASRock
DeskMini X300&lt;/a&gt;.
It sports an &lt;a href=&#34;https://www.amd.com/en/products/apu/amd-ryzen-7-5700g&#34;&gt;AMD Ryzen 7 5700G&lt;/a&gt;,
which is a high-end APU and
should result in performance that&amp;rsquo;s roughly comparable to the Steam Deck in most
scenarios. The GPU cores are not on the newest GPU architecture released by AMD,
but the higher power budget should make up for any architectural deficiencies.&lt;/p&gt;
&lt;p&gt;The installation of HoloISO is very easy, just download the installer and write
it to an USB stick. Once you&amp;rsquo;re booted up, follow the installation instructions
and reboot. You should now be at the SteamOS 3 setup screen.&lt;/p&gt;
&lt;h3 id=&#34;first-impressions&#34;&gt;First impressions&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ll be the first one to admit that my Steam library is a bit out of date, which
is why my experience is limited to older titles. I can confirm that BeamNG drive
and Dirt Rally 2 work fantastically though.&lt;/p&gt;
&lt;p&gt;The only way to play GTA V on Linux without issues used to involve &lt;a href=&#34;https://youtu.be/16dbAUrtMX4&#34;&gt;creating a
Windows VM and passing a GPU to it.&lt;/a&gt; This is why
I was very impressed to see that installing and starting up GTA V worked out
of the box. I could even go to GTA Online and play around without being kicked
out or banned!&lt;/p&gt;
&lt;p&gt;To make choosing and playing games a better experience for casual gamers, Steam
has also come up with the &lt;a href=&#34;https://www.steamdeck.com/en/verified&#34;&gt;Deck verified&lt;/a&gt;
program. You shouldn&amp;rsquo;t be discouraged if your favourite game is shown as
unsupported or not tested, though. Try to start it up and see if it works.
Burnout Paradise and Absolute Drift were not officially supported, but worked like a charm.&lt;/p&gt;
&lt;p&gt;The unfortunate reality of SteamOS is that not every game will work out of the
box. Some older games, such as GTA III and GTA Vice City, would not work at all.
You might be able to check out places like &lt;a href=&#34;https://www.protondb.com/&#34;&gt;ProtonDB&lt;/a&gt;
and see if a game has a tweak that you can apply. Tweaks can involve passing
additional launch options to a game or using another version of the compatibility
layer (Proton).&lt;/p&gt;
&lt;p&gt;What turned me off of this platform was Forza Horizon 4. On this setup, it did
not launch properly, the sound was there but the screen was black. Based on
results in YouTube, it seems like Forza Horizon 4 and Forza Horizon 5 do work
on Steam Deck, so this issue might be down to a compatibility issue on
my hardware or HoloISO distribution of SteamOS 3. I wanted to play that game
though, so I had to eventually end the experiment and install Windows 10 again.&lt;/p&gt;
&lt;p&gt;As someone who wants to get a good overview of resources usage during gameplay
to detect and resolve any performance issues, I tend to use tools like &lt;a href=&#34;https://www.msi.com/Landing/afterburner/graphics-cards&#34;&gt;MSI Afterburner&lt;/a&gt;.
With SteamOS 3, you can easily achieve similar results by enabling the
performance overlay. I was very happy to see that addition because that means
installing and configuring one less tool on my gaming box.&lt;/p&gt;
&lt;h3 id=&#34;quality-of-life-issues&#34;&gt;Quality of life issues&lt;/h3&gt;
&lt;p&gt;Even when things generally work, I did notice some annoyances when playing games.
Sometimes I ran into issues with controls. Steam allows you to pick gamepad
templates and layouts, which can involve community-provided setups. Sometimes
it would default to a layout that simply did not work. Turning off Steam input
altogether would sometimes improve the situation. If that did not work, then
picking an alternative template would do the trick most of the time.&lt;/p&gt;
&lt;p&gt;One major issue that I ran into was related to my XBOX controllers. Because
the XBOX wireless adapter does not work out of the box on Linux, I connected
them via Bluetooth. However, the latency was horrible and borderline unplayable.
There do exist drivers that you can install, mainly &lt;a href=&#34;https://github.com/medusalix/xone&#34;&gt;xone&lt;/a&gt;
and &lt;a href=&#34;https://github.com/atar-axis/xpadneo&#34;&gt;xpadneo&lt;/a&gt;, and those do improve the
situation.&lt;/p&gt;
&lt;h3 id=&#34;desktop-mode&#34;&gt;Desktop mode&lt;/h3&gt;
&lt;p&gt;One aspect of SteamOS 3 that made me actually consider buying a Steam Deck is
the desktop mode. Not only can you play games, but you can also boot into a
normal KDE desktop environment. Install a web browser, emulators,
tweak the system or do actual productive work on it, it just works!&lt;/p&gt;
&lt;p&gt;Hell, you can even install an SSH server and manage your gaming box with Ansible!&lt;/p&gt;
&lt;p&gt;Whenever I&amp;rsquo;ve had a gaming PC, I&amp;rsquo;ve usually hooked it up to a big screen,
installed Windows and Steam on it, and called it a day. If you want to watch
some media, open up the browser and you&amp;rsquo;re good to go. I&amp;rsquo;m happy to report that
something similar can be achieved on SteamOS as well.&lt;/p&gt;
&lt;p&gt;At the time of testing, there were some issues that I didn&amp;rsquo;t expect to have with
desktop mode. Firefox is included as a Flatpak and it did not support any form
of hardware acceleration for video playback, which made it a no-go for a home
theater setup.&lt;/p&gt;
&lt;p&gt;After browsing &lt;a href=&#34;https://www.reddit.com/r/steamdeck/&#34;&gt;/r/SteamDeck&lt;/a&gt; for a while,
you&amp;rsquo;ll notice that a lot of people are into modifying their consoles, and all
of that is possible because Valve did not lock anything down. Pop the hood and
work with the Linux internals as much as you want to! With other gaming consoles
you&amp;rsquo;re going to have to wait until someone discovers an exploit that allows you
to have proper control over hardware that you physically own.&lt;/p&gt;
&lt;h3 id=&#34;gaming-outside-of-steam&#34;&gt;Gaming outside of Steam&lt;/h3&gt;
&lt;p&gt;With the presence of desktop mode, you&amp;rsquo;re not only limited to games purchased
from Steam.&lt;/p&gt;
&lt;p&gt;To see how well I could emulate games that I have purchased on older consoles,
such as PS1, PS2 and PSP, I tried setting up some emulators. I&amp;rsquo;m happy to say
that setting them up is just as fiddly as it is on Windows, but they do seem
to work quite well, at least for these consoles.&lt;/p&gt;
&lt;p&gt;I gave Minecraft a go as well by installing it as a Flatpak from KDE Discovery
software manager, but for some reason it didn&amp;rsquo;t run and crashed on startup.
I didn&amp;rsquo;t look into it further, but it seemed like something that an update can
fix.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gog.com/&#34;&gt;GOG&lt;/a&gt; is a platform similar to Steam, with one notable
exception: their games are DRM-free. I don&amp;rsquo;t use that often, but with a game
like &lt;a href=&#34;https://artofrally.com/&#34;&gt;art of rally&lt;/a&gt; I had to get it from there just
for that reason alone (and the developers publishing native Linux ports).
Although there isn&amp;rsquo;t an official client for GOG on Linux, there do exist open
source implementations. I gave &lt;a href=&#34;https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher&#34;&gt;HeroicGamesLauncher&lt;/a&gt;
a go and although it is a bit rough around the edges, it got the job done and
I could play &lt;em&gt;art of rally&lt;/em&gt; just fine.&lt;/p&gt;
&lt;h3 id=&#34;caveats&#34;&gt;Caveats&lt;/h3&gt;
&lt;p&gt;The HoloISO experience tries to be as close to the one provided by SteamOS 3,
but it is not 100% there yet. It seems that there are differences present
under the hood, such as Steam Deck shipping with the root filesystem being
read-only by default. I might not be aware of other differences between the
HoloISO and official Steam Deck installation, so keep this in mind when making
any decisions based on info from this post.&lt;/p&gt;
&lt;p&gt;The choice of hardware will also affect your experience. The requirements
regarding GPU-s is relatively strict and you&amp;rsquo;ll likely have the best experience
with a modern AMD GPU since that&amp;rsquo;s what SteamOS 3 is built around. Intel
and NVIDIA GPU-s &lt;em&gt;may&lt;/em&gt; work, but are not guaranteed to.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;SteamOS 3, even in its HoloISO implementation, is very impressive. So impressive,
in fact, that I almost bought a Steam Deck. The uncertainty about support for my
favourite games and less than ideal performance on the big screen were what
held me back. For now.&lt;/p&gt;
&lt;p&gt;In its current form, SteamOS 3 (and by extension the Steam Deck itself) are a
tinkerers&amp;rsquo; dream. There are some rough corners and caveats that you should be
aware of as well. Not everyone is into tinkering and experimentation, and that&amp;rsquo;s
OK.&lt;/p&gt;
&lt;p&gt;I sincerely hope that Valve can use the momentum that Steam Deck has achieved
to push gaming on Linux even further. After having to reinstall Windows more than
I&amp;rsquo;d like to admit, having my gaming PC run plain Linux and be fully manageable
with Ansible just feels so &lt;em&gt;right&lt;/em&gt;.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>I have a &#39;Dall UD19PB ThundeRbglt Dock&#39;: my experience with the HP Elitebook 845 G9</title>
      <link>https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/</link>
      <pubDate>Mon, 21 Nov 2022 07:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I&amp;rsquo;ve decided to give a new laptop a test drive, mainly because I had the
opportunity at work, and also out of &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/&#34;&gt;morbid curiosity.&lt;/a&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/media/cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/media/cover_hudf0b575c9c8ef0eef49e3ea27c6afb61_1261336_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1172&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;It&amp;rsquo;s the HP Elitebook 845 G9, and it has pretty good specifications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU: &lt;a href=&#34;https://www.amd.com/en/products/apu/amd-ryzen-7-6800u&#34;&gt;AMD Ryzen 7 6800U&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RAM: 2x16GB DDR5&lt;/li&gt;
&lt;li&gt;Storage: 512GB KIOXIA NVMe SSD (KBG50ZNV512G)&lt;/li&gt;
&lt;li&gt;OS: Fedora 37, kernel version 6.0.8&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This laptop was also &lt;a href=&#34;https://youtu.be/m8lsUvil_S8&#34;&gt;shown in a recent LinusTechTips video&lt;/a&gt;
and praised for its ease of repair and maintenance.&lt;/p&gt;
&lt;p&gt;However, I can&amp;rsquo;t seem to enjoy nice things. This attempt at using a newer
laptop has had some frustrating challenges. Perhaps the common denominator is
Linux. Or me. Can&amp;rsquo;t rule anything out.&lt;/p&gt;
&lt;p&gt;This is simply my experience with this laptop, including my attempts to overcome
certain issues with workarounds. If you find something that&amp;rsquo;s factually
wrong about any part of this post, then please reach out!&lt;/p&gt;
&lt;h3 id=&#34;wi-fi&#34;&gt;Wi-Fi&lt;/h3&gt;
&lt;p&gt;It all began with the Wi-Fi card not working. The card &lt;em&gt;can&lt;/em&gt; be replaced, but
the results can be mixed.&lt;/p&gt;
&lt;p&gt;An Intel Wi-Fi card that I had lying around would not be recognized
by the system at all. The situation was fixed by the reseller who replaced the
Realtek RTL8852BE chip with another Realtek one, this time with the Realtek
RTL8822CE.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/lwfinger/rtw8852be&#34;&gt;Yes, there exist drivers that you can install,&lt;/a&gt;
but it&amp;rsquo;s far from an ideal solution. You will have to reinstall the Wi-Fi driver
after every kernel update, and the kernel updates frequently on Fedora Linux.&lt;/p&gt;
&lt;p&gt;The HP website allows you to pick between a Realtek and Qualcomm Wi-Fi chip. My
recommendation is to go with the Qualcomm option because the Realtek RTL8852BE
does not work out of the box.&lt;/p&gt;
&lt;h3 id=&#34;airplane-mode&#34;&gt;Airplane mode&lt;/h3&gt;
&lt;p&gt;This is an issue I didn&amp;rsquo;t think I would ever have to worry about.&lt;/p&gt;
&lt;p&gt;The laptop would switch itself to airplane mode at random on boot. Not on every
boot, but about 50% of the time. When you try to disable Airplane mode from
GNOME settings, it would flip back on again, no matter how often you tried.&lt;/p&gt;
&lt;p&gt;To turn Airplane mode off properly, you have to use the Airplane mode keyboard
shortcut, and even then it might take an attempt or two.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://h30434.www3.hp.com/t5/Notebook-Operating-System-and-Recovery/EliteBook-845-G9-BIOS-Update-Causing-Problems/td-p/8490697&#34;&gt;Some HP users suspect that the issue might be related to a botched firmware
update.&lt;/a&gt;
There&amp;rsquo;s a kernel patch in the pipeline, and some users say that blacklisting
the &lt;code&gt;hp_wmi&lt;/code&gt; kernel module could also fix the issue.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://askubuntu.com/a/965596&#34;&gt;Others say that this behaviour might be related to certain events being triggered
on the laptop, such as lid closing or the screen rotating.&lt;/a&gt;
The proposed fix did not work to resolve this issue on my laptop.&lt;/p&gt;
&lt;p&gt;Blacklisting the &lt;code&gt;hp_wmi&lt;/code&gt; kernel module was what improved the situation for me.&lt;/p&gt;
&lt;h3 id=&#34;usb4-and-thunderbolt&#34;&gt;USB4 and Thunderbolt&lt;/h3&gt;
&lt;p&gt;This laptop is noteworthy due to its support for USB4, which brings with it
support for Thunderbolt, making it one of the first AMD-based laptops to
properly support that feature.&lt;/p&gt;
&lt;p&gt;At my current employer the general trend has been towards standardization:
every meeting room and desk has a single USB-C port that you plug into, and
you should be good to go.&lt;/p&gt;
&lt;p&gt;I can confirm that USB-C docks seem to work quite well under Linux, especially
the one integrated into my Dell monitor at work.&lt;/p&gt;
&lt;p&gt;I can also confirm that the Dell WD19TB Thunderbolt 3 dock does work.&lt;/p&gt;
&lt;p&gt;On Windows 10.&lt;/p&gt;
&lt;p&gt;Not on Linux though.&lt;/p&gt;
&lt;p&gt;At some point the errors I saw in kernel logs got quite ridiculous.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/media/dall.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/media/dall_huec0f0582ef954fe562d2e5ca6d72b398_56764_1280x800_fit_box_3.png&#34;
             width=&#34;967&#34;
             height=&#34;236&#34;
             alt=&#34;The device name reads like a counterfeit merchandise listing at Amazon.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The device name reads like a counterfeit merchandise listing at Amazon.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;When reconnecting the port, the results were slightly different almost every time.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/media/garbage-time.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/media/garbage-time_hu5219dc093fff2c9956e6af051a8b598a_30583_1280x800_fit_box_3.png&#34;
             width=&#34;976&#34;
             height=&#34;132&#34;
             alt=&#34;I think the dock has suffered a stroke.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I think the dock has suffered a stroke.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The UEFI settings allow some control over the behaviour of the USB-C ports.
You can even disable Thunderbolt support and use them as plain USB-C ports with
DisplayPort support.&lt;/p&gt;
&lt;p&gt;The behaviour of the dock would also be different depending on how you connect
it. If the dock is connected during boot, your USB devices and Ethernet port
will all be functional, but there&amp;rsquo;s no display output. If you boot while the
dock is disconnected and connect it once you have reached the GUI, your display
will work, but you have no USB or Ethernet support.&lt;/p&gt;
&lt;p&gt;Even if one of the two critical functions of the dock work, reconnecting the
cable will eventually result in nothing working. You also have a 50% chance of
the machine locking up completely.&lt;/p&gt;
&lt;p&gt;The reasons for these issues can be any one of these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the proper kernel support is not there yet&lt;/li&gt;
&lt;li&gt;HP messed something up with the latest UEFI update for Linux users&lt;/li&gt;
&lt;li&gt;I was using it wrong&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;dell-wd19tb-thunderbolt-dock-workaround&#34;&gt;Dell WD19TB Thunderbolt dock workaround&lt;/h3&gt;
&lt;p&gt;After multiple sessions of troubleshooting, I seem to have come up with a
solution that seems to work for my use case, which involves connecting a
couple of USB devices, an Ethernet cable, and one 1440p monitor. You&amp;rsquo;re giving
up Thunderbolt capabilities and forcing the dock to fall back to USB+DP altmode
setting, but in return you&amp;rsquo;ll get a setup that actually works.&lt;/p&gt;
&lt;p&gt;To get the Dell WD19TB Thunderbolt dock working, do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;go to UEFI settings and turn off Thunderbolt mode&lt;/li&gt;
&lt;li&gt;save settings and reboot&lt;/li&gt;
&lt;li&gt;connect your monitor over HDMI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yup, that was it. I could not get DisplayPort working. Only HDMI.&lt;/p&gt;
&lt;p&gt;The UEFI settings do contain a setting that allows you to sacrifice
USB and Ethernet bandwidth to allow for higher resolution DP signals to be passed
through, but that&amp;rsquo;s simply not acceptable to me. Based on the description, I
think that the setting forces all USB devices to run at USB 2.0 speeds.
This setting may fix the issue if you want to use DisplayPort, but I haven&amp;rsquo;t
tried it yet.&lt;/p&gt;
&lt;h3 id=&#34;suspend&#34;&gt;Suspend&lt;/h3&gt;
&lt;p&gt;Doesn&amp;rsquo;t work. The screen will go black and the power button indicator will keep
blinking. Only way to break that cycle is to force the laptop to reset by
holding the power button down for an extended amount of time.&lt;/p&gt;
&lt;p&gt;On Lenovo laptops I&amp;rsquo;ve seen an option that allows you to change the S3 state
behaviour for Linux compatibility. I haven&amp;rsquo;t found a way to do something
similar on the HP yet.&lt;/p&gt;
&lt;h3 id=&#34;stability&#34;&gt;Stability&lt;/h3&gt;
&lt;p&gt;This is the straw that broke the camel&amp;rsquo;s back. When playing back video, I
noticed issues with glitching and stuttering. The video would play fine, until
a frame froze for a few seconds, and then everything continued as normal.&lt;/p&gt;
&lt;p&gt;What ruined everything for me were the random crashes that only occurred when
playing back video.&lt;/p&gt;
&lt;p&gt;When I checked system logs from a previous boot (&lt;code&gt;journalctl -b -1&lt;/code&gt;), I found
that something was up with the GPU driver.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/media/amdgpubrr.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/11/21/hp-elitebook-845-g9/media/amdgpubrr_hudcdaab9e215fef50f086aa1a7c3a6de8_136192_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;289&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;This was not a one-off event and once it had happened for the fourth time, I
gave up on this machine and switched back to my trusty ThinkPad T430.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Given enough time, I&amp;rsquo;m sure that at least some of the issues will get fixed,
either with a kernel update or HP rolling out a UEFI update that fixes things
for Linux users.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also possible that a specific set of UEFI settings will contribute to
fixing any of the issues listed here. The number of combinations you can have
is too high for me to bother testing all of those, so I won&amp;rsquo;t be doing that.&lt;/p&gt;
&lt;p&gt;In its current state, I cannot recommend this laptop to Linux users. You &lt;em&gt;can&lt;/em&gt;
get most things working, but you will still be incredibly frustrated with the
issues that remain.&lt;/p&gt;
&lt;p&gt;Something has to change, and it&amp;rsquo;s going to be how I choose hardware in the
future. Linux will stay, which means that the newest and &amp;ldquo;greatest&amp;rdquo; hardware
is off the table for me. Honestly, lagging behind the newest hardware 3-5 years
(or 10 in my case) doesn&amp;rsquo;t sound too bad, you&amp;rsquo;ll still get the performance
improvements at a fraction of the original price.&lt;/p&gt;
&lt;p&gt;If that&amp;rsquo;s what&amp;rsquo;s necessary for a good Linux experience, then so be it.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>I finally found an use case for my Raspberry Pi Model B&#43;</title>
      <link>https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/</link>
      <pubDate>Tue, 01 Nov 2022 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;You have probably heard about the Raspberry Pi. It&amp;rsquo;s a nice little affordable
single-board computer with a huge community using it for all sorts of projects.&lt;/p&gt;
&lt;p&gt;I got my first Raspberry Pi, &lt;a href=&#34;https://www.raspberrypi.com/products/raspberry-pi-1-model-b-plus/&#34;&gt;the Model B+&lt;/a&gt;,
during my first year at university, which was around the winter of 2014/2015.
The idea of a super tiny PC that could actually do useful things was just very
fascinating to me, and I loved the way that green PCB looked.&lt;/p&gt;
&lt;p&gt;Over the years, I&amp;rsquo;ve used that Pi and newer revisions of them in all sorts of
use cases: a simple Kodi media box, a Minecraft server, a web server, retro game
emulation box, and much more.&lt;/p&gt;
&lt;p&gt;Because the goal of the Raspberry Pi was to be an affordable platform for
experimentation and learning for everyone, they had to keep the costs down. This
meant that the computing power that the Raspberry Pi 1 packed wasn&amp;rsquo;t much.
With the Model B+, you get one ARM CPU core that you can overclock to 1 GHz,
and 512MB of RAM. It wasn&amp;rsquo;t much even at the time of release, and it definitely
isn&amp;rsquo;t great in 2022.&lt;/p&gt;
&lt;p&gt;Due to the very limited performance, the use cases for a Raspberry Pi 1 are
quite limited in 2022. Use cases that don&amp;rsquo;t require much computational power
are often better solved by other platforms. Use cases that are actually useful
to me and solve a problem I have are too much for the Pi 1. At the same time,
I absolutely hate it when I have computing equipment sitting around on a shelf
doing nothing. I can&amp;rsquo;t even sell this Pi, because it is not worth much any more
and it has some sentimental value for me.&lt;/p&gt;
&lt;p&gt;Taking all that into account, and looking at my parts box, I decided to give one
idea a go: let&amp;rsquo;s build the slowest damn Syncthing backup endpoint imaginable.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/media/0-setup.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/media/0-setup_hu4ed616ea7a4f99a5efecf7ed9781371c_2446999_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;h3 id=&#34;the-build&#34;&gt;The build&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s a quick rundown of the parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SBC: Raspberry Pi 1 Model B+&lt;/li&gt;
&lt;li&gt;Storage (microSD): SanDisk 8GB that I had lying around&lt;/li&gt;
&lt;li&gt;Storage (USB): Crucial BX500 1TB SATA 2.5&amp;quot; SSD, in an IcyBox USB-SATA enclosure&lt;/li&gt;
&lt;li&gt;Power: official Raspberry Pi microUSB power adapter&lt;/li&gt;
&lt;li&gt;Networking: TP-Link TL-WN722N USB WiFI adapter&lt;/li&gt;
&lt;li&gt;OS: Raspberry Pi OS 32-bit (lite)&lt;/li&gt;
&lt;li&gt;Acoustic foam: yes.&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/media/1-setup.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/media/1-setup_hu037186e2346c38446c113ed81c54ce6b_2241390_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Alternate angle of the setup.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Alternate angle of the setup.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Use case: networked offsite backup of files that I cannot afford
to lose, powered by &lt;a href=&#34;https://syncthing.net/&#34;&gt;Syncthing&lt;/a&gt;, &lt;code&gt;btrfs&lt;/code&gt; as the
filesystem, and &lt;a href=&#34;https://digint.ch/btrbk/&#34;&gt;btrbk&lt;/a&gt; as the snapshotting solution.&lt;/p&gt;
&lt;p&gt;I set the OS up using the Raspberry Pi imager due to the useful options it
offered, such as automatically setting my SSH public key authentication up.
Once booted, I logged in and ran &lt;code&gt;sudo apt update -y&lt;/code&gt;. I knew what to expect
regarding performance, and was still surprised at how slow things have become.
Updating the system and deploying the configuration using Ansible took hours.&lt;/p&gt;
&lt;p&gt;The 1TB SSD is formatted as a &lt;code&gt;btrfs&lt;/code&gt; file system and mounted to &lt;code&gt;/storage&lt;/code&gt;.
For the Syncthing service, I created a separate user &lt;code&gt;syncthing&lt;/code&gt; with the home
folder on &lt;code&gt;/storage/home/syncthing&lt;/code&gt;. The synced data will live on &lt;code&gt;/storage/syncthing&lt;/code&gt;.
Keeping the home folder on the SSD is intentional: Syncthing keeps track of
application state in a database and storing it on the microSD card will wear it
out much faster. The database can also be quite big if you have a lot of
files to sync.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not going to go into the &lt;code&gt;btrbk&lt;/code&gt; setup in much detail, but if you&amp;rsquo;re
interested in that, then &lt;a href=&#34;https://ounapuu.ee/posts/2022/07/09/btrbk-is-awesome/&#34;&gt;I do have a write-up about &lt;code&gt;btrbk&lt;/code&gt;&lt;/a&gt;.
Long story short: snapshots are cool, and they help prevent data loss in case
of accidental deletions.&lt;/p&gt;
&lt;p&gt;I set up Syncthing to allow access to the GUI from over the network by changing
the &lt;code&gt;~/.config/syncthing/config.xml&lt;/code&gt; file while the service was stopped. Just
change the GUI listen address to &lt;code&gt;0.0.0.0:8384&lt;/code&gt;, that will make the GUI accept
connections not only from localhost, but from all machines on the same network.
The next step was to set a password to the GUI and check the &amp;ldquo;Use HTTPS for GUI&amp;rdquo;
box, because you probably don&amp;rsquo;t want any rando messing your machine up.&lt;/p&gt;
&lt;p&gt;The choice to go with the WiFi for networking is related to the environment
this system will eventually be deployed to. Ethernet isn&amp;rsquo;t an option there.&lt;/p&gt;
&lt;p&gt;Once the system was all set up and files were syncing extremely slowly, I kept
an eye on the Pi, especially the red power LED. I had set the CPU to run at 1 GHz
using &lt;code&gt;raspi-config&lt;/code&gt;, and with both the WiFi adapter and SSD connected, I had
concerns that the Pi could not supply enough power. The power limitations of the
Pi are a common source for issues and that has come up in the past as well,
especially with external storage connected to the Pi. However, with this
particular setup this has not been an issue so far. The fact that Pi is so
underpowered that it cannot even make full use of the SSD is probably a
contributing factor to the overall stability.&lt;/p&gt;
&lt;p&gt;The file sync was very slow, but at least it was working. The typical transfer
speeds hovered around 1.5 MB/s. Not great, but given the fact that this setup
will operate in an environment where the download speeds are typically capped
around 15-20 Mbit/s, this will be more than enough.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/media/2-htop.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/media/2-htop_hub4ccdb0fabcd0a33faa2890a7dd92c21_71518_1280x800_fit_box_3.png&#34;
             width=&#34;956&#34;
             height=&#34;295&#34;
             alt=&#34;`htop` showing how much the Pi is struggling under operation.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      `htop` showing how much the Pi is struggling under operation.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/media/3-syncthing.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/11/01/finding-use-case-for-raspberry-pi/media/3-syncthing_hu184a6c7984648785cd01fe7f26552db1_25627_1280x800_fit_box_3.png&#34;
             width=&#34;735&#34;
             height=&#34;205&#34;
             alt=&#34;Typical transfer speed that I observed with the setup.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Typical transfer speed that I observed with the setup.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;How well will this setup work over a longer time period? Only time will tell.
Just like with &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/&#34;&gt;other disastrous tests that I have done&lt;/a&gt;,
I&amp;rsquo;ll try to update this post whenever anything noteworthy happens.&lt;/p&gt;
&lt;p&gt;Does this setup make any sense if you need a performant Syncthing endpoint?
Hell no. However, I&amp;rsquo;m very happy that this little Pi finally has a purpose.&lt;/p&gt;
&lt;h3 id=&#34;alternatives&#34;&gt;Alternatives&lt;/h3&gt;
&lt;p&gt;This project was about finding a purpose for an SBC I already had lying around.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.jeffgeerling.com/blog/2022/you-cant-buy-raspberry-pi-right-now&#34;&gt;If the price and availability of Raspberry Pi-s wasn&amp;rsquo;t a complete shitshow in
2022&lt;/a&gt;,
I would go for a Raspberry Pi 4 in a heartbeat. I can&amp;rsquo;t, and that makes me
and most of the Raspberry Pi community very sad. The more performant Pi-s open
up so many possibilities.&lt;/p&gt;
&lt;p&gt;An &lt;a href=&#34;https://orangepi.com/index.php?route=product/product&amp;amp;product_id=846&#34;&gt;Orange Pi Zero&lt;/a&gt;
running &lt;a href=&#34;https://www.armbian.com/orange-pi-zero/&#34;&gt;Armbian&lt;/a&gt; was something I also
considered, since I had one lying around, but it was a bit too competent for
the job, and I might find a better use for it eventually.&lt;/p&gt;
&lt;p&gt;If you wanted performance, then any x86-based PC will do just fine. My
recommendation is to go for an used PC, be it &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/&#34;&gt;a laptop&lt;/a&gt;
or &lt;a href=&#34;https://www.servethehome.com/introducing-project-tinyminimicro-home-lab-revolution/&#34;&gt;a very small and efficient PC&lt;/a&gt;.
Just keep in mind that the power usage is typically higher on these setups
compared to a small ARM-based single-board computer. If a machine runs 24/7, then
the difference between 2-3 W and 10-20 W will start to matter, especially when
energy prices are quite high in your region.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Recovering a password-protected ThinkPad T60</title>
      <link>https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/</link>
      <pubDate>Thu, 13 Oct 2022 08:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;A couple of years ago, I worked on a ThinkPad T60. That ThinkPad had been in use
by a family member before that, and I started its cleanup by disassembling the
whole machine and making sure that it was pristine. However, once I put it all
back together, I saw that it was password protected. I wasn&amp;rsquo;t even able to access
the BIOS. After repeatedly asking for hints for the password and trying some
simple cases myself, I never cracked it.&lt;/p&gt;
&lt;p&gt;Not too long ago I got curious and looked for a way to overcome this issue.
That&amp;rsquo;s when I stumbled upon &lt;a href=&#34;https://superuser.com/questions/393922/how-to-remove-the-supervisor-bios-password-for-an-ibm-thinkpad&#34;&gt;this SuperUser post about resetting the supervisor password on a ThinkPad.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once my to-do list was down to a reasonable size, I decided to finally give this
a go, since it didn&amp;rsquo;t seem that difficult. Here&amp;rsquo;s an illustrated guide on how
I approached this task.&lt;/p&gt;
&lt;p&gt;Sources that are relevant to this topic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://superuser.com/questions/393922/how-to-remove-the-supervisor-bios-password-for-an-ibm-thinkpad&#34;&gt;How to remove the Supervisor BIOS password for an IBM ThinkPad&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.ja.axxs.net/t60_t60p.htm&#34;&gt;www.ja.axxs.net&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=FW-RLkzjAS8&#34;&gt;&amp;ldquo;How to unlock BIOS Supervisor Password from Lenovo Thinkpad Laptop (no damage to laptop)&amp;rdquo; by Arpan Dubey&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/0-cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/0-cover_hudd564e4c136a6210cd60462dd45bc12c_2600428_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;753&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;h3 id=&#34;setup&#34;&gt;Setup&lt;/h3&gt;
&lt;p&gt;What you&amp;rsquo;ll need to pull this off:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;your ThinkPad T60 laptop that has a supervisor password enabled&lt;/li&gt;
&lt;li&gt;a screwdriver&lt;/li&gt;
&lt;li&gt;anything that conducts electricity and can be used to short two pins&lt;/li&gt;
&lt;li&gt;a steady hand&lt;/li&gt;
&lt;li&gt;a magnifier, if your eyesight isn&amp;rsquo;t that great&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/1-the-big-short.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/1-the-big-short_hue1281e119cee0450a9bfbff052448dff_2403376_1280x800_fit_q75_box.jpg&#34;
             width=&#34;922&#34;
             height=&#34;800&#34;
             alt=&#34;For shorting pins, I came up with this contraption.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      For shorting pins, I came up with this contraption.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;To begin the process, you need to remove the palm rest of the ThinkPad. Follow
the service manual if needed. Removing the keyboard screws is optional, but
it might help you access the correct pins better.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/2-disassembly.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/2-disassembly_hu10b3930cb007c467b1480949d20d224c_3355087_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;T60, slightly disassembled.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      T60, slightly disassembled.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;the-process&#34;&gt;The process&lt;/h3&gt;
&lt;p&gt;The steps for performing the supervisor password clearing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;turn on the laptop&lt;/li&gt;
&lt;li&gt;when you see the ThinkPad logo, short two specific pins&lt;/li&gt;
&lt;li&gt;keep shorting those pins!&lt;/li&gt;
&lt;li&gt;press F1 to go to the BIOS&lt;/li&gt;
&lt;li&gt;navigate to the section in BIOS where you can set the Supervisor Password&lt;/li&gt;
&lt;li&gt;enter the supervisor password setting prompt and enter a blank password in
the first field&lt;/li&gt;
&lt;li&gt;stop shorting the pins, and then enter an empty password to the second field&lt;/li&gt;
&lt;li&gt;save settings and restart&lt;/li&gt;
&lt;li&gt;after rebooting, you should be able to boot without having to enter a password&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What follows is an illustrated guide of the process.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/3-pins.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/3-pins_hu4a4ce54f7853c9f874af22d32589cfd1_2482249_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1103&#34;
             height=&#34;800&#34;
             alt=&#34;The pins you need to short are located on the left side of the laptop, under the palmrest.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The pins you need to short are located on the left side of the laptop, under the palmrest.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/4-startup.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/4-startup_huea448bcce3310bf4c6e461d62a4c4442_2972028_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Once you see this, short those pins!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Once you see this, short those pins!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/5-short.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/5-short_hu3a832aee612329451ad08fa18301e5de_1892856_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Just apply pressure to those pads and make sure the contact is solid.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Just apply pressure to those pads and make sure the contact is solid.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This is the step where I messed up initially. The contact between the pins was
not good and I got prompted with the supervisor password prompt. Power the machine
off and try again if you face the same issue.&lt;/p&gt;
&lt;p&gt;Once the pins are shorted, you should be able to access the BIOS with a little
bit of F1 key spamming.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/6-bios.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/6-bios_hu9f00fd82749dfa5ebaeb9ab547f8f9fd_3472695_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;While the pins are still shorted, you should be able to get access to the BIOS.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      While the pins are still shorted, you should be able to get access to the BIOS.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/7-password.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/7-password_huf20ebc44b0cd9ff97f49db91a2b34d0a_3399904_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Leave the first field blank, stop shorting the pins, and leave the other field blank as well.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Leave the first field blank, stop shorting the pins, and leave the other field blank as well.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;After saving the settings and rebooting, you should be greeted with a successful
boot.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/8-its-booting.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/13/recovering-password-locked-thinkpad-t60/media/8-its-booting_hu6af772fd07e3e831944d24c8ec411eae_2841308_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;It&amp;#39;s booting! Not into Linux, since the SSD is removed, but still, it works!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      It&amp;#39;s booting! Not into Linux, since the SSD is removed, but still, it works!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Once you&amp;rsquo;ve confirmed that everything&amp;rsquo;s OK, assemble the machine again and enjoy
the laptop that you just saved from becoming e-waste.&lt;/p&gt;
&lt;h3 id=&#34;caveats&#34;&gt;Caveats&lt;/h3&gt;
&lt;p&gt;This guide might not be terribly relevant in 2022. I still remember starting
my software development career in 2016 with a ThinkPad T60 and it was painful
even back then. These laptops are classics, but they are really starting to show
their age. I&amp;rsquo;ve even encountered issues like the WiFi chip causing lots of
trouble, with the connection being very spotty and borderline unusable.&lt;/p&gt;
&lt;p&gt;But hey, at least it&amp;rsquo;s not completely unusable any more!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Testing a cheap ExpressCard to NVMe SSD adapter on my ThinkPad T430</title>
      <link>https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/</link>
      <pubDate>Tue, 04 Oct 2022 05:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I stumbled upon &lt;a href=&#34;https://www.reddit.com/r/thinkpad/comments/urvkeb/expresscard_to_m2_nvme_key_m_adapter_from/&#34;&gt;this post in /r/thinkpad&lt;/a&gt;,
which got my attention. It showcases an ExpressCard to M.2 NGFF adapter that
they purchased from AliExpress. The adapter has a similar purpose to the one
designed by &lt;a href=&#34;https://thinkmods.store/&#34;&gt;thinkmods.store&lt;/a&gt;, with the added bonus
that it could fit longer NVMe SSD-s if you didn&amp;rsquo;t mind them sticking out of the
case. You could also order one instantly, so I did.&lt;/p&gt;
&lt;p&gt;For those interested, the title of the listing at the time of writing of this
article is &amp;ldquo;ExpressCard interface to m.2 NGFF nvme solid state disc x201 t430 hp8570 w520&amp;rdquo;.
The listing I chose was &lt;a href=&#34;https://www.aliexpress.com/item/1005002023877404.html?spm=a2g0o.order_list.0.0.74c21802cTrI3L&#34;&gt;this one.&lt;/a&gt;
I&amp;rsquo;m not affiliated with the manufacturer or the seller in any way.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/0-cover.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/0-cover_hu3cd62130f6859385a54e519dd36c08aa_4676494_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Bits and pieces.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Bits and pieces.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;the-idea&#34;&gt;The idea&lt;/h3&gt;
&lt;p&gt;I try to avoid buying things that I don&amp;rsquo;t need, which is why I came up with an
excuse for getting this adapter: adding a cache SSD to my &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/&#34;&gt;ThinkPad-as-a-server&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The OS is running off of an mSATA SSD that I could theoretically use for the
same purpose, but eventually killing the SSD that also hosts the OS with constant
writes sounded like a really bad idea. I also didn&amp;rsquo;t want to have excessive writes
on my pair of Samsung 870 QVO 4TB SATA SSD-s, because replacing those will be
quite expensive down the line.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what we&amp;rsquo;re working with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://sabrent.com/collections/memory-and-storage/products/sb-1342-512&#34;&gt;Sabrent Rocket Nano NVMe 2242 SSD (512GB)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;the aforementioned ExpressCard to M.2 NGFF adapter&lt;/li&gt;
&lt;li&gt;ThinkPad T430 with an ExpressCard34 slot&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quick word on the packaging: it was packaged in a small cardboard box, which
held up okay, but a more rough treatment of the box would probably have broken
the tiny PCB.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/1-parts.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/1-parts_hu515c02648f2bec3100e21b8275f1649a_5413298_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The SSD, adapter PCB, and the case.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The SSD, adapter PCB, and the case.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;assembly&#34;&gt;Assembly&lt;/h3&gt;
&lt;p&gt;According to comments I saw before purchasing the adapter, I expected the assembly
to be a bit tricky, and after assembling it I have to agree with that sentiment.&lt;/p&gt;
&lt;p&gt;First, you&amp;rsquo;ll have to squeeze the SSD in there. Unlike M.2 slots that are common
in laptops and desktops alike, this one requires you to horizontally push the SSD
in without breaking anything. Don&amp;rsquo;t be afraid to use a bit of force here, but be
careful in how you apply it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/2-assembly.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/2-assembly_huf6f1e603d50b1a6fdcea8eeaa76bf3c2_7113533_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;na-no&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      na-no
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/3-underside.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/3-underside_hub1fb02ecd47f2440581ab2fef4b4d386_6069247_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Bottom of the adapter.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Bottom of the adapter.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;After the SSD is in, screw it in properly and place the assembly on one of the
metal parts.&lt;/p&gt;
&lt;p&gt;Now comes the fun part: you&amp;rsquo;ll have to clip on the top part as well. My
recommendation is to first clip in the part that sits near the contact pins,
then the one at the other end of the adapter, and then push in the metal
shielding at the edges.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/4-assembled.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/4-assembled_hua90dbc61bcc3b67543b3656fff065f46_4159407_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The adapter, 100% assembled.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The adapter, 100% assembled.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/5-sideview.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/5-sideview_hu6029dc0d5b50cdd966e4ee6544fe010f_4117543_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;For some reason, mine ended up a bit crooked near the connector.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      For some reason, mine ended up a bit crooked near the connector.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/6-opening.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/6-opening_hu4983ab13f01c2cca4e719f8c04ae35ad_2940705_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;This opening allows for the installation of longer M.2 SSD-s.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      This opening allows for the installation of longer M.2 SSD-s.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;tests&#34;&gt;Tests&lt;/h3&gt;
&lt;p&gt;To test this adapter out, I just plugged it into my main ThinkPad T430 running
Fedora 36 and Linux kernel version 5.19.12. It worked right out of the box.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/7-led.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/7-led_hudb493e9cdfc684a2e95e975978baa14a_3481530_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Yes, it has a blue LED that blinks.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Yes, it has a blue LED that blinks.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/8-installed.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/8-installed_hud07e4791597ae5eddb90c6345b96c1c7_3538317_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;When not blinking, it looks something like this.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      When not blinking, it looks something like this.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/9-dmesg.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/9-dmesg_hu3c4d978a9c4ae28242fe95c6f1397087_52254_1280x800_fit_box_3.png&#34;
             width=&#34;957&#34;
             height=&#34;200&#34;
             alt=&#34;Fedora picked it up with no issues.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Fedora picked it up with no issues.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;My ThinkPad T430 can now support hotpluggable NVMe SSD-s, and 4 internal SSD-s
in total. Not quite tricked out as &lt;a href=&#34;https://youtu.be/tHNQOJ_nsLc&#34;&gt;this setup&lt;/a&gt;,
but not bad for a 10 year old laptop.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/10-gnome-disks.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/10-gnome-disks_huc4a171a7f677c97447e0b571adce9096_65309_1280x800_fit_box_3.png&#34;
             width=&#34;960&#34;
             height=&#34;392&#34;
             alt=&#34;4 SSD-s on a ThinkPad T430. Bonkers.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      4 SSD-s on a ThinkPad T430. Bonkers.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Please note that these tests are not done with any meaningful testing methodology
and are just quick one-off tests that aim to showcase what to expect when using
this adapter with the configuration I&amp;rsquo;m using it with.&lt;/p&gt;
&lt;p&gt;To check how well the adapter performs, I opened &lt;code&gt;gnome-disks&lt;/code&gt; and did a quick
benchmark offered by it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/11-benchmark.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/11-benchmark_hu058ed03104b4f54012487b7139e16656_118884_1280x800_fit_box_3.png&#34;
             width=&#34;634&#34;
             height=&#34;594&#34;
             alt=&#34;Results of the quick one-off benchmark.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Results of the quick one-off benchmark.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The average read speed is at 411.2 MB/s, and writes at 366.7 MB/s.&lt;/p&gt;
&lt;p&gt;The results are in line with the limitations of a PCIe 2.0 x1 link, which has a
theoretical cap of 500 MB/s.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s more noteworthy is the latency. Average access time is at 0.03 ms,
which compares well to a Samsung 870 EVO 1TB SATA SSD that&amp;rsquo;s connected to the
same machine, which reports an average access time of 0.07 ms.&lt;/p&gt;
&lt;p&gt;When copying files to the SSD, the temperature sensor reported a maximum of 60°C.
Additional read operations in the form of an ZFS scrub hit 63°C, which was the
maximum I observed during my quick testing.&lt;/p&gt;
&lt;p&gt;When I threw both read and write operations to the SSD, the total I/O bandwidth
for both operations was capped at around 390 MB/s according to &lt;code&gt;zpool iostat 1 -v&lt;/code&gt;.
If your workloads do a lot of read-write operations in parallel, then take this
into account.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/12-zfs-bandwidth.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/10/04/testing-expresscard-nvme-ssd-adapter/media/12-zfs-bandwidth_hu5b03017e44c0c6242c2ef2bcb6d8dca8_12557_1280x800_fit_box_3.png&#34;
             width=&#34;729&#34;
             height=&#34;120&#34;
             alt=&#34;I/O stats during heavy read-write operations.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I/O stats during heavy read-write operations.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;As for my use case, it seems to be holding up okay. I&amp;rsquo;ll have to report back
after this adapter and SSD combo has been in use for a longer time.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>The minimum viable fan control script</title>
      <link>https://ounapuu.ee/posts/2022/09/26/minimum-viable-fan-control-script/</link>
      <pubDate>Mon, 26 Sep 2022 08:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/09/26/minimum-viable-fan-control-script/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I&amp;rsquo;ve always been a fan of tinkering with cooling setups on my computers.
I&amp;rsquo;ve even went as far as writing &lt;a href=&#34;https://github.com/Hermanio/linux-cpu-manager&#34;&gt;crappy&lt;/a&gt;
&lt;a href=&#34;https://github.com/Hermanio/linux-gpu-manager&#34;&gt;solutions&lt;/a&gt; to make up for
deficiencies on the hardware level. After years of dumb experiments I&amp;rsquo;ve seen
how little you can get away with in cooling and how to run your machines as
quietly as possible without giving up too much performance.&lt;/p&gt;
&lt;p&gt;I also appreciate simplicity, which is why I&amp;rsquo;m currently running the simplest
damn solution you can imagine to control how my ThinkPad T430 and ASRock
DeskMini X300 run: a shell script.&lt;/p&gt;
&lt;p&gt;It also comes with some added benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;self-documenting&lt;/li&gt;
&lt;li&gt;highly customizable&lt;/li&gt;
&lt;li&gt;low resource usage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These scripts are not &amp;ldquo;battle-hardened&amp;rdquo; and using them incorrectly may or
may not result in hardware failure. Use at your own risk. The only guarantee
I can give is that &lt;em&gt;it works on my machine™&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re someone who doesn&amp;rsquo;t like tinkering with their computers and wants
their machines to &amp;ldquo;just work&amp;rdquo;, then this article likely isn&amp;rsquo;t for you.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/09/26/minimum-viable-fan-control-script/media/image.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/09/26/minimum-viable-fan-control-script/media/image_hu8bbe8a0693fa6a8f73ff637088335689_20347_1280x800_fit_box_3.png&#34;
             width=&#34;473&#34;
             height=&#34;209&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;h3 id=&#34;thinkpad-t430&#34;&gt;ThinkPad T430&lt;/h3&gt;
&lt;p&gt;With the ThinkPad T430, the script does two things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;control the fan speed&lt;/li&gt;
&lt;li&gt;preemptively throttle the CPU and GPU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This type of behaviour is optimized for mostly quiet operation. The fan is
running at its lowest speed when under a small load, and the CPU/GPU throttling
has an added benefit of reducing the overall power usage, too. The difference
between non-turbo and turbo speeds on the Intel i7-3820QM can be as much as
13-15 watts.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/fan_speed_control#ThinkPad_laptops&#34;&gt;To enable fan control on ThinkPads&lt;/a&gt;,
you need to have a file at &lt;code&gt;/usr/lib/modprobe.d/thinkpad_acpi.conf&lt;/code&gt; with the
following contents:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;options thinkpad_acpi fan_control=1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Reboot, and you can now have full control over the fan speed in your ThinkPad!&lt;/p&gt;
&lt;p&gt;The script itself looks like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash

set -e

while true; do

  temp=$(cat /sys/class/thermal/thermal_zone1/temp)

  if ((temp &amp;gt; 90000)); then
    echo level 7 &amp;gt;/proc/acpi/ibm/fan
  elif ((temp &amp;gt; 75000)); then
    echo level 5 &amp;gt;/proc/acpi/ibm/fan
  elif ((temp &amp;gt; 60000)); then
    echo level 3 &amp;gt;/proc/acpi/ibm/fan
  elif ((temp &amp;gt; 30000)); then
    echo level 1 &amp;gt;/proc/acpi/ibm/fan
  else
    echo level 0 &amp;gt;/proc/acpi/ibm/fan
  fi

  if ((temp &amp;gt; 97000)); then
    echo 350 &amp;gt;/sys/class/drm/card*/gt_max_freq_mhz
    echo 350 &amp;gt;/sys/class/drm/card*/gt_boost_freq_mhz
  elif ((temp &amp;gt; 90000)); then
    echo 650 &amp;gt;/sys/class/drm/card*/gt_max_freq_mhz
    echo 650 &amp;gt;/sys/class/drm/card*/gt_boost_freq_mhz
  else
    echo 1250 &amp;gt;/sys/class/drm/card*/gt_max_freq_mhz
    echo 1250 &amp;gt;/sys/class/drm/card*/gt_boost_freq_mhz
  fi

  if ((temp &amp;gt; 70000)); then
    echo 1 &amp;gt;/sys/devices/system/cpu/intel_pstate/no_turbo
  else
    echo 0 &amp;gt;/sys/devices/system/cpu/intel_pstate/no_turbo
  fi

  sleep 0.5
done
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;What we&amp;rsquo;re doing is reading the temperature of the CPU package and then setting
the fan speed and throttling based on that. Note that the temperatures are
represented without any decimal places. A reading of 78000 means that the chip
is running at 78 °C.&lt;/p&gt;
&lt;p&gt;On my ThinkPad T430, the fan speed levels can be roughly described as such:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;level 1: lowest speed, barely audible&lt;/li&gt;
&lt;li&gt;level 3: audible, but tolerable&lt;/li&gt;
&lt;li&gt;level 5 and above: it&amp;rsquo;s probably loud enough to bother you&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The second section controls the integrated GPU. What I&amp;rsquo;ve found in my testing
is that a weak integrated GPU can still chug up to 20 watts, which is a
considerable amount, especially on a laptop. The &lt;code&gt;card*&lt;/code&gt; wildcard is there
because the integrated GPU may change between &lt;code&gt;card0&lt;/code&gt; and &lt;code&gt;card1&lt;/code&gt;, and I&amp;rsquo;m too
lazy to make the script any smarter.&lt;/p&gt;
&lt;p&gt;The values written there correspond to the maximum GPU clock speed. &lt;code&gt;1250&lt;/code&gt; happens
to be the max clock speed (in MHz) and at that speed the GPU is using a lot of
power. &lt;code&gt;650&lt;/code&gt; is the speed at which the integrated GPU is running most
efficiently. &lt;code&gt;350&lt;/code&gt; is the lowest speed, and you will notice it due to the
performance being extra crappy.&lt;/p&gt;
&lt;p&gt;With the CPU, I chose to just turn the turbo boost on or off. With turbo boost
off, the CPU will top out at 2.7 GHz and around 22 watts of power usage. With
turbo boost, the CPU can run anywhere between 3.4-3.7 GHz, depending on the number
of cores under load. You&amp;rsquo;ll likely notice much higher CPU temperatures and power
usage climbing to around 35 watts. Fast at short and bursty workloads, and yet
efficient and relatively cool at sustained loads.&lt;/p&gt;
&lt;p&gt;And at the very end, you have a simple &lt;code&gt;sleep&lt;/code&gt; statement. I&amp;rsquo;ve set it to half a
second, but feel free to set it as you see fit. Higher intervals might not be
that good of an idea because the script may not be able to respond quickly enough
to changing thermals, just keep that in mind.&lt;/p&gt;
&lt;h3 id=&#34;asrock-deskmini-x300&#34;&gt;ASRock DeskMini X300&lt;/h3&gt;
&lt;p&gt;Although I&amp;rsquo;ve opted for a more experimental setup with my home server and the
ASRock DeskMini X300 is no longer running as one, I think it&amp;rsquo;s still worthwhile
to share how I configured the fan control logic on this machine.&lt;/p&gt;
&lt;p&gt;With the ASRock DeskMini X300, my goal was simple: let it run as quietly as
reasonably possible without losing too much performance.&lt;/p&gt;
&lt;p&gt;This machine was running 24/7 as a server and has a powerful 8-core AMD Ryzen 7
5700G CPU in it. One thing this script is heavily relying on is the fact that Ryzen
CPU-s have well-engineered boosting logic in them, meaning that they&amp;rsquo;re already
designed to run at the highest speed possible and only limit their speed if they
hit power or thermal limits.&lt;/p&gt;
&lt;p&gt;One thing you may need to do first is installing &lt;code&gt;lm-sensors&lt;/code&gt; and running
&lt;code&gt;sudo sensors-detect&lt;/code&gt;. By default the CPU fan speed controls were not properly
exposed, but after running &lt;code&gt;sensors-detect&lt;/code&gt; and saying yes at every prompt,
they were picked up.&lt;/p&gt;
&lt;p&gt;The script looks like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash

set -e

# /sys/devices/platform/nct6775.656/hwmon/hwmon3

echo 1 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2_enable

while true; do

  temp=$(cat /sys/class/hwmon/hwmon4/temp1_input)

  if ((temp &amp;gt; 94000)); then
    echo 170 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  elif ((temp &amp;gt; 90000)); then
    echo 140 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  elif ((temp &amp;gt; 70000)); then
    echo 120 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  elif ((temp &amp;gt; 40000)); then
    echo 30 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  else
    echo 0 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  fi

  sleep 5
done
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;hwmon&lt;/code&gt; values and which fan you&amp;rsquo;re controlling is likely different on your
own PC. Take a look at the paths found in the script and poke around while also
physically looking at your PC. Try enabling PWM control by writing to &lt;code&gt;pwm*_enable&lt;/code&gt;
handles and then setting the fan speed. As a result of your poking, you should
see the CPU fan change its speed. If it doesn&amp;rsquo;t, try another value.&lt;/p&gt;
&lt;p&gt;The values you can write are in the range 0-255, where the higher value corresponds
to a higher speed.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve limited the TDP of my CPU to 35 watts using a setting found in UEFI
settings. This results in the CPU running cool and quiet even under a full load.&lt;/p&gt;
&lt;h3 id=&#34;systemd-service&#34;&gt;systemd service&lt;/h3&gt;
&lt;p&gt;To run your fan control script as a systemd service, drop the script to your
preferred location (I placed it in &lt;code&gt;/root/.local/bin/fancontrol&lt;/code&gt;), then create
a file &lt;code&gt;/etc/systemd/system/fancontrol.service&lt;/code&gt; with the following contents:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Unit]
Description=Quick fan control software

[Service]
ExecStart=/root/.local/bin/fancontrol

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And once that is done, enable and start your fan control service with
&lt;code&gt;sudo systemctl enable --now fancontrol.service&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you encounter issues or something isn&amp;rsquo;t working right, check the status of
the service with &lt;code&gt;systemctl status fancontrol.service&lt;/code&gt; or full logs with
&lt;code&gt;journalctl -u fancontrol.service&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;If you want something that works out of the box and does the smart stuff for you,
then &lt;a href=&#34;https://wiki.archlinux.org/title/fan_speed_control&#34;&gt;give this Arch Linux wiki page a look&lt;/a&gt;.
If you&amp;rsquo;re not into that and want to easily tune the behaviour of your machine,
then feel free to use these scripts as a baseline for your own experimentation.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Accidentally turning the ASRock DeskMini X300 into a semi-passively cooled PC</title>
      <link>https://ounapuu.ee/posts/2022/09/17/asrock-deskmini-x300-semipassive/</link>
      <pubDate>Sat, 17 Sep 2022 08:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/09/17/asrock-deskmini-x300-semipassive/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;After playing around with fan curves on my &lt;a href=&#34;https://www.asrock.com/nettop/AMD/DeskMini%20X300%20Series/index.asp&#34;&gt;ASRock DeskMini X300&lt;/a&gt;
based home server, I noticed one interesting thing. At least it was
interesting to me.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/09/17/asrock-deskmini-x300-semipassive/media/poster.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/09/17/asrock-deskmini-x300-semipassive/media/poster_hu617d2c8d12e97a84f282e8d5078732d8_3755312_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;
&lt;p&gt;I had one goal: to try to see if I could turn it into a semi-passive PC by only
turning the fan on when the PC was under load while keeping it off for as long
as possible. Running the fan only when necessary means less noise
and less dust accumulating on the heat sink. No dust, no maintenance required.&lt;/p&gt;
&lt;p&gt;The cooling solution used is the &lt;a href=&#34;https://noctua.at/en/nh-l9a-am4&#34;&gt;Noctua NH-L9a&lt;/a&gt;,
a low-profile CPU cooler. The two main selling points for me were that it was
small enough to fit into the DeskMini, and it is much quieter than the stock
AMD Ryzen Stealth cooler.&lt;/p&gt;
&lt;p&gt;I started with something reasonable: only kick the fan on when the CPU is over
55°C. This did end up with the fan occasionally turning off, but after around
10-15 seconds it would kick on again. With time, I bumped this limit up by 5-10
degrees each time and ended up with the current configuration. The fan now
turns on after 80°C and starts spinning at a modest level at over 90°C.&lt;/p&gt;
&lt;p&gt;By turning this limit up, I noticed that the PC could be run in a fanless mode
for much longer. This meant that the PC was also much hotter itself and was
warm to touch, but nothing extreme or concerning.&lt;/p&gt;
&lt;h3 id=&#34;results&#34;&gt;Results&lt;/h3&gt;
&lt;p&gt;I added a couple of lines to my fan control script to track the CPU
temperatures and the fan speeds, here are the results:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/09/17/asrock-deskmini-x300-semipassive/media/deskmini-graph.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/09/17/asrock-deskmini-x300-semipassive/media/deskmini-graph_hu0dad26afc1ab63b27d0e9f5de5d4aa61_45989_1280x800_fit_box_3.png&#34;
             width=&#34;1016&#34;
             height=&#34;492&#34;
             alt=&#34;CPU temperatures over a 19 hour period.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      CPU temperatures over a 19 hour period.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Based on the data I gathered, the CPU fan was off for 90.7% of the time during
this test period. The temperature in the apartment was around 26-30°C, which
is pretty much the worst case scenario in my region.&lt;/p&gt;
&lt;p&gt;My running theory is that a hotter heat sink is able to dissipate more heat
passively. The motherboard and the metal case may also be small contributors to
cooling the PC this way. The PC is also acting as a 24/7 home server, which means
a lot of idle time that&amp;rsquo;s interrupted by occasional short-term load. Heat from
those bursty loads can be stored in the heat sink relatively easily without it
heating up enough to trigger the fan.&lt;/p&gt;
&lt;p&gt;This approach will likely not work that well if your workloads are more demanding
and result in a higher continuous loads on the system.&lt;/p&gt;
&lt;p&gt;Yes, I&amp;rsquo;m aware that running a PC like this may have negative consequences. I ran
the server like this for about a week and while I liked it being a
semi-passively cooled server, but decided to go back to the old behaviour.&lt;/p&gt;
&lt;p&gt;While there are plenty of fanless designs out there that run hot by design, I
decided that I don&amp;rsquo;t want to take this risk with the DeskMini. It would be a
cool experiment, but my main server is probably not the best candidate for it.
The CPU could handle it without breaking a sweat, but I&amp;rsquo;m more concerned about
the rest of the components, especially the motherboard. The stickers on the
DRAM modules were already warped due to the heat, I prefer not to damage
anything else.&lt;/p&gt;
&lt;p&gt;For those who want to try something similar (and at your own risk, of course),
here&amp;rsquo;s my fan control script. Just make sure to install &lt;code&gt;lm-sensors&lt;/code&gt; first and
run &lt;code&gt;sudo sensors-detect&lt;/code&gt; so that the controls are exposed by your system.
The exact paths and values may be something you need to change to match your
system.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash

set -e

# /sys/devices/platform/nct6775.656/hwmon/hwmon3

echo 1 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2_enable

while true; do

  temp=$(cat /sys/class/hwmon/hwmon4/temp1_input)

  if ((temp &amp;gt; 94000)); then
    echo 120 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  elif ((temp &amp;gt; 80000)); then
    echo 70 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  else
    echo 0 &amp;gt;/sys/devices/platform/nct6775.656/hwmon/hwmon3/pwm2
  fi

  sleep 5
done
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;honorable-mentions&#34;&gt;Honorable mentions&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m not the only one who likes to experiment with the ASRock DeskMini X300.
This all started with an idea of fitting a &lt;a href=&#34;https://www.arctic.de/en/Alpine-AM4-Passive/ACALP00022A&#34;&gt;passive cooler&lt;/a&gt;
into the DeskMini and me discovering that it was already done.&lt;/p&gt;
&lt;p&gt;More fun ideas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/sffpc/comments/envgds/asrock_a3003400gml120_mod/&#34;&gt;the hotrod of PC cooling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.fanlesstech.com/2018/11/fixing-mini-stx.html&#34;&gt;a reader of FanlessTech actually slapped the passive cooler onto the DeskMini&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Overcoming hardware limitations: the time-to-sleep script</title>
      <link>https://ounapuu.ee/posts/2022/08/26/the-time-to-sleep-script/</link>
      <pubDate>Fri, 26 Aug 2022 08:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/08/26/the-time-to-sleep-script/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;As some of you might own, &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/&#34;&gt;I&amp;rsquo;m still rocking a ThinkPad T430, a laptop model
originally released in 2012.&lt;/a&gt;
It&amp;rsquo;s not the fastest laptop out there, but it is plenty fast for a number of
tasks, even most software development work.&lt;/p&gt;
&lt;p&gt;I also try to keep my machines up to date and properly backed up. On my laptop,
this means having around a couple of scheduled tasks, such as &lt;code&gt;restic&lt;/code&gt; backups.
They don&amp;rsquo;t really take up a lot of time, but if an intensive scheduled task
starts while you&amp;rsquo;re having a video call over Google Meet while also sharing
the screen, things can get a bit slow, ruining the experience.&lt;/p&gt;
&lt;p&gt;After a couple of these instances, I started thinking about finding a solution.&lt;/p&gt;
&lt;h3 id=&#34;scheduled-tasks&#34;&gt;Scheduled tasks&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s a quick rundown of regular tasks that I like to run on my laptop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Backups using &lt;code&gt;restic&lt;/code&gt;&lt;/strong&gt;: hourly backups to my home server. The file scanning
process of the backup is quite intense, eating up a lot of my CPU time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;System updates using &lt;code&gt;dnf&lt;/code&gt; and &lt;code&gt;flatpak&lt;/code&gt;&lt;/strong&gt;: usually run daily, because I&amp;rsquo;m too
lazy to install the updates using a GUI, and at the same time I cannot afford
to run out of date software.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Backups of critical files from my server to my laptop&lt;/strong&gt;: there are some files
I just cannot afford to lose. For this reason, I make a daily backup of the
files to my laptop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Filesystem maintenance&lt;/strong&gt;: I don&amp;rsquo;t trust my storage devices (and neither should
you), which is why I run a weekly scrub on my SSD that&amp;rsquo;s running the &lt;code&gt;btrfs&lt;/code&gt;
filesystem. If there are errors detected, I will know as soon as possible.&lt;/p&gt;
&lt;p&gt;These tasks can be quite intensive, especially on hardware that&amp;rsquo;s a bit older.&lt;/p&gt;
&lt;p&gt;With some tasks, such as system updates, you may also run into random
issues. Updating Mozilla Firefox while it&amp;rsquo;s actively running results in the
browser requiring a restart immediately after opening a new tab. This is very
annoying and inconvenient when you&amp;rsquo;re in the middle of your work.&lt;/p&gt;
&lt;h3 id=&#34;the-time-to-sleep-script&#34;&gt;The &amp;ldquo;time-to-sleep&amp;rdquo; script&lt;/h3&gt;
&lt;p&gt;To avoid intensive scheduled tasks running while I&amp;rsquo;m doing actual work, I tried
rescheduling these tasks to a more quiet time. All I needed to do was to edit
the &lt;code&gt;systemd&lt;/code&gt; timers so that the jobs start after midnight and leave the laptop
running.&lt;/p&gt;
&lt;p&gt;This solution has quite an obvious downside: my laptop will be powered on
pretty much 24/7, and since electricity is super expensive and laptop
maintenance a bit of a pain, I&amp;rsquo;d be wasting resources, time and eventually
money.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;could&lt;/em&gt; make the last scheduled task make the machine shut down, but what if I
have a long-running file copy operation running? It would be interrupted, unless
I specifically disabled the scheduled task.&lt;/p&gt;
&lt;p&gt;Then it clicked for me.&lt;/p&gt;
&lt;p&gt;I know when I&amp;rsquo;m planning on going to sleep. Sleeping also has a regular cycle
as it happens daily. Why not just put all the scheduled daily tasks into one
script that I can run whenever I intend to shut down my laptop?&lt;/p&gt;
&lt;p&gt;And thus, the &lt;code&gt;time-to-sleep&lt;/code&gt; script was born. It&amp;rsquo;s a simple Bash script that
lives in &lt;code&gt;/root/.local/bin/time-to-sleep&lt;/code&gt;. To make sure I can also reasonably
observe the behaviour of the script, I&amp;rsquo;ve implemented it as a simple &lt;code&gt;systemd&lt;/code&gt;
service that lives in &lt;code&gt;/etc/systemd/system/time-to-sleep.service&lt;/code&gt;. It&amp;rsquo;s
disabled by default, but can be started manually.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Unit]
Description=Run maintenance tasks

[Service]
ExecStart=/root/.local/bin/time-to-sleep
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I have an alias in &lt;code&gt;~/.bashrc&lt;/code&gt; that I use to start the service.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;alias time-to-sleep=&amp;#34;sudo systemctl start time-to-sleep.service&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Whenever the time comes to go to sleep, or when I&amp;rsquo;m just going to do something
else and can leave the laptop running at my desk, I just open a terminal window,
type &lt;code&gt;time-to-sleep&lt;/code&gt; and I&amp;rsquo;m good to go. If I&amp;rsquo;m somewhere with a very poor
internet connection or need to conserve battery power, I can opt to not run that
script.&lt;/p&gt;
&lt;p&gt;Going with this approach also saves me a lot of trouble on the technical side
as well. I don&amp;rsquo;t need to think of a magical way to automatically detect if I&amp;rsquo;m
working at the moment, or if I&amp;rsquo;m running on battery, or if I&amp;rsquo;m behind a limited
internet connection. Sometimes your job becomes so much easier if you make some
assumptions about when and where the script runs. You&amp;rsquo;re in control of choosing
when to run it, after all.&lt;/p&gt;
&lt;p&gt;In case something goes wrong, I can rely on the &lt;code&gt;set -e&lt;/code&gt; line in my script to
fail hard. When I come back to my machine, it will be quite noticeable that
something has gone wrong, as the laptop will still be running. Who needs a
fancy monitoring setup when you have visual evidence of failure?&lt;/p&gt;
&lt;p&gt;As for the hourly backups, I solved that problem by only making backups of
more important files. It takes much fewer resources compared to the full &lt;code&gt;/home&lt;/code&gt;
folder backup that runs as part of the &lt;code&gt;time-to-sleep&lt;/code&gt; script.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;After all this work, I don&amp;rsquo;t have to worry about any scheduled tasks hogging
up all the resources while working. At the same time, I still get all the
benefits that the scheduled tasks bring.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;In case you need it: here&amp;rsquo;s an example of the script that I&amp;rsquo;m running, with all
the personal details scrubbed out. Feel free to use it as inspiration for your
own &lt;code&gt;time-to-sleep&lt;/code&gt; script!&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash

set -e

echo &amp;#34;Restic full home folder backup.&amp;#34;
export RESTIC_REPOSITORY=&amp;#39;sftp:backupuser@backupserver.lan:/path/to/repo/&amp;#39;
export RESTIC_PASSWORD=&amp;#39;someverysecurepasswordgoeshere&amp;#39;

restic unlock

restic backup --verbose --exclude-caches --cleanup-cache \
  --iexclude=/home/*/downloads \
  --exclude=/home/*/.cache \
  --exclude=/home/*/.gradle \
  --exclude=/home/*/.local/share/Trash \
  /home

restic forget --prune \
  --keep-hourly 0 \
  --keep-daily 7 \
  --keep-monthly 0

echo &amp;#34;Restic full home folder backup done.&amp;#34;

echo &amp;#34;Backing up important data from the server.&amp;#34;

rsync -az --delete-before \
  user@myserver.lan:/path/to/nextcloud/ \
  /storage/backups/nextcloud/

chown -R localuser:localuser /storage/backups/nextcloud/

echo &amp;#34;Backing up important data from the server done.&amp;#34;

echo &amp;#34;Updating system.&amp;#34;

dnf update -y

flatpak update -y &amp;amp;&amp;amp; flatpak uninstall --unused -y

echo &amp;#34;Updating system done.&amp;#34;

echo &amp;#34;Scrubbing disk.&amp;#34;
btrfs scrub start -B /
echo &amp;#34;Scrubbing disk done.&amp;#34;

echo &amp;#34;All done! Going to sleep.&amp;#34;

shutdown now
&lt;/code&gt;&lt;/pre&gt;
        
        </description>
    </item>
    
    
    
    <item>
      <title>This site will be offline on 2022-08-17 between 18:00-19:00 EEST</title>
      <link>https://ounapuu.ee/posts/2022/08/17/this-site-will-be-offline/</link>
      <pubDate>Wed, 17 Aug 2022 15:45:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/08/17/this-site-will-be-offline/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;There really isn&amp;rsquo;t much to say here, nor is there a rational reason behind this.
I just see it as an opportunity to send a signal and test the capabilities of
my UPS.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve prepared for this moment with my self-hosting setup, let&amp;rsquo;s see how well it
holds up. Hopefully better than the electrical grid.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Winter is coming.&lt;/em&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/08/17/this-site-will-be-offline/media/image.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/08/17/this-site-will-be-offline/media/image_hu66dfca4dc3365dd14d007c4cafe5bb20_230767_1280x800_fit_box_3.png&#34;
             width=&#34;591&#34;
             height=&#34;800&#34;
             alt=&#34;:harold:&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      :harold:
    &lt;/figcaption&gt;
    
&lt;/figure&gt;


        
        </description>
    </item>
    
    
    
    <item>
      <title>I tried out the CyberPower UT650EG UPS</title>
      <link>https://ounapuu.ee/posts/2022/08/04/cyberpower-ut650eg-overview/</link>
      <pubDate>Thu, 04 Aug 2022 07:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/08/04/cyberpower-ut650eg-overview/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;After some spicy feedback to &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/&#34;&gt;my post where a ThinkPad T430 acted as a server,&lt;/a&gt;
I decided to try out one UPS that was recommended on the basis of it being much
more power efficient compared to the APC UPS that I previously ran.&lt;/p&gt;
&lt;p&gt;That UPS? &lt;a href=&#34;https://www.cyberpower.com/id/en/product/sku/UT650EG&#34;&gt;CyberPower UT650EG&lt;/a&gt;.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/08/04/cyberpower-ut650eg-overview/media/image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/08/04/cyberpower-ut650eg-overview/media/image_hu5d9db24007cb56494b00e0388b23a282_5088319_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;My ThinkPad-as-a-server, and the UPS that&amp;#39;s powering it.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      My ThinkPad-as-a-server, and the UPS that&amp;#39;s powering it.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;why-switch-out-a-perfectly-good-ups&#34;&gt;Why switch out a perfectly good UPS?&lt;/h3&gt;
&lt;p&gt;The APC Smart-UPS 750 is good, but uses a lot of power compared to the whole setup,
making up roughly half of the total power consumption at idle: ~17-18W. It&amp;rsquo;s
also very big compared to what it is actually powering.&lt;/p&gt;
&lt;p&gt;One of the main selling points of this particular CyberPower UPS is that it uses
very little power itself. Depending on the model, the UPS can use around 1-2W
of power, at least according to the tests that they &lt;a href=&#34;https://www.cyberpower.com/promotion/ut/id/id&#34;&gt;publish on their website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once I set up everything with the new UPS, I gave it a go. After the battery was
fully charged, I did observe a dramatic drop in power usage. The whole setup now
ran around 19-21W when idle, which confirms the power consumption numbers
claimed by CyberPower.&lt;/p&gt;
&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;
&lt;p&gt;The UPS itself is great for someone who just wants to connect a couple of
devices into a standalone UPS. The model I got came with three EU-style sockets.
Compared to the APC UPS, this is a much cleaner setup as I do not have to
connect an extension cord using an adapter.&lt;/p&gt;
&lt;p&gt;The APC Smart-UPS 750 can provide anywhere between 100 and 120 minutes of runtime
with my setup. I did a quick runtime test with the CyberPower UPS as well and
found that with around 25W of load it ran for 37 minutes. Not the best runtime,
but given its size it&amp;rsquo;s a respectable result.&lt;/p&gt;
&lt;p&gt;Uninterruptible power supplies like to be noisy when running off of batteries.
This CyberPower unit is no exception. However, by letting it run on batteries
and double-clicking the power button I managed to silence the alarm and in
subsequent power cut scenarios it has not started beeping. I was unable to find
a simple manual explaining how to operate the UPS and what other button combos
might be out there. The piece of paper that came with the UPS was also
lackluster. I&amp;rsquo;m not sure if this was intended functionality or not, but I do
like that turning the alarm off is an option in the first place.&lt;/p&gt;
&lt;p&gt;The status LED-s on the unit are okay. There aren&amp;rsquo;t many of them and the legend
explaining the behaviour of those lights is just enough to understand what&amp;rsquo;s
going on.&lt;/p&gt;
&lt;h3 id=&#34;the-not-so-good-parts&#34;&gt;The not-so-good parts&lt;/h3&gt;
&lt;p&gt;This particular unit has an issue. I did a poor job reading the spec sheet at
my local retailer and missed the fact that this specific model does &lt;em&gt;not&lt;/em&gt; come
with USB connectivity. If the UPS runs out of power, it cannot warn my server
to shut down in advance, resulting in a dirty shutdown scenario. Given how
stable the power at my apartment generally is, this won&amp;rsquo;t likely be
a major issue, but it&amp;rsquo;s definitely something I miss. The APC UPS supports this,
plus you can log everything about how the batteries are doing and even detect
input voltage anomalies that you probably weren&amp;rsquo;t even aware of.&lt;/p&gt;
&lt;p&gt;What I&amp;rsquo;m concerned about is the battery. &lt;a href=&#34;https://www.cyberpower.com/id/en/product/sku/UT650EG#specification&#34;&gt;The specifications&lt;/a&gt;
say that the battery is not user replaceable. I hope that this is simply something
the legal team thought of to avoid any liability when dealing with users who
messed this process up. If not, then it will be a major problem down the line.
Batteries are consumable items, and according to various threads on the web
about UPS batteries, the consensus is that you should replace them every 3-4
years to avoid problems with the batteries swelling up and potentially causing
fires.&lt;/p&gt;
&lt;p&gt;If the battery dies and I cannot replace it, then what am I supposed to do,
throw the otherwise functional UPS straight to the landfill? Not acceptable.&lt;/p&gt;
&lt;p&gt;Speaking of concerns, I happened to see some
&lt;a href=&#34;https://forums.redflagdeals.com/some-cyberpower-upses-may-pose-fire-hazard-2516306/&#34;&gt;troubling&lt;/a&gt;
&lt;a href=&#34;https://www.youtube.com/watch?v=9gqBzLNMFe4&#34;&gt;reports&lt;/a&gt;
about certain &lt;a href=&#34;https://www.reddit.com/r/homelab/comments/voy9kl/cyberpower_cp1500pfclcd_fire_hazard/&#34;&gt;CyberPower UPS-es catching on fire.&lt;/a&gt;
The culprit seems to be a certain type of glue used in the manufacturing of the
UPS that ends up conducting electricity after a longer time period. I unplugged
my UPS, powered it off and gave it a look, and it seems like I should be fine.
At least I hope so.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/08/04/cyberpower-ut650eg-overview/media/hopefullynotafirehazard.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/08/04/cyberpower-ut650eg-overview/media/hopefullynotafirehazard_hu146c59ce76f7df88379d9aff36af535c_3345563_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Inside of the UPS.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Inside of the UPS.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/08/04/cyberpower-ut650eg-overview/media/inside.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/08/04/cyberpower-ut650eg-overview/media/inside_huf806777abe8b7ac4148f52c99f13ba54_3435048_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;I sure hope that this piece of glue won&amp;#39;t burn my house down.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I sure hope that this piece of glue won&amp;#39;t burn my house down.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Based on this view inside the UPS, I feel like changing the battery should at
least be possible, assuming that replacement batteries are readily available.
Just make sure to not touch the rest of the components as they can probably
kill you, and that&amp;rsquo;s just not a fun thing to do.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;If you want a dumb and efficient UPS that protects you from basic power cutouts
and input voltage changes, then do consider this UPS. However, if you care about
USB connectivity and ease of maintenance, then I recommend looking for other
options.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>btrbk is awesome</title>
      <link>https://ounapuu.ee/posts/2022/07/09/btrbk-is-awesome/</link>
      <pubDate>Sat, 09 Jul 2022 16:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/07/09/btrbk-is-awesome/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I like having a safety net whenever I&amp;rsquo;m doing something potentially destructive,
which is why I use the &lt;code&gt;btrfs&lt;/code&gt; file system for my operating system and my data.
Snapshots are one half of my &amp;ldquo;whoops, there goes all my work&amp;rdquo; strategy (backups
are the other half).&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ounapuu.ee/posts/2022/04/05/btrfs-snapshots/&#34;&gt;I&amp;rsquo;ve written about how I use snapshots on btrfs using snapper,&lt;/a&gt;
but lately I&amp;rsquo;ve become annoyed with it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/07/09/btrbk-is-awesome/media/image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/07/09/btrbk-is-awesome/media/image_hu0c6986e53fd9b006fdf09b95435677a4_2778365_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;669&#34;
             alt=&#34;Snapshots: probably invented by a developer who owns a cat.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Snapshots: probably invented by a developer who owns a cat.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;shortcomings-of-snapper&#34;&gt;Shortcomings of &lt;code&gt;snapper&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;snapper&lt;/code&gt; is great while you&amp;rsquo;re on the happy path, but when you wander off of
it, it gets a bit frustrating. This is 100% my own personal experience and I
cannot rule out any PEBCAK scenarios, but it&amp;rsquo;s how I felt using the tool.&lt;/p&gt;
&lt;p&gt;The snapshots are on the same subvolume, such as &lt;code&gt;/home/.snapshots&lt;/code&gt;, which means
that I have to specifically exclude the &lt;code&gt;.snapshots&lt;/code&gt; folder in every tool and
script that I use for making backups. Without that change, the tools ended up
scanning the folder and eating up a lot of resources, mainly the CPU and storage.&lt;/p&gt;
&lt;p&gt;Backing up snapshots to something like an external backup SSD wasn&amp;rsquo;t something
that &lt;code&gt;snapper&lt;/code&gt; supported out of the box as well, meaning that for offline
backups I still had to resort to a good old &lt;code&gt;rsync&lt;/code&gt; copy. It&amp;rsquo;s inconvenient and
I won&amp;rsquo;t have a backup that also contained recent snapshots, but it was
manageable.&lt;/p&gt;
&lt;p&gt;I also reinstalled Fedora Linux on my ThinkPad recently to see how well my
Ansible playbooks hold up (quite decently!) and found that setting up &lt;code&gt;snapper&lt;/code&gt;
is a bit of a pain. I tried to set up &lt;code&gt;snapper&lt;/code&gt; again, but it wasn&amp;rsquo;t as
straightforward as I was hoping for, with it not properly picking up the
configuration file changes. At the end, it just ran into weird errors
when I tried it to prune some snapshots according to the policy I set up. Since
I was running out of disk space, I just gave up, uninstalled &lt;code&gt;snapper&lt;/code&gt; and
destroyed the snapshots manually.&lt;/p&gt;
&lt;p&gt;After all that (and a recommendation by a friend) I decided to bite the bullet
and try out &lt;a href=&#34;https://github.com/digint/btrbk&#34;&gt;&lt;code&gt;btrbk&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;btrbk&#34;&gt;btrbk&lt;/h3&gt;
&lt;p&gt;Setting up &lt;code&gt;btrbk&lt;/code&gt; on Fedora Linux 36 was a breeze. Install it via &lt;code&gt;dnf install  btrbk&lt;/code&gt;, copy your configuration to &lt;code&gt;/etc/btrbk/&lt;/code&gt;, make sure that the directory
used for snapshots exists with &lt;code&gt;mkdir /btrbk_snapshots&lt;/code&gt; and you&amp;rsquo;re good to go!
&lt;code&gt;btrbk&lt;/code&gt; is just a huge Perl script, so no fancy dependencies are needed.&lt;/p&gt;
&lt;p&gt;My &lt;code&gt;btrfs&lt;/code&gt; filesystem has three subvolumes: &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;/home&lt;/code&gt; and &lt;code&gt;/storage&lt;/code&gt;. Data
stored on these subvolumes has different levels of importance, which is also
reflected in the snapshot retention policies.&lt;/p&gt;
&lt;p&gt;The configuration on my setup is the following:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;timestamp_format        long

volume /
  snapshot_dir /btrbk_snapshots
  subvolume /
    snapshot_preserve_min   12h
    snapshot_preserve       24h
  subvolume /home
    snapshot_preserve_min   48h
    snapshot_preserve       7d
  subvolume /storage
    snapshot_preserve_min   6h
    snapshot_preserve       7d
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To take the snapshots, I&amp;rsquo;ve set up a systemd timer that runs every 5 minutes and
runs the following command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;btrbk -c /etc/btrbk/btrbk.conf run --progress
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A successful run will have output like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--------------------------------------------------------------------------------
Backup Summary (btrbk command line client, version 0.32.1)
    Date:   Sat Jul  9 14:00:00 2022
    Config: /etc/btrbk/btrbk.conf
Legend:
    ===  up-to-date subvolume (source snapshot)
    +++  created subvolume (source snapshot)
    ---  deleted subvolume
    ***  received subvolume (non-incremental)
    &amp;gt;&amp;gt;&amp;gt;  received subvolume (incremental)
--------------------------------------------------------------------------------
/
+++ /btrbk_snapshots/ROOT.20220709T1400
--- /btrbk_snapshots/ROOT.20220708T1300
/home
+++ /btrbk_snapshots/home.20220709T1400
/storage
+++ /btrbk_snapshots/storage.20220709T1400
--- /btrbk_snapshots/storage.20220709T0745
--- /btrbk_snapshots/storage.20220709T0750
--- /btrbk_snapshots/storage.20220709T0755
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I love how the output is very concise about what it just did.&lt;/p&gt;
&lt;p&gt;To make a backup of my drive to an external SSD that&amp;rsquo;s also a &lt;code&gt;btrfs&lt;/code&gt; filesystem,
I created a separate config at &lt;code&gt;/etc/btrbk/backup-to-ext-drive.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;timestamp_format        long

target_preserve_min    no
target_preserve        7d

volume /
  snapshot_dir /btrbk_snapshots
  target /mnt/backup/T430
  subvolume /
  subvolume /home
  subvolume /storage
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this example, &lt;code&gt;/mnt/backup/T430&lt;/code&gt; is a &lt;code&gt;btrfs&lt;/code&gt; subvolume itself.&lt;/p&gt;
&lt;p&gt;Instead of running &lt;code&gt;rsync&lt;/code&gt;, my backup script contains the line:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;btrbk -c /etc/btrbk/backup-to-ext-drive.conf run --progress
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I love how the default behaviour in &lt;code&gt;btrbk&lt;/code&gt; is to keep snapshots separate from
the subvolumes themselves. Making a full copy of &lt;code&gt;/home&lt;/code&gt; or any other filesystem
doesn&amp;rsquo;t require me to always exclude the &lt;code&gt;.snapshots&lt;/code&gt; directory, which is nice.&lt;/p&gt;
&lt;p&gt;The snapshot names themselves are also human readable. If I accidentally messed
up and my changes from an hour ago were lost, I&amp;rsquo;d just have to go to
&lt;code&gt;/btrbk_snapshots&lt;/code&gt;, look up a snapshot from an hour ago, and copy whatever I
need from the snapshot. This has already saved my butt at least once.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s not often that a piece of software gets me that excited, but &lt;code&gt;btrbk&lt;/code&gt; has
somehow managed to do it. It&amp;rsquo;s a single script that has all the example use
cases documented in its README and the functionality does exactly what I want.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all I really need from software.&lt;/p&gt;
&lt;p&gt;Huge thanks to &lt;a href=&#34;https://digint.ch/&#34;&gt;Digital Integrity GmbH&lt;/a&gt; for building,
maintaining and sharing this tool with the world!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>The absolute state of Bluetooth audio in 2022</title>
      <link>https://ounapuu.ee/posts/2022/06/29/absolute-state-of-bluetooth-audio/</link>
      <pubDate>Wed, 29 Jun 2022 11:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/06/29/absolute-state-of-bluetooth-audio/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I have the Sony WH-1000XM3 headphones. They&amp;rsquo;re good for consuming content.
Audio calls with your colleagues? Forget about it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/06/29/absolute-state-of-bluetooth-audio/media/image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/06/29/absolute-state-of-bluetooth-audio/media/image_huc83a9040b6d34404c070678c72d5a258_2591573_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Thanks, Bluetooth. #notsponsored by Värska, it&amp;#39;s just very hot right now.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Thanks, Bluetooth. #notsponsored by Värska, it&amp;#39;s just very hot right now.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This is the setup I have to go with, and it has all to do with how Bluetooth
works. Your options with Bluetooth headsets are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;high quality sound output, no audio input&lt;/li&gt;
&lt;li&gt;low quality sound output, low quality audio input (HSP/HFP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/06/29/absolute-state-of-bluetooth-audio/media/codecs.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/06/29/absolute-state-of-bluetooth-audio/media/codecs_hu18f54a288986e21c81dd2f58a422ffd3_42151_1280x800_fit_box_3.png&#34;
             width=&#34;471&#34;
             height=&#34;407&#34;
             alt=&#34;Choice of codecs exposed by Fedora 36.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Choice of codecs exposed by Fedora 36.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This isn&amp;rsquo;t a problem with Linux, either. I&amp;rsquo;ve done a test call with the help
of my friend on my iPhone SE 2020 using the same headset on Discord, and the
audio quality was still crap. Even the microphone on the phone itself had better
quality.&lt;/p&gt;
&lt;p&gt;The only reasonable choice for doing voice calls is attaching a separate wired
microphone to your Bluetooth headphones. The mic quality is much better now and
you still have the option of disconnecting the mic whenever it&amp;rsquo;s not needed.
The mic I&amp;rsquo;m using in the first image is the ModMic.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a damn shame that I need to resort to this type of setup though. Who pushed
for going all-in on Bluetooth and throwing out the headphone jack from phones
before making sure that Bluetooth actually works properly?&lt;/p&gt;
&lt;p&gt;Rant over.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Disabling the crappy Broadcom Bluetooth adapter in your ThinkPad T430 running Linux</title>
      <link>https://ounapuu.ee/posts/2022/06/01/thinkpad-t430-bluetooth-shenanigans/</link>
      <pubDate>Wed, 01 Jun 2022 12:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/06/01/thinkpad-t430-bluetooth-shenanigans/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;You&amp;rsquo;ve disabled the boneheaded Lenovo WiFi adapter whitelist using a tool like
&lt;a href=&#34;https://github.com/n4ru/1vyrain&#34;&gt;1vyrain&lt;/a&gt;, installed a better adapter like the
&lt;a href=&#34;https://ark.intel.com/content/www/us/en/ark/products/75439/intel-dual-band-wirelessac-7260.html&#34;&gt;Intel Dual Band Wireless-AC 7260&lt;/a&gt;,
and found that Bluetooth is not working as intended on your ThinkPad T430
running Linux?&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a guide on what you can try to resolve some issues you may encounter.&lt;/p&gt;
&lt;h3 id=&#34;the-integrated-bluetooth-adapter&#34;&gt;The integrated Bluetooth adapter&lt;/h3&gt;
&lt;p&gt;The ThinkPad T430 comes with Bluetooth out of the box. Mine is this one:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Bus 001 Device 004: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad]
&lt;/code&gt;&lt;/pre&gt;






  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/06/01/thinkpad-t430-bluetooth-shenanigans/media/image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/06/01/thinkpad-t430-bluetooth-shenanigans/media/image_hu7da8940e4debfde065ff687875ad792f_3593663_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;775&#34;
             alt=&#34;And it looks something like this.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      And it looks something like this.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I run Fedora Linux and frankly the experience with the stock adapter is horrible.
Getting stuck while pairing a device or the GNOME Bluetooth settings GUI hanging
isn&amp;rsquo;t a rare sight. Sometimes I&amp;rsquo;ve had to run a script to reset all USB devices
to get things sorted out, or restart the machine altogether. This is not fun
when a work call started 3 minutes ago and your Bluetooth headset is just not
working.&lt;/p&gt;
&lt;p&gt;After installing the new Intel WiFi adapter, I thought that I&amp;rsquo;d just disable the
integrated Bluetooth controller via the UEFI settings. That should do the trick,
right?&lt;/p&gt;
&lt;p&gt;Nope. Apparently this disabled ALL bluetooth devices, including the one provided
by the Intel adapter.&lt;/p&gt;
&lt;p&gt;Well, no problem, I&amp;rsquo;ll just physically remove the Broadcom device and that
should force the ThinkPad to use the Intel adapter, right?&lt;/p&gt;
&lt;p&gt;Nope. Now the machine just shows no Bluetooth devices.&lt;/p&gt;
&lt;h3 id=&#34;udev-to-the-rescue&#34;&gt;udev to the rescue&lt;/h3&gt;
&lt;p&gt;If you install the Intel adapter and don&amp;rsquo;t touch any of the settings, you&amp;rsquo;ll have
two Bluetooth adapters. On my laptop, the OS used the Broadcom adapter by default,
which was evident by all GUI interactions interfacing with the Broadcom one and
throwing out errors in &lt;code&gt;dmesg -w&lt;/code&gt; as a result.&lt;/p&gt;
&lt;p&gt;Since disabling the Broadcom bluetooth adapter via other means did not work, I
had to look for some solutions. One that I stumbled upon relied on &lt;code&gt;udev&lt;/code&gt; rules.&lt;/p&gt;
&lt;p&gt;Essentially, what you want to do is drop a file in &lt;code&gt;/etc/udev/rules.d/&lt;/code&gt;, name it
something like &lt;code&gt;81-bluetooth-hci.rules&lt;/code&gt; and make the contents something like
this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;SUBSYSTEM==&amp;#34;usb&amp;#34;, ATTRS{idVendor}==&amp;#34;0a5c&amp;#34;, ATTRS{idProduct}==&amp;#34;21e6&amp;#34;, ATTR{authorized}=&amp;#34;0&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Make sure to replace the &lt;code&gt;idVendor&lt;/code&gt; and &lt;code&gt;idProduct&lt;/code&gt; with the correct values for
your Bluetooth adapter. Output of &lt;code&gt;lsusb&lt;/code&gt; will likely contain those values.&lt;/p&gt;
&lt;p&gt;In my case, the output of &lt;code&gt;lsusb&lt;/code&gt; is&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Bus 001 Device 004: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;idVendor&lt;/code&gt; and &lt;code&gt;idProduct&lt;/code&gt; info is in this string: &lt;code&gt;ID 0a5c:21e6&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After making this change and restarting, you should see that&lt;code&gt;bluetoothctl list&lt;/code&gt;
outputs only one Bluetooth device.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[host@T430 ~]$ bluetoothctl list
Controller AC:FD:CE:30:EB:BA T430 [default]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Because Bluetooth is still a hot mess in 2022, I still have to occasionally beat
it with a hammer. However, the experience with the Intel adapter is much better
and a simple &amp;ldquo;turn the adapter off and on again in the GUI&amp;rdquo; solved 99% of the
issues I&amp;rsquo;ve encountered since then.&lt;/p&gt;
&lt;h3 id=&#34;have-you-tried-turning-it-off-and-on-again&#34;&gt;&amp;ldquo;Have you tried turning it off and on again?&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;If for whatever reason this solution does not apply to you, and you feel like
you want to hit your machine with a big hammer without having to restart it, then
&lt;a href=&#34;https://askubuntu.com/a/290519&#34;&gt;here&amp;rsquo;s a script&lt;/a&gt; that resets all the USB
devices on your machine. I&amp;rsquo;ve observed that most Bluetooth adapters run over USB,
which is why this script works with those as well.&lt;/p&gt;
&lt;p&gt;It has helped me countless times when desperate for a quick Bluetooth fix on
various desktops and laptops that I&amp;rsquo;ve used.&lt;/p&gt;
&lt;p&gt;Run it at your own risk.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash

for i in /sys/bus/pci/drivers/[uoex]hci_hcd/*:*; do
  [ -e &amp;#34;$i&amp;#34; ] || continue
  echo &amp;#34;${i##*/}&amp;#34; &amp;gt; &amp;#34;${i%/*}/unbind&amp;#34;
  echo &amp;#34;${i##*/}&amp;#34; &amp;gt; &amp;#34;${i%/*}/bind&amp;#34;
done
&lt;/code&gt;&lt;/pre&gt;
        
        </description>
    </item>
    
    
    
    <item>
      <title>Can a laptop from 2012 be a viable home server?</title>
      <link>https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/</link>
      <pubDate>Tue, 10 May 2022 09:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I&amp;rsquo;m a man of many ideas. It&amp;rsquo;s a shame that most of them are quite stupid.&lt;/p&gt;
&lt;p&gt;This is one of them, but at least it makes for a fun experiment.&lt;/p&gt;
&lt;h3 id=&#34;intro&#34;&gt;Intro&lt;/h3&gt;
&lt;p&gt;After &lt;a href=&#34;https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/&#34;&gt;adding an UPS to accompany my server,&lt;/a&gt;
my setup was as complete as it could reasonably be. The server is low power,
but packs quite a punch with fast storage and plenty of compute power around.
The UPS provides a battery backup for both my server and the router.&lt;/p&gt;
&lt;p&gt;There was still one annoyance lingering at the back of my head: this setup took
40 watts of power in idle. That&amp;rsquo;s a lot for something that runs 24/7. Yes,
&lt;a href=&#34;https://www.reddit.com/r/homelab/&#34;&gt;/r/homelab&lt;/a&gt; regularly showcases more
power hungry setups, but my standards are quite high when it comes to power use.
I want to go as low as reasonably possible.&lt;/p&gt;
&lt;p&gt;I recently bought a spare ThinkPad T430 so that I can have a backup machine in case
something happens to &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/&#34;&gt;my laptop that doesn&amp;rsquo;t suck&lt;/a&gt;.
I&amp;rsquo;ve also &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/stupid-project-ideas-1/&#34;&gt;had ideas about a server setup involving this laptop.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s when I decided to try running my services off of the ThinkPad T430.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/media/image1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/media/image1_hu5d12ec59cca79144422c6fc1b7a9b98d_4916185_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The setup.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The setup.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/media/image2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/05/10/thinkpad-as-a-home-server/media/image2_hu2498a40ae21a4dafe4ec17023f4f22f3_4240025_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Another angle of the setup.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Another angle of the setup.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;the-setup&#34;&gt;The setup&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s a quick rundown of the relevant specifications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU: Intel i5-3320M, 2 cores 4 threads @ 3.3GHz max&lt;/li&gt;
&lt;li&gt;RAM: 16GB DDR3&lt;/li&gt;
&lt;li&gt;OS disk: 256GB Micron mSATA SSD&lt;/li&gt;
&lt;li&gt;Main storage: 2x 4TB Samsung 870 QVO SSD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the main reasons that this setup is viable in the first place is the fact
that the ThinkPad T430 supports up to 3 SSD-s if you replace the optical drive
with a HDD caddy. Your OS can run off of an mSATA SSD and your mirrored storage
can utilize the two 2.5&amp;quot; SATA slots.&lt;/p&gt;
&lt;p&gt;You probably don&amp;rsquo;t want to use a setup like this if you want to store a lot of
big files, such as your legally obtained media collection. If your data can fit
on a pair of SATA SSD-s, then this setup will be just fine.&lt;/p&gt;
&lt;h3 id=&#34;why-use-a-laptop-as-a-home-server&#34;&gt;Why use a laptop as a home server?&lt;/h3&gt;
&lt;p&gt;If you don&amp;rsquo;t have a home server yet and want to start off as cheap as possible
while also being mindful of the power usage, then an used laptop with a competent
CPU is a fantastic starting point. In an age where 6 CPU cores is considered
mid-range, two CPU cores might not sound like much, but for most home server
workloads it&amp;rsquo;s absolutely fine.&lt;/p&gt;
&lt;p&gt;Laptop CPU-s are designed to use as little power as possible. After all, they
need to run off of a small battery most of the time and have to run cool as well
to make do with the limited cooling setup that they have. This makes them ideal
for a machine that runs 24/7.&lt;/p&gt;
&lt;p&gt;I measured the power usage of my ThinkPad T430 in this configuration and found
that it used around 15-20 watts when running with a low load. This is comparable
to the &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;ASRock DeskMini X300&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What sets laptops apart from the usual desktop-based home server builds is that
they often have a working battery, which can act as a poor man&amp;rsquo;s UPS. If you
momentarily lose power, then the server will happily keep on working until the
battery runs out, which might take 1-2 hours (or more if your battery is in a
good state). This is comparable to the runtime I saw with the DeskMini server
build and the APC Smart-UPS 750.&lt;/p&gt;
&lt;p&gt;Most laptops also come with an Ethernet port, and if the laptop is made some
time after 2005, then it&amp;rsquo;s likely running at gigabit speeds. Unless you have a
valid use case for 10 gigabits or more, then this will be plenty of network
bandwidth for most home server use cases.&lt;/p&gt;
&lt;p&gt;One aspect that&amp;rsquo;s often overlooked with a laptop-based home server setup is the
inclusion of an integrated keyboard and mouse. If you accidentally mess up your
configuration and your server does not start up properly, then you can just open
the lid and start fixing it on the spot. On any other setup, you&amp;rsquo;d have to find
a monitor to hook the server up to and find a spare keyboard to use as well,
which can be a hassle.&lt;/p&gt;
&lt;h3 id=&#34;performance&#34;&gt;Performance&lt;/h3&gt;
&lt;p&gt;A home server that serves the needs of a couple of users at most and runs some
scheduled tasks from time to time can run perfectly fine off of a dual core
Intel Core series CPU from 2012. You probably don&amp;rsquo;t want to run intensive
computational workloads off of it, such as transcoding video files on a service
like Jellyfin. However, you can utilize the integrated GPU to off-load specific
workloads to it, and media encode-decode for select video codecs is one of those.
Intel QuickSync is an absolute godsend for situations where you need to transcode
media on a CPU that isn&amp;rsquo;t that powerful.&lt;/p&gt;
&lt;p&gt;My home server runs a lot of services: Docker containers, this blog, data archival
jobs, backup jobs etc. When running them on the T430, the average CPU usage was
around 20%. Not ideal, but still leaves plenty of headroom for services.&lt;/p&gt;
&lt;p&gt;The overall usability and performance that this machine offers was completely
acceptable. It&amp;rsquo;s not as lightning fast as something that runs a modern CPU,
like the AMD Ryzen 5 PRO 4650G in the DeskMini, but it gets the job done.&lt;/p&gt;
&lt;h3 id=&#34;caveats-thermals&#34;&gt;Caveats: thermals&lt;/h3&gt;
&lt;p&gt;A home server built around a used laptop brings a lot of benefits. However,
it also has some potential downsides that you should be aware of.&lt;/p&gt;
&lt;p&gt;Most laptops have fans, and they can be damn loud. The ThinkPad T430 is
notoriously loud if you have the cooling fan manufactured by Toshiba. In a home
setting this can potentially a deal-breaker, unless you can wedge the laptop
into a corner of the room where it&amp;rsquo;s not audible.&lt;/p&gt;
&lt;p&gt;There exist solutions to the fan control problem. You can install a tool like
thinkfan or just write your preferred fan level to &lt;code&gt;/proc/acpi/ibm/fan&lt;/code&gt; to
avoid the cooling fan running too loud &lt;a href=&#34;https://wiki.archlinux.org/title/fan_speed_control#ThinkPad_laptops&#34;&gt;(instructions here)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Running the fan at the lowest speed works fine most of the time since your CPU
can throttle itself when it&amp;rsquo;s running too hot. However, with my setup I had an
odd issue where the machine would power off suddenly when it was doing a lot of
I/O workload, such as scrubbing the ZFS pool on the two 4TB SSD-s. This happened
even when the CPU was not even close to throttling, running around 75 C. I do
not know what the actual reason for the sudden shutdown is, but I suspect that
it may be related to the motherboard overheating or the system treating the hot
SSD-s as hard drives that are over the critical temperature limit of around 60 C.&lt;/p&gt;
&lt;p&gt;I was able to work around most of the cooling-related issues by mounting the
laptop vertically and limiting the maximum CPU clock speed to around 2.4 GHz
using the knobs made available with &lt;code&gt;intel_pstate&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The CPU temperatures during normal operation were mostly around 60C, with a high
load reaching max 75C with the tweaks applied and the CPU fan running at the
slowest possible speed.&lt;/p&gt;
&lt;h3 id=&#34;caveats-maintenance&#34;&gt;Caveats: maintenance&lt;/h3&gt;
&lt;p&gt;If you have a machine that runs 24/7, maintenance will become an issue. No
matter how often you clean your home, dust will accumulate. On desktop PC-s,
cleaning out your CPU heatsink is just a matter of taking off the PC case side
panel, removing the heatsink fan, cleaning off the dust and putting it all back
together. You probably want to replace the thermal paste from time to time as
well.&lt;/p&gt;
&lt;p&gt;On most laptops, cleaning out the CPU heatsink is much trickier. You will likely
have to disassemble most of the machine to even access it, which takes up much
more time compared to a desktop PC, which also means more downtime.&lt;/p&gt;
&lt;p&gt;Depending on the model, a simple change, such as upgrading your storage or
replacing a faulty drive, can also be more complicated. I&amp;rsquo;ve seen laptops where
you actually have to disassemble the whole machine to access the hard drive.
The ThinkPad T430 has an easily accessible setup when it comes to storage, but
the main storage bay does have an annoying pull-tab setup that probably won&amp;rsquo;t
survive multiple subsequent changes.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Aside from the setbacks that may or may not be due to the specifics of my setup,
I find that a laptop can make for a good home server. If you have more specific
requirements, then a custom-built server is likely the way to go, but if you&amp;rsquo;re
just starting out, then definitely do consider this option.&lt;/p&gt;
&lt;p&gt;After running this setup for a week or two, I decided to go back to my previous
setup based on the ASRock DeskMini. The reliability woes weren&amp;rsquo;t something I
was too happy with, and I didn&amp;rsquo;t really have another use case for the DeskMini
either, so it made sense for me.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Trying out VR on an AMD Ryzen 4000 series APU</title>
      <link>https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/</link>
      <pubDate>Wed, 04 May 2022 08:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;You may know that I really like &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;small, efficient APU-based builds&lt;/a&gt;.
At this point in time, they&amp;rsquo;re so close to being a viable mainstream option for
gaming, especially the Ryzen 6000-series mobile APU-s. &lt;a href=&#34;https://youtu.be/2_Ik1vgIBN4?t=247&#34;&gt;Forza Horizon 5, at
1080p high settings? Yes, they&amp;rsquo;re that good.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t have the new Ryzen 6000 series APU-s to play around with, but
what I do have is an &lt;a href=&#34;https://www.amd.com/en/products/apu/amd-ryzen-5-pro-4650g&#34;&gt;AMD Ryzen 5 PRO 4650G&lt;/a&gt;
and a &lt;a href=&#34;https://www.vive.com/us/product/vive-cosmos/features/&#34;&gt;HTC Vive Cosmos VR headset&lt;/a&gt;.
I&amp;rsquo;ve noticed that my NVIDIA GTX 1060 manages to hit frametimes of 2-3ms in
Beat Saber while the limit is at 11.1ms (90 Hz), which means that Beat Saber is
probably quite easy to run. But can it run on integrated graphics and still be
playable?&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s been some work done in this area before as well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/hDkiLWtnpok&#34;&gt;LowSpecGamer tried out Half Life Alyx on a Ryzen 3 3200G&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/KChRyQniUew&#34;&gt;The Mysticle testing Beat Saber on integrated Intel graphics&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;test-setup&#34;&gt;Test setup&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s a quick rundown of the specs of the test PC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU: AMD Ryzen 5 PRO 4650G&lt;/li&gt;
&lt;li&gt;GPU: Radeon Vega 7 integrated graphics&lt;/li&gt;
&lt;li&gt;RAM: 16GB DDR4-3200 kit&lt;/li&gt;
&lt;li&gt;Motherboard: ASRock X570M Pro4&lt;/li&gt;
&lt;li&gt;Cooling: adequate&lt;/li&gt;
&lt;li&gt;Storage: plenty&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get the authentic, out of the box experience, I did not overclock any
component, unless you count using the XMP profile on my memory sticks to run them
at 3200 MT/s as overclocking.&lt;/p&gt;
&lt;p&gt;The test PC usually has an NVIDIA GTX 1060 6G inside it, because it&amp;rsquo;s a gaming
PC, after all. In my first test attempt I kept the NVIDIA GPU inside the PC since
I was lazy. I connected my TV to the HDMI port located on the motherboard, and
connected the VR headset to the DisplayPort present on the motherboard. What I
found out was that by default games would still utilize the NVIDIA GPU, passing
the final image to the integrated Vega 7 graphics, which then shows it on the big
screen. This type of setup is commonly found on laptops that have a discrete GPU
in addition to the integrated GPU, I just didn&amp;rsquo;t expect this to work out of the
box on a desktop setup.&lt;/p&gt;
&lt;p&gt;To do proper testing, I removed the dedicated GPU, updated the AMD GPU drivers
to the latest available version at the time of writing, and got down to testing.&lt;/p&gt;
&lt;h3 id=&#34;first-attempt-with-beat-saber&#34;&gt;First attempt with Beat Saber&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://beatsaber.com/&#34;&gt;Beat Saber&lt;/a&gt; is a very popular VR game, and for good
reason. It&amp;rsquo;s the perfect candidate for testing low-end VR gaming as it&amp;rsquo;s not that
complex graphically and even runs on standalone headsets, such as &lt;a href=&#34;https://www.oculus.com/quest-2/&#34;&gt;the Quest 2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I set everything up, started the game, and was surprised that it even loaded!
The success stopped there, as I quickly noticed that the resolution used for the
headset was automatically set to the lowest available resolution, resulting in
text that was absolutely unreadable.&lt;/p&gt;
&lt;p&gt;Unreadable text didn&amp;rsquo;t stop me, so I navigated to the song list and picked
something familiar. The result? It works, barely.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/media/test-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/media/test-1_hu94faf1721fe2098e63a75dbec2763b57_3835105_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;First test with Beat Saber on integrated AMD Vega 7 graphics.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      First test with Beat Saber on integrated AMD Vega 7 graphics.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The game ran at a very low resolution, and even then the best it could do was
between 45-80 frames per second. As you can see from the screenshot, the
experience was not a fluid one. I could still hit the boxes, but it just didn&amp;rsquo;t
feel good. At least it&amp;rsquo;s somewhat playable, and the headset still rendered my
head movements in 90 Hz, reducing the risk of motion sickness.&lt;/p&gt;
&lt;p&gt;Judging by the SteamVR performance statistics, I noticed that it was perfectly
happy with running the game at half the framerate (45 Hz), and unhappy about
inconsistent frametimes.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/media/test-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/media/test-2_hu7f08fb2f5af0abd6c5b7c75e806e1644_280087_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1087&#34;
             height=&#34;800&#34;
             alt=&#34;Closer look at the frametimes graph provided by SteamVR.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Closer look at the frametimes graph provided by SteamVR.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;test-attempt-2&#34;&gt;Test attempt #2&lt;/h3&gt;
&lt;p&gt;To understand the performance fluctuations better, I started up MSI Afterburner
and enabled the on-screen display.&lt;/p&gt;
&lt;p&gt;With the second attempt, I also made one important change to the configuration.
I set the TV connected to the machine from 4K resolution down to 720p to avoid
taxing the APU with any extra load.&lt;/p&gt;
&lt;p&gt;I launched Beat Saber and while the resolution was still garbage, there was a
notable improvement in the performance.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/media/test-3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/media/test-3_huaa48e420723c3d0462956a74e404f80d_247105_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1002&#34;
             height=&#34;800&#34;
             alt=&#34;Still not quite ideal, but much more consistent than before.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Still not quite ideal, but much more consistent than before.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The frametimes were much more consistent now and very close to the 90 Hz mark.
It does still stutter, as you can see from the SteamVR performance statistics,
but at least now it&amp;rsquo;s a much more playable experience.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/media/test-4.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/05/04/vr-on-integrated-graphics/media/test-4_hu13eb373809e7c3b13018deb2aa13de3b_146830_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;611&#34;
             alt=&#34;Framerate and frametime graphs, courtesy of MSI Afterburner.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Framerate and frametime graphs, courtesy of MSI Afterburner.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;From the statistics provided by MSI Afterburner, you can clearly see that the
performance is so close to being playable, with the integrated GPU maxing out
at a somewhat stable 85 FPS, but then dropping down to a more stable 45 FPS
and staying there for a while. The game fluctuates between those two levels of
performance.&lt;/p&gt;
&lt;p&gt;You can still call the game somewhat playable, though. It&amp;rsquo;s not the best
experience and you&amp;rsquo;re not going to set any world records while running at half
the refresh rate, but it&amp;rsquo;s &lt;em&gt;something&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&#34;apu-s-vr-and-the-future&#34;&gt;APU-s, VR and the future&lt;/h3&gt;
&lt;p&gt;The performance increases in APU-s aren&amp;rsquo;t fast enough to catch up with discrete
GPU-s just yet. Relying on system memory that&amp;rsquo;s optimized for latency rather
than memory bandwidth and then sharing that same memory with the CPU is also a
compromise that you cannot work around that easily.&lt;/p&gt;
&lt;p&gt;This test shows what the integrated Vega graphics are capable of. With the
release of the Ryzen 6000 series mobile APU-s, the performance of the integrated
graphics has been increased yet again, with the GPU architecture now based on
RDNA 2.&lt;/p&gt;
&lt;p&gt;Based on the results of my testing and seeing how the new APU-s perform in games,
I&amp;rsquo;m betting that the new APU-s should be able to run some VR titles at a more
stable 90 Hz on a similar screen resolution.&lt;/p&gt;
&lt;p&gt;Is this enough to consider them as a viable option for VR gaming in general?
Probably not. Games like Half Life Alyx can bring the NVIDIA GeForce GTX 1060
to its knees, and that&amp;rsquo;s at the lowest graphics preset! But if you&amp;rsquo;re like me
who spends 90% of their time in VR playing a graphically simple game like
Beat Saber, then it might be an option worth considering, especially in a market
where discrete GPU-s cost an arm and a leg. The great GPU shortage of 2021-2022
is showing signs of easing, but we&amp;rsquo;re not quite there yet.&lt;/p&gt;
&lt;h3 id=&#34;future-steps&#34;&gt;Future steps&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s probably possible to improve the APU VR gaming experience by applying some
tweaks and fixes, such as &lt;a href=&#34;https://github.com/fholger/vrperfkit&#34;&gt;the VR performance toolkit&lt;/a&gt;.
However, that won&amp;rsquo;t reflect the out of the box experience that you&amp;rsquo;d get. Casual
VR players are unlikely to go and seek such tweaks out.&lt;/p&gt;
&lt;p&gt;Trying to lock the refresh rate to something like 45/60/75 Hz may also improve
the stability of the experience.&lt;/p&gt;
&lt;p&gt;For the time being, I will just continue playing VR with a dedicated GPU, but I
am cautiously optimistic about the future of VR on APU-s.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Strangling your service with a Kubernetes misconfiguration</title>
      <link>https://ounapuu.ee/posts/2022/04/18/strangling-your-service-with-kubernetes/</link>
      <pubDate>Mon, 18 Apr 2022 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/04/18/strangling-your-service-with-kubernetes/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;This is a quick story about a fun discovery that I made a while ago.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;For legal reasons, all of this is made up and no such service ever existed.&lt;/em&gt;&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/04/18/strangling-your-service-with-kubernetes/media/thisisfine.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/04/18/strangling-your-service-with-kubernetes/media/thisisfine_hub4392d18a90d12c0c54b61959132801e_592072_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1280&#34;
             height=&#34;606&#34;
             alt=&#34;Accurate representation of the state of affairs in the project, circa 2019.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Accurate representation of the state of affairs in the project, circa 2019.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Once upon a time, we had this Java service that handled all the backend
work that you&amp;rsquo;d expect to occur for a product with a web interface. The
service wasn&amp;rsquo;t the newest thing on the block and had seen dozens of developers
work on it over many years.&lt;/p&gt;
&lt;p&gt;At one point, it was moved to a Kubernetes cluster. That meant configuring all
the bits and pieces. In YAML, of course.&lt;/p&gt;
&lt;p&gt;A couple of years ago I joined the project and started work on it. Things were
constantly on fire, so the fact that the service took anywhere from 5 to 15
minutes to deploy to the staging environment wasn&amp;rsquo;t something I focused on.
After pushing a commit, the team either took a coffee break, went to play some
table tennis or started work on something else while the pipeline did its job.&lt;/p&gt;
&lt;p&gt;It didn&amp;rsquo;t help that running the service locally was hand-waved away as something
that was too impractical to do by people who had been in the project longer than
me, so the team simply relied on local tests and checking the staging
environment after they pushed a change.&lt;/p&gt;
&lt;p&gt;A year or so later, I had enough. The project wasn&amp;rsquo;t also constantly on fire,
only occasionally, so I decided to take the time to dig into our CI pipeline
configuration to see what is causing the pipeline to be so slow. My
investigation lead to Kubernetes configuration, specifically the part
where resource limits were configured. For whatever reason, I found that the
service was allowed an absurdly low CPU allocation, measured in millicores.&lt;/p&gt;
&lt;p&gt;I increased the limit to something sensible, such as 1 full CPU core. The result?
The startup time of each pod took 30-40 seconds now, resulting in deployments that
took 2 to 3 minutes max. This is an insane improvement over the old deployments
that took up to 15 minutes regularly.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/04/18/strangling-your-service-with-kubernetes/media/artistsrendition.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/04/18/strangling-your-service-with-kubernetes/media/artistsrendition_hu8c4edc131253509528a7caa0b7424583_48662_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1054&#34;
             height=&#34;510&#34;
             alt=&#34;Artists rendition of the CPU usage patterns that the service exhibited, before and after the fix.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Artists rendition of the CPU usage patterns that the service exhibited, before and after the fix.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;To go even faster. I tweaked the &lt;code&gt;maxSurge&lt;/code&gt; property of the rolling update deployment
strategy to start up more new pods in parallel, further shortening the time that
it took to deploy the service. The only thing I had to keep in mind was the
number of database connections afforded to each pod and the maximum number of
connections offered by the database. Start up too many pods in parallel, and
you&amp;rsquo;ll find that your deployment fails due to the service exhausting the
available database connections.&lt;/p&gt;
&lt;p&gt;Some time later I learned the reason behind such a CPU resource limit configuration.
Apparently it&amp;rsquo;s a good practice to set your resource limits based on the average
load that your service exhibits after it has properly started up. It does make
sense, especially if you don&amp;rsquo;t want to have your Kubernetes nodes sit idle due to
inefficient resource usage.&lt;/p&gt;
&lt;p&gt;This example case shows that it&amp;rsquo;s a trade-off that you&amp;rsquo;ll have to take into
consideration, especially if your service starts up quite slowly and not in
mere seconds.&lt;/p&gt;
&lt;p&gt;At the time of writing this post, the tweaked configuration is still up and
running in production.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Oversimplified guide into snapshots on the btrfs filesystem</title>
      <link>https://ounapuu.ee/posts/2022/04/05/btrfs-snapshots/</link>
      <pubDate>Tue, 05 Apr 2022 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/04/05/btrfs-snapshots/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Friday afternoon. You&amp;rsquo;re trying out a script that you wrote to mass-rename and
move some files around. You finish the script and test it out.&lt;/p&gt;
&lt;p&gt;Oops.&lt;/p&gt;
&lt;p&gt;All the files now have all the wrong names, and some have been randomly moved
10 folders deep. It&amp;rsquo;s a mess.&lt;/p&gt;
&lt;p&gt;And you didn&amp;rsquo;t make a backup of your files right before this step because
you thought that you wouldn&amp;rsquo;t need it. &lt;em&gt;It&amp;rsquo;s just a simple script, after all&amp;hellip;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve found yourself in a similar situation and want to know how to avoid
problems in the future, then this article is for you&lt;/p&gt;
&lt;h3 id=&#34;btrfs-overview&#34;&gt;btrfs: overview&lt;/h3&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/04/05/btrfs-snapshots/media/btrfs.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/04/05/btrfs-snapshots/media/btrfs_hu506700b564e4b6a934ca13e99ff97abe_14343_1280x800_fit_box_3.png&#34;
             width=&#34;593&#34;
             height=&#34;328&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;&lt;a href=&#34;https://btrfs.wiki.kernel.org/index.php/Main_Page&#34;&gt;&lt;code&gt;btrfs&lt;/code&gt;&lt;/a&gt;
(&lt;em&gt;butter-fs, bee-tee-arr-eff-ess&lt;/em&gt;) is a modern filesystem present in the Linux
kernel that has a lot of great features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;different RAID levels: RAID0, RAID1, RAID10&amp;hellip;&lt;/li&gt;
&lt;li&gt;data integrity guarantees&lt;/li&gt;
&lt;li&gt;snapshots&lt;/li&gt;
&lt;li&gt;and many more!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;btrfs&lt;/code&gt; does have some downsides and has had its fair share of issues and
controversy in the past, but at least during the last couple of years it&amp;rsquo;s been
fine in my simple RAID1 + snapshots use cases.&lt;/p&gt;
&lt;p&gt;In this post, we&amp;rsquo;ll focus on the snapshots feature that &lt;code&gt;btrfs&lt;/code&gt; offers.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re not sure what snapshots are, then you can think of them as a still
image of the state of your filesystem at a certain point in time. You can create
a snapshot of the filesystem, delete all your files, and still be able to get
your files back just like you left them.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a developer who has used &lt;code&gt;git&lt;/code&gt; and doesn&amp;rsquo;t mind oversimplified (and
probably incorrect) explanations: you can think of snapshots like &lt;code&gt;git&lt;/code&gt; commits.
You can take snapshots (commit), roll back to a previous snapshot (reset/revert)
or view the contents of a previous snapshot (checkout commit).&lt;/p&gt;
&lt;p&gt;One thing to keep in mind with snapshots is that they will take up space,
especially if you make a lot of them and move files around a lot.&lt;/p&gt;
&lt;p&gt;There are many tools available to manage &lt;code&gt;btrfs&lt;/code&gt; snapshots. The one I&amp;rsquo;ve opted
for is &lt;a href=&#34;http://snapper.io/&#34;&gt;&lt;code&gt;snapper&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;snapper-quick-start&#34;&gt;Snapper quick-start&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s a quick guide on how to get started with snapshotting your &lt;code&gt;btrfs&lt;/code&gt;
filesystem. The example is based on a system with a &lt;code&gt;btrfs&lt;/code&gt; filesystem mounted
on &lt;code&gt;/home&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;snapper&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu/Debian: &lt;code&gt;sudo apt install snapper&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fedora: &lt;code&gt;sudo dnf install snapper&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Setup the configuration: &lt;code&gt;sudo snapper -c home create-config /home&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/snapper/configs&lt;/code&gt; now has a text file named &lt;code&gt;home&lt;/code&gt; that you can configure
to your liking. My personal recommendation is to use the &lt;code&gt;TIMELINE&lt;/code&gt; snapshots
configuration to configure the maximum number of hourly and daily snapshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;snapper&lt;/code&gt; ships with two systemd timers that automatically take new snapshots
and remove old ones. Make sure that they are enabled:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo systemctl enable --now snapper-timeline.timer snapper-cleanup.timer&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;After a while, you should be able to see snapshots appear in the output of
&lt;code&gt;sudo snapper list&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you want to browse the files for the old snapshots, go to &lt;code&gt;/home/.snapshots&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example output of &lt;code&gt;sudo snapper list&lt;/code&gt; on my machine:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;gt; sudo snapper list

    # | Type   | Pre # | Date                     | User | Cleanup  | Description | Userdata
------+--------+-------+--------------------------+------+----------+-------------+---------
   0  | single |       |                          | root |          | current     |         
   1  | single |       | K 16 märts 2022 08:12:01 | root | timeline |             |         
 242  | single |       | K 16 märts 2022 13:00:16 | root | timeline |             |         
 302  | single |       | K 16 märts 2022 14:00:05 | root | timeline |             |         
 362  | single |       | K 16 märts 2022 15:00:10 | root | timeline |             |         
 422  | single |       | K 16 märts 2022 16:00:19 | root | timeline |             |         
 461  | single |       | K 16 märts 2022 17:20:29 | root | timeline |             |         
 501  | single |       | K 16 märts 2022 18:00:02 | root | timeline |             |
...         
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That&amp;rsquo;s it!&lt;/p&gt;
&lt;h3 id=&#34;snapper-tech-tips&#34;&gt;Snapper tech tips&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re new to snapshots, then I recommend keeping an eye on your disk usage
and tuning the &lt;code&gt;snapper&lt;/code&gt; timeline related configurations to your liking. For my
&lt;code&gt;/home&lt;/code&gt; folder, my configuration looks like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# create hourly snapshots
TIMELINE_CREATE=&amp;#34;yes&amp;#34;

# cleanup hourly snapshots after some time
TIMELINE_CLEANUP=&amp;#34;yes&amp;#34;

# limits for timeline cleanup
TIMELINE_MIN_AGE=&amp;#34;300&amp;#34;
TIMELINE_LIMIT_HOURLY=&amp;#34;48&amp;#34;
TIMELINE_LIMIT_DAILY=&amp;#34;7&amp;#34;
TIMELINE_LIMIT_WEEKLY=&amp;#34;0&amp;#34;
TIMELINE_LIMIT_MONTHLY=&amp;#34;0&amp;#34;
TIMELINE_LIMIT_YEARLY=&amp;#34;0&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;With this configuration, I can undo my screw-ups for up to 7 days, with more
granular control for changes done within the last 48 hours.&lt;/p&gt;
&lt;p&gt;If you have data that changes more often than other data on the same filesystem,
then I recommend utilizing &lt;code&gt;btrfs&lt;/code&gt; subvolumes and creating separate &lt;code&gt;snapper&lt;/code&gt;
configurations for each.&lt;/p&gt;
&lt;p&gt;For example: a folder containing gigabytes of cat pictures is unlikely to change
all that often, so a longer snapshot retention policy of 24 hourly/30 daily
snapshots is a sensible one.&lt;/p&gt;
&lt;p&gt;However, the contents of my &lt;code&gt;downloads&lt;/code&gt; folder changes more frequently and may
contain bigger files that I need temporarily, such as the ISO file for the
latest Fedora/Debian release. In a situation like that, having a 6 hourly/7
daily snapshots policy will make more sense, especially if I don&amp;rsquo;t want to run
out of space due to excessive number of snapshots taken for that filesystem.&lt;/p&gt;
&lt;h3 id=&#34;further-reading-zfs-snapshots&#34;&gt;Further reading: ZFS snapshots&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://zfsonlinux.org/&#34;&gt;&lt;code&gt;ZFS&lt;/code&gt;&lt;/a&gt; is a fantastic filesystem that offers many of
the features boasted by &lt;code&gt;btrfs&lt;/code&gt;, and some that &lt;code&gt;btrfs&lt;/code&gt; doesn&amp;rsquo;t have. ZFS also
supports snapshots. To set up automatic snapshot creation and pruning on ZFS,
I can recommend &lt;a href=&#34;https://github.com/jimsalterjrs/sanoid&#34;&gt;&lt;code&gt;sanoid&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>My self-hosting setup has an UPS now, here&#39;s my experience with it</title>
      <link>https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/</link>
      <pubDate>Mon, 21 Mar 2022 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I changed my setup again.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m now the proud owner of an APC Smart-UPS 750.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/media/ups.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/media/ups_hu6f445b2577f74e4210dee3355499f84a_3878089_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The UPS is many times larger than the actual server.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The UPS is many times larger than the actual server.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Why? Because I got it as a gift, and I have never actually had an UPS before, so
it makes for a good introduction to this world.&lt;/p&gt;
&lt;h3 id=&#34;overview&#34;&gt;Overview&lt;/h3&gt;
&lt;p&gt;My setup is quite basic: everything that I have on my table (server, monitor,
laptop) is connected through the UPS. Since my setup uses very little power,
I&amp;rsquo;m running way below the output limit of 500 watts.&lt;/p&gt;
&lt;p&gt;When I&amp;rsquo;m not using my laptop, the UPS reports itself at 10% utilization. My
server and the UPS itself seems to consume around 35-40 watts, as measured by
an energy meter. When the laptop and monitor are also powered on, the load is
around 15-25%, depending on the workload.&lt;/p&gt;
&lt;p&gt;To make sure that I get the full benefit of the UPS, I connected it to my server
with an USB cable and installed &lt;code&gt;apcupsd&lt;/code&gt;. By default, the daemon could not
detect the UPS, which was then fixed with the help of &lt;a href=&#34;https://unix.stackexchange.com/a/538636&#34;&gt;this StackExchange answer&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I had the same problem with COMMLOST with a USB connection, after a lot of
research I found by pure hazard that with a USB connection you should change
DEVICE /dev/ttys0 to DEVICE in /etc/apcupsd/apcupsd.conf with nothing after it,
this way apcupsd search everywhere on the system to find the UPS and connect
correctly, no more COMMLOST.&lt;/p&gt;
&lt;p&gt;After that, restart apcupsd with:&lt;/p&gt;
&lt;p&gt;$ sudo /etc/init.d/apcupsd restart&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;With the UPS connected and the service up and running, I could now see more
detailed specs. The output for &lt;code&gt;apcaccess&lt;/code&gt; looks something like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;APC      : 001,043,1007
DATE     : 2022-02-04 21:49:08 +0200  
HOSTNAME : deskmini
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : deskmini
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2022-02-01 05:45:50 +0200  
MODEL    : Smart-UPS 750 
STATUS   : ONLINE 
LINEV    : 241.9 Volts
LOADPCT  : 9.1 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 98.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
OUTPUTV  : 241.9 Volts
SENSE    : High
DWAKE    : -1 Seconds
DSHUTD   : 90 Seconds
LOTRANS  : 208.0 Volts
HITRANS  : 253.0 Volts
RETPCT   : 0.0 Percent
ITEMP    : 33.3 C
ALARMDEL : 30 Seconds
BATTV    : 27.4 Volts
LINEFREQ : 50.0 Hz
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STESTI   : 14 days
STATFLAG : 0x05000008
MANDATE  : 2007-03-16
SERIALNO : &amp;lt; serial number goes here &amp;gt;
BATTDATE : 2007-03-16
NOMOUTV  : 230 Volts
NOMBATTV : 24.0 Volts
FIRMWARE : 651.13.I USB FW:7.3
END APC  : 2022-02-04 21:49:10 +0200  
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;ve seen some unintentionally funny abbreviations, but &lt;code&gt;CUMONBATT&lt;/code&gt; takes the
cake.&lt;/p&gt;
&lt;h3 id=&#34;battery-runtime-test&#34;&gt;Battery runtime test&lt;/h3&gt;
&lt;p&gt;To test out the state of the batteries and understand how the UPS handles power
failure scenarios, I decided to pull the plug and see what happens next.&lt;/p&gt;
&lt;p&gt;The first thing you&amp;rsquo;ll notice is the beeping. It&amp;rsquo;s not quite as loud as a smoke
detector, but I couldn&amp;rsquo;t blame my neighbours for thinking that this was the case.
To silence the UPS, just press the power on/test button (the one with the | on
it).&lt;/p&gt;
&lt;p&gt;While on batteries, the UPS emits a hum that&amp;rsquo;s not too different from the one
present near some power stations and transformers. Other than that, it doesn&amp;rsquo;t
get awfully loud or anything, at least on a small load.&lt;/p&gt;
&lt;p&gt;I continued using my laptop and monitor while keeping an eye on the &lt;code&gt;apcupsd&lt;/code&gt;
daemon and &lt;code&gt;apcaccess&lt;/code&gt; output. The estimated runtime was around the 60 minute
mark and it ended up being quite close to the actual figure.&lt;/p&gt;
&lt;p&gt;Around the 10% capacity mark &lt;code&gt;apcupsd&lt;/code&gt; triggered a shutdown of the server. The
UPS still provided power at that point. I decided to supply the UPS with power
again and turn on my server. To my surprise, the UPS now cut off all output
power and started blinking some lights, one of them indicating some sort of an
issue with the battery. I turned everything off, then on again and the UPS was
just fine.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure if the last incident was intended behaviour or my inexperience
causing an issue.&lt;/p&gt;
&lt;h3 id=&#34;power-usage&#34;&gt;Power usage&lt;/h3&gt;
&lt;p&gt;The goal of &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;moving my setup to an efficient machine&lt;/a&gt;
was to experiment with how low can I go with the power usage of my setup.
Unfortunately with the introduction of the UPS I have wiped out almost all of
the gains that I got from the move. The UPS itself seems to constantly consume
around 17-18 watts, which is just a bit more than my server itself is using.&lt;/p&gt;
&lt;p&gt;However, I hope that the reliability improvements and various protections
that come with the use of an UPS make up for that downside.&lt;/p&gt;
&lt;h3 id=&#34;lan-resilience&#34;&gt;LAN resilience&lt;/h3&gt;
&lt;p&gt;With the initial setup that I had, the server and the UPS were both on my desk.
In the event of a power outage, the server, my laptop and all the connected
peripherals would continue working. The only issue is that the networking won&amp;rsquo;t
work in such a scenario, as both the ISP provided modem-router box and my own
router would be knocked offline. What use is a server disconnected from the
network?&lt;/p&gt;
&lt;p&gt;Since I use my laptop for work, I&amp;rsquo;m not too worried about it losing power.
Laptops have batteries, so in the event of a power outage, it will just continue
running off of the internal battery.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve configured my router to resolve my own domains internally, meaning that even
when I cannot connect to the Internet, my locally hosted services will keep
working in some capacity.&lt;/p&gt;
&lt;p&gt;With all of this in mind, I decided to move my setup closer to my main router.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/media/newsetup.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/media/newsetup_hufa48b8d62ca6faa74ea52ad39cced502_5090158_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Not the prettiest setup, but it does do the trick, and it makes for a good conversation starter.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Not the prettiest setup, but it does do the trick, and it makes for a good conversation starter.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Power goes out, my server and local network will still keep on working for up to
2 hours due to the low combined power usage.&lt;/p&gt;
&lt;h3 id=&#34;desktop-integration&#34;&gt;Desktop integration&lt;/h3&gt;
&lt;p&gt;When testing the UPS on my main workstation (ThinkPad T430 running Fedora 35), I
was positively surprised by the out of the box experience that I had with the
UPS. With the USB cable connected to the laptop and the &lt;code&gt;apcupsd&lt;/code&gt; service
running in the background, I could see the remaining battery life of the UPS the
same way that the laptop battery shows up.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/media/gnome-power-info.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/media/gnome-power-info_hu73db0f21bff1fc04dead1bc2b5e8a5de_10881_1280x800_fit_box_3.png&#34;
             width=&#34;718&#34;
             height=&#34;265&#34;
             alt=&#34;The UPS showing up as the main battery in GNOME 41.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The UPS showing up as the main battery in GNOME 41.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;And once I ran out the batteries, I got a notification saying that the UPS was
about to run out of power soon.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/media/gnome-ups-warning.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/03/21/ups-i-did-it-again/media/gnome-ups-warning_huc425fff82cafaf52006c6d51cc147780_13099_1280x800_fit_box_3.png&#34;
             width=&#34;508&#34;
             height=&#34;106&#34;
             alt=&#34;Warning notification that pops up once the UPS is running low on power.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Warning notification that pops up once the UPS is running low on power.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I love seeing these relatively niche use cases supported out of the box. Props
to the developers behind these quality of life improvements!&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Would I have gone out and bought this UPS if I didn&amp;rsquo;t receive it as a gift?
Probably not, because I didn&amp;rsquo;t see much of a need for one.&lt;/p&gt;
&lt;p&gt;Now that I have it, will I keep using it? Definitely, assuming that the
inevitable battery replacement cost is reasonable and the process of changing
them is easy enough for an enthusiast to handle.&lt;/p&gt;
&lt;p&gt;From the manual:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For Professional Business Applications – Not For Consumer Use&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Look, ma, I&amp;rsquo;m a professional now!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>How I treat my urge to hoard data</title>
      <link>https://ounapuu.ee/posts/2022/03/08/something-is-better-than-nothing/</link>
      <pubDate>Tue, 08 Mar 2022 07:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/03/08/something-is-better-than-nothing/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;The tagline for &lt;a href=&#34;https://www.reddit.com/r/DataHoarder/&#34;&gt;/r/datahoarder&lt;/a&gt; reads:
&amp;ldquo;It&amp;rsquo;s A Digital Disease!&amp;rdquo;. I agree.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/03/08/something-is-better-than-nothing/media/why-cant-i-hold-all-these-drives.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/03/08/something-is-better-than-nothing/media/why-cant-i-hold-all-these-drives_hu82e22c8f62cb06c4fc4c5ab54479cb84_59302_1280x800_fit_q75_box.jpg&#34;
             width=&#34;458&#34;
             height=&#34;449&#34;
             alt=&#34;Why can&amp;#39;t I hold all these hard drives?&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Why can&amp;#39;t I hold all these hard drives?
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;At some point I realized that the pursuit to hoard all the things will just keep
on consuming more and more of my time and money. Storage is cheap up until to a
point, once you find yourself tracking hard drive prices via
&lt;a href=&#34;https://de.camelcamelcamel.com&#34;&gt;camelcamelcamel&lt;/a&gt; and being excited that a 12 TB
external hard drive is at it&amp;rsquo;s lowest price, you may start suspecting that you
have a hoarding issue.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t have anything against what people at /r/datahoarder and other archival
efforts do. Data archival done by volunteers is what allows us to preserve
history and cultural artifacts of our time (YouTube videos, memes etc.). I just
had to find a solution to my situation before it got too bad.&lt;/p&gt;
&lt;h3 id=&#34;something-is-better-than-nothing&#34;&gt;Something is better than nothing&lt;/h3&gt;
&lt;p&gt;Once you find yourself with terabytes of data and decide to scale down, you will
need to make some changes. Most of the time this results in deleting a lot of
data that you don&amp;rsquo;t care about that much. This works, but there are some files
that will be difficult to part with.&lt;/p&gt;
&lt;p&gt;In my experience, most of the storage is taken up by media files.
I would still like to have a copy of some videos, but if they are downloaded
in 1080p or 4K resolutions, they will take up a lot of space.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s when I decided to change my approach with data like that. I would still
like to have &lt;em&gt;a&lt;/em&gt; copy, but it doesn&amp;rsquo;t necessarily have to be full quality all
the time. When you rewatch YouTube videos that you have archived from 2006-2010s,
you&amp;rsquo;ll notice that the video quality is bad. That doesn&amp;rsquo;t mean that you enjoy
the videos any less. Watching these old videos is just an act of going through
your memories and feeling nostalgic, the medium itself is just the spark needed
to revive the memories.&lt;/p&gt;
&lt;p&gt;With that, I decided to start following this simple rule: &lt;em&gt;something is better
than nothing&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t need 4K versions of all the channels I follow. &lt;code&gt;bestvideo[height&amp;lt;=1080]&lt;/code&gt;
in &lt;code&gt;yt-dlp&lt;/code&gt; configuration will limit the resolution of all the videos you download
to 1080p, which is still good enough.&lt;/p&gt;
&lt;h3 id=&#34;data-value-and-you&#34;&gt;Data, value, and you&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re someone like me who watches YouTube frequently, then you probably have
some channels that you care about a lot.&lt;/p&gt;
&lt;p&gt;With channels that I truly care about, I still keep the highest quality copies of
all their videos on my server. This has a real cost in terms of storage, but the
value I have got out of the videos is much greater than that.&lt;/p&gt;
&lt;p&gt;However, there are some exceptions. &lt;a href=&#34;https://www.youtube.com/c/LinusTechTips&#34;&gt;LinusTechTips&lt;/a&gt;
is a great channel and has had a huge influence in my life. However, they upload
almost daily and do long streams from time to time. Archiving the whole channel
is just not feasible at my scale. Even when limiting the resolution to 480p,
the full channel archive takes up over 300 GB of space in 2022. Instead, I&amp;rsquo;ve
opted to recognizing the videos that are the most memorable, such as
&lt;a href=&#34;https://youtu.be/eCz-IixxR_k&#34;&gt;the petabyte project&lt;/a&gt;, and have archived those
individually.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s also a certain type of data that isn&amp;rsquo;t that common: data created by you
and your friends/family. Extra care and focus should be put on this type of
data, because it&amp;rsquo;s very unlikely that someone else has a copy of gigabytes worth
of cat pictures you&amp;rsquo;ve taken over the years. Make plenty of backups and don&amp;rsquo;t
worry too much about hoarding it now, as long as it&amp;rsquo;s not a big burden for you.&lt;/p&gt;
&lt;h3 id=&#34;constraints&#34;&gt;Constraints&lt;/h3&gt;
&lt;p&gt;Constraints force you to get creative. It also helps with tuning down your data
hoarding habit.&lt;/p&gt;
&lt;p&gt;Set physical limitations to the data you can store. For example: limit yourself
to running only two hard drives at a time. The only way to get more storage is
to upgrade vertically to bigger hard drives, which is naturally
throttled by the relatively slow increases in hard drive sizes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/&#34;&gt;For reference, my current setup has some pretty harsh limits when it comes to
storage&lt;/a&gt;. The only way to get
more is to spend a lot of money on bigger SSD-s.&lt;/p&gt;
&lt;h3 id=&#34;the-internet-archive&#34;&gt;The Internet Archive&lt;/h3&gt;
&lt;p&gt;If you don&amp;rsquo;t want to go through all the hassle, but still want to contribute
to archival efforts, then you can donate to &lt;a href=&#34;https://archive.org/donate/&#34;&gt;the Internet Archive&lt;/a&gt;
instead. Buying and running all those hard drives isn&amp;rsquo;t free, you know.&lt;/p&gt;
&lt;p&gt;And if you&amp;rsquo;re planning on uploading data to the Internet Archive, then please
do not abuse it. Only upload data that you feel is worth preserving.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Surviving the front page of HackerNews on a 50 Mbps uplink</title>
      <link>https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/</link>
      <pubDate>Wed, 09 Feb 2022 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Around a month ago &lt;a href=&#34;https://news.ycombinator.com/item?id=29871693&#34;&gt;I shared my blog post&lt;/a&gt;
on HackerNews. I guess I lucked out with the choice of the topic, because it
brought out a lot of enthusiasts who shared their own experiences with older
machinery that still works in 2022. I really appreciate the feedback and the
experiences shared!&lt;/p&gt;
&lt;p&gt;Anyway, what is noteworthy in my opinion is that my blog runs off of a residential
connection that has an upload speed limit of 50 Mbps. Once I noticed the post
getting traction, I was worried for a moment. It&amp;rsquo;s not a rare sight to see a post
on the front page of HackerNews and see it being down due to all the attention
it got.&lt;/p&gt;
&lt;p&gt;Somehow, my post managed to weather the storm. Here&amp;rsquo;s what happened.&lt;/p&gt;
&lt;h3 id=&#34;analyzing-the-logs&#34;&gt;Analyzing the logs&lt;/h3&gt;
&lt;p&gt;My page doesn&amp;rsquo;t have any sort of first-party or third-party analytics software
running. Tracking users across the web is a big no-go for me and I will live by
that, especially on my website. I do have &lt;code&gt;nginx&lt;/code&gt; logs, though.&lt;/p&gt;
&lt;p&gt;After a quick look around, I found &lt;code&gt;goaccess&lt;/code&gt;, a tool that can parse &lt;code&gt;nginx&lt;/code&gt;
logs and put together some basic statistics. I found it to be good enough for my
purposes. Here are some notable statistics.&lt;/p&gt;
&lt;p&gt;To understand the HackerNews effect, note that the post was published on
2022-01-10 07:42. These logs also include requests towards services that I host
myself.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/0-summary.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/0-summary_hu0515da4a2b96d4ff45799ba28abc1280_22222_1280x800_fit_box_3.png&#34;
             width=&#34;765&#34;
             height=&#34;129&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;The summary of the week during which one of my posts got popular on HN, as
reported by &lt;code&gt;goaccess&lt;/code&gt;, looks like this.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/1-unique-visitors.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/1-unique-visitors_hu8e7bb4aaf544a7c5370cc41454f3e841_29632_1280x800_fit_box_3.png&#34;
             width=&#34;422&#34;
             height=&#34;236&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;During quiet days, nginx logs around 50K requests a day. On 10th of January,
there was a 12x increase. The effect was also noticeable the next day, during
which I assume people caught up with their 100+ tabs that they usually have
open. This may also be down to the post being shared around as well.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/2-requested-files.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/2-requested-files_hu345a07dd84d4b7c03aeb1e3b3b2710f0_117332_1280x800_fit_box_3.png&#34;
             width=&#34;1182&#34;
             height=&#34;573&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Based on this statistic, it seems that the post got around 75K views, either by
real people, crawlers or preview generators.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/3-static-requests.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/3-static-requests_huaefe62e3de5017a9f90e01a347493069_198071_1280x800_fit_box_3.png&#34;
             width=&#34;1006&#34;
             height=&#34;575&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;When we look at the number of requests made towards specific assets, such as
the images in the post, we can see that real impressions are likely to be
around 55K. The first image has been downloaded more than the other two, likely
indicating that it was used as the preview image when the article was linked
on other sites.&lt;/p&gt;
&lt;p&gt;This statistic also highlights a surprisingly large cost of web fonts.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/6-operating-systems.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/6-operating-systems_hu0acfb4bb28066f949c0548a34f57a0b9_28011_1280x800_fit_box_3.png&#34;
             width=&#34;391&#34;
             height=&#34;213&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;The OS results are likely to be biased, since my self-hosted services go through
the same reverse proxy. The &amp;ldquo;Unknown&amp;rdquo; section is likely related to crawlers and
other bots pinging my server.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/7-browsers.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/7-browsers_hu5cdd9a7193d9041bd305bcc7ac4d49df_28085_1280x800_fit_box_3.png&#34;
             width=&#34;382&#34;
             height=&#34;211&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;No surprise there: Chrome is the most popular browser used to reach my site.
Firefox makes up a good chunk of hits as well, but a lot of those are likely
requests made from my own machine.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/8-time-distribution.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/8-time-distribution_hu4b5d2835ec9c371a50708274dda685f6_118771_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;355&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;The time distribution of the requests is interesting. You can notice the background
noise associated with bots and crawlers that occurs during the night. My post
was posted in the morning in my local timezone (UTC +2), which was around the
time EU people wake up and get to work. The other spike around 14-15:00 can
likely be attributed to our friends over the Atlantic ocean.&lt;/p&gt;
&lt;p&gt;16:00 in my local time is a bit special. A lot of things coincide with this time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the review embargo for the latest highly sought after CPU/GPU is over, followed
by a barrage of videos on this product in YouTube&lt;/li&gt;
&lt;li&gt;the stock market opens and news start rolling in about some big moves&lt;/li&gt;
&lt;li&gt;if Slack is having issues, then it&amp;rsquo;s around this time, because I can only
assume that people get to work and do a production release at the start of the
workday.&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/13-http-status-codes.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/13-http-status-codes_hue3b956f0f907bc875b7cbdfe96bc5b5a_134566_1280x800_fit_box_3.png&#34;
             width=&#34;901&#34;
             height=&#34;503&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;To my surprise, my server survived this and there aren&amp;rsquo;t too many issues. The
400 and 500 errors are likely attributed to bots trying to exploit my server and
crawlers visiting links that are not valid any more.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/16-geolocation.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/09/hn-stats-analytics/media/16-geolocation_hu2c62e3854e770ca3e1205beb5ce532d7_37508_1280x800_fit_box_3.png&#34;
             width=&#34;467&#34;
             height=&#34;220&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;There&amp;rsquo;s likely a bias here as well regarding Europe.&lt;/p&gt;
&lt;h3 id=&#34;how-i-built-the-blog&#34;&gt;How I built the blog&lt;/h3&gt;
&lt;p&gt;When I started writing blog posts regularly, I had some principles that I wanted
to stick to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the goal should be on the writing, not the part where I build the website itself&lt;/li&gt;
&lt;li&gt;the site has to be static: build it once and deploy it, which should result in
fewer opportunities for attacks and reduced load on the CPU&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With this in mind, I decided to stick with &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt;. Hugo is
just a single binary, has plenty of themes to pick from, and it seems like a
reasonable-enough choice for a site. It&amp;rsquo;s not the easiest to use as you&amp;rsquo;ll be
mainly operating in Markdown, and with the theme that I use, I have to
copy-paste a &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; section, change the image name that it points to, and
make sure that I didn&amp;rsquo;t mess anything up. However, because this approach rules
out me getting hit by the hottest Wordpress plugin vulnerability of the week, I
think it&amp;rsquo;s a fair trade-off to make.&lt;/p&gt;
&lt;p&gt;I picked &lt;a href=&#34;https://github.com/panr/hugo-theme-hello-friend&#34;&gt;this theme&lt;/a&gt; by
&lt;a href=&#34;https://twitter.com/panr&#34;&gt;panr&lt;/a&gt; and customized it so that it has a landing page
of sorts as well. I haven&amp;rsquo;t updated it yet and it has some flaws, but it gets
the job done, and that&amp;rsquo;s what matters to me the most.&lt;/p&gt;
&lt;p&gt;Hosting media, such as images, seems like a no-brainer, just put them on the
page and be done with it. Pictures taken with an iPhone SE 2020 are quite big,
though (3-4 MB per image), which will result in the page loading very slowly.
To avoid images bloating the size of the page too much, I have set up a system
where I keep the original images in one folder, copy them to another one, run
&lt;code&gt;mogrify -resize 1024x768 -quality 85 *.jpg&lt;/code&gt; to keep the images small, but still
detailed enough, and then deploy those converted images along with the rest of
the blog.&lt;/p&gt;
&lt;p&gt;With converted images, a page with three images can fit in less than 1 MB of
transferred files without any issues. With original images, the same page would
require 10 MB of files to be transferred. The math is simple: with a limited
uplink, optimizing the images results in your server being able to serve 10x
more requests.&lt;/p&gt;
&lt;h3 id=&#34;residential-connections-and-dns&#34;&gt;Residential connections and DNS&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re like me, then you probably have a crappy router/modem box from your
local ISP, and a dynamic IP address that usually changes whenever you reboot
said box. This presents a challenge when you try to host anything from your
residential connection since the IP address could change at any time.&lt;/p&gt;
&lt;p&gt;To resolve this, there are two options I&amp;rsquo;m aware of: dynamic DNS providers, or
setting up a script that talks to your DNS provider over a standard API.&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t personally used any dynamic DNS providers, such as &lt;a href=&#34;https://www.duckdns.org&#34;&gt;DuckDNS&lt;/a&gt;,
mainly because my domain registrar has a handy API that I can use to
automatically update my IP address with any time it changes. And yes, I did have
an issue with the script where I triggered a change every minute, resulting in
an angry e-mail being sent to me. Free tech tip: only propagate changes when the
IP address &lt;em&gt;actually&lt;/em&gt; changes.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s one downside with this issue: you can set your domain TTL (time-to-live)
low, but no matter how low you set it, there will be a period of time after
an IP address change where some DNS servers will point to your old IP address.
This is an availability risk you have to consider when setting up a service on
a dynamic IP address.&lt;/p&gt;
&lt;h3 id=&#34;future-steps&#34;&gt;Future steps&lt;/h3&gt;
&lt;p&gt;At one point I took a look a the assets of the Hugo theme that I use and noticed
that it includes a dependency named &lt;code&gt;prism.js&lt;/code&gt;, which might be a good thing to
include if you want to display code snippets with syntax highlighting. My issue
with it was that it was included on every page load and took up a significant
chunk of transferred data. I decided to remove it, and just like that, the page
loads even faster.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s still room for improvement. The page currently also includes some custom
fonts. If I decide that a built-in font is good enough, then there&amp;rsquo;s potential
for an additional 0.3 MB of savings.&lt;/p&gt;
&lt;p&gt;The web is bloated enough already, but at least I can control what I send to the
client machines on my website.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;If you don&amp;rsquo;t want to go through all the hassle and just want a website up and
running, just get yourself a cheap virtual machine at a cloud provider, or use
something like Github Pages. Those solutions are less likely to hit limits with
bandwidth.&lt;/p&gt;
&lt;p&gt;If you like tinkering and the decentralized, self-hosted web to exist
(&lt;em&gt;not Web 3.0!&lt;/em&gt;), then feel free to use this post as inspiration for your very
own website. There&amp;rsquo;s a lot that you can do with limited resources, and it&amp;rsquo;s
fun to push the limit.&lt;/p&gt;
&lt;p&gt;And as a quick tech tip: you can use &lt;a href=&#34;https://web.archive.org/web/20220110074515/https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/&#34;&gt;The Wayback Machine&lt;/a&gt;
as an insurance policy for your website. If you are concerned about it going
down, have them take a snapshot of it and link it somewhere in a comment.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>ASRock X570M Pro4 motherboard overview</title>
      <link>https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/</link>
      <pubDate>Wed, 02 Feb 2022 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Not too long ago, I had the goal of consolidating all my computing needs onto a
single desktop PC. That meant moving from an mITX-based build to something that
had a bit more expandability. Since I already had a
&lt;a href=&#34;https://www.fractal-design.com/products/cases/meshify/meshify-c-mini-dark-tempered-glass/black/&#34;&gt;Fractal Meshify C Mini&lt;/a&gt;,
I decided to go for an mATX motherboard. And that&amp;rsquo;s how I ended up with an
&lt;a href=&#34;https://www.asrock.com/mb/AMD/X570M%20Pro4/&#34;&gt;ASRock X570M Pro4&lt;/a&gt;.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/glamshot.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/glamshot_huec4a047eb42ac3a8ad29d0392314a0a2_2112846_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;ASRock X570M Pro4. Looks great, doesn&amp;#39;t it?&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      ASRock X570M Pro4. Looks great, doesn&amp;#39;t it?
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;matx-a-dying-breed&#34;&gt;mATX: a dying breed?&lt;/h3&gt;
&lt;p&gt;One of the requirements for the build was that it had to support IOMMU well so
that a VFIO setup would be possible. While AMD B-series motherboards may work
just fine in such scenarios, the X-series boards allegedly have better IOMMU
groups and thus better compatibility with VFIO.&lt;/p&gt;
&lt;p&gt;Once I started the search for the new motherboard, I was surprised to see that
locally there was only one mainstream option available. There were plenty of
B450 and B550 boards available, but only a single X570 board in this form factor.&lt;/p&gt;
&lt;p&gt;I checked the board out, saw that it had plenty of NVMe and SATA storage options,
and went for it.&lt;/p&gt;
&lt;h3 id=&#34;pcie-connectivity&#34;&gt;PCIe connectivity&lt;/h3&gt;
&lt;p&gt;When you have a bunch of PCIe devices to connect, the way those lanes are
connected start to matter.&lt;/p&gt;
&lt;p&gt;Based on my own testing, I&amp;rsquo;ve found the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the first M.2 slot (under the heatsink) is connected to the CPU&lt;/li&gt;
&lt;li&gt;the first PCIe x16 slot is also connected to the CPU&lt;/li&gt;
&lt;li&gt;the rest of PCIe connectivity goes through the chipset&lt;/li&gt;
&lt;li&gt;most (if not all) SATA ports seem to go through the chipset as well&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/lstopo.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/lstopo_hu127c7664038787b83bde687ea788a736_3131904_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Hardware topology, as shown by `lstopo`.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Hardware topology, as shown by `lstopo`.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This matters, because anything connected to the CPU via the chipset shares the
bandwidth of a limited x4 link. This was apparent when running two NVMe drives and
noticing that one of them was much slower when I also put load on SATA SSD-s.&lt;/p&gt;
&lt;p&gt;GPU-s can still work fine when connected via the chipset, but there&amp;rsquo;s definitely
a performance penalty involved. While I don&amp;rsquo;t have the exact numbers available
at this time, I do remember a CSGO benchmarking map showing at least a double-digit
framerate difference compared to the full x16 slot.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/gpu-in-chipset.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/gpu-in-chipset_hu88a48ab1ca7584716f1a7b8920857c7c_1736247_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The GPU works just fine in the chipset PCIe slot, albeit at lower performance.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The GPU works just fine in the chipset PCIe slot, albeit at lower performance.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I also gave PCIe bifurcation a go. I borrowed an ASUS PCIe adapter card that can
support up to 4 NVMe SSD-s, hoping that I could set up a crazy storage setup.
The bifurcation works, but for the CPU I used (AMD Ryzen 7 5700G) I was only
provided the option of 2x4 split, which meant that at most I could run two SSD-s
in the riser card at a time. A non-APU Ryzen CPU is likely needed to take full
advantage of the bifurcation support.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/bifurcation-uefi.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/bifurcation-uefi_hu9ce3b7b44d0670c589032f5d8f150177_2178940_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The setting that controls bifurcation in ASRock UEFI settings.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The setting that controls bifurcation in ASRock UEFI settings.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/bifurcation-card.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/02/02/asrock-x570m-pro4-overview/media/bifurcation-card_hu2c475b17c4f865a1d07ff6b077032bb6_2736863_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;ASUS Hyper M.2 PCIe card installed in the system.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      ASUS Hyper M.2 PCIe card installed in the system.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;For VFIO, this board is fine. Anything in PCIe slots, including the chipset ones,
I was able to pass through to the VM. USB and SATA ports were a different story,
I wasn&amp;rsquo;t able to pass through a single controller, the VM would not start up
properly.&lt;/p&gt;
&lt;p&gt;If you have an use case where you need reliable and fast PCIe connectivity,
then I&amp;rsquo;d recommend another platform that has lots of real PCIe connectivity,
such as the AMD Threadripper/EPYC platform. This board exhibited some odd
behaviour when trying to utilize all the PCIe slots, or when trying to use the
ASUS Hyper M.2 card in bifurcation mode while also having the GPU connected at
the bottom PCIe x16 slot.&lt;/p&gt;
&lt;h3 id=&#34;chipset-fan&#34;&gt;Chipset fan&lt;/h3&gt;
&lt;p&gt;One aspect of X570 boards that stuck out to most people on release was the
inclusion of a chipset fan. Not too long after, people started to report that
those fans are very loud and low quality, resulting in them failing easily.&lt;/p&gt;
&lt;p&gt;For this particular board, ASRock provides an option in UEFI settings that allows
you to run this chipset fan semi-passively. It will spin up once on boot and
sit idle the rest of the time, unless the temperatures are high enough. I was
not able to get that fan to spin even with a full GPU load and all SSD-s running
heavy read operations at the same time.&lt;/p&gt;
&lt;p&gt;If you have PWM fans, it&amp;rsquo;s also possible to manually control these in Linux
with the use of &lt;a href=&#34;https://wiki.archlinux.org/title/fan_speed_control#Fancontrol_(lm-sensors)&#34;&gt;fancontrol&lt;/a&gt;.
For me, it just took a bit of trial and error to figure out the mapping between
the software fan controls and the actual fan in the PC, after that I could
fine-tune them to run as quietly as possible. Yes, even the chipset fan was
controllable using the same method.&lt;/p&gt;
&lt;h3 id=&#34;am4-socket-long-term-support&#34;&gt;AM4 socket long term support&lt;/h3&gt;
&lt;p&gt;AMD introduced the &lt;a href=&#34;https://en.wikipedia.org/wiki/Socket_AM4&#34;&gt;AM4 socket&lt;/a&gt; back in
2016 and promised to support it until 2020. I applaud that effort and am
happy that I was able to run the latest AMD Ryzen 5000 series APU on a B450
board. If you happen to have a newer CPU that requires a UEFI upgrade for it to
be supported, then you will be in a world of hurt.&lt;/p&gt;
&lt;p&gt;I found myself in a situation where I had a motherboard that didn&amp;rsquo;t have the
newest UEFI version from the factory, and a CPU that was just a bit too new for
it to work. The board supported AMD Ryzen 5000 series CPU-s, not 5000 G-series
CPU-s. I also didn&amp;rsquo;t have an older CPU available that I could use to perform
this upgrade on my own. Luckily I was able to find a loaner 5000 series CPU,
perform the upgrade and finally assemble the machine.&lt;/p&gt;
&lt;p&gt;At least ASRock puts a sticker with the UEFI version on the chip itself so that
you can check the CPU support once you physically have the motherboard, but it&amp;rsquo;s
pretty much useless when buying this board online. There&amp;rsquo;s no indication as to
which version it will ship with, the best you can do is to look for some Reddit
threads where others have shared their experiences with the board and the UEFI
version it shipped with from the factory.&lt;/p&gt;
&lt;p&gt;Pro tip for CPU and motherboard manufacturers: if you&amp;rsquo;re going for long-term
support on your platform, please include a CPU-less UEFI upgrading solution.
Some high-end motherboards already ship with that type of functionality, but I
believe it should be made mandatory for all boards. Avoiding headaches like that
will be worth the extra cost.&lt;/p&gt;
&lt;h3 id=&#34;verdict&#34;&gt;Verdict&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s fine, looks good and gets the job done. Can&amp;rsquo;t recommend it for someone who
needs a lot of performance and PCIe lanes, but for hobbyist workloads it will
&lt;em&gt;probably&lt;/em&gt; be just fine. UEFI flashing situation really soured the experience
though.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>ASRock DeskMini X300: the future form factor of desktop PC-s?</title>
      <link>https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/</link>
      <pubDate>Mon, 17 Jan 2022 07:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I wasn&amp;rsquo;t happy with my &lt;a href=&#34;https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/&#34;&gt;&amp;ldquo;one machine that does it all&amp;rdquo;&lt;/a&gt;
setup, which is why I finally bit the bullet and got myself an &lt;a href=&#34;https://www.asrock.com/nettop/AMD/DeskMini%20X300%20Series/index.asp&#34;&gt;ASRock DeskMini X300 bare-bones kit&lt;/a&gt;.
This is a fantastic little desktop PC kit that is very small, quiet and can
still be configured to have ridiculous amounts of power. In the past. I once
built a low-power server based off of the predecessor, &lt;a href=&#34;https://www.asrock.com/nettop/AMD/DeskMini%20A300%20Series/index.asp&#34;&gt;the DeskMini A300&lt;/a&gt;,
and instantly fell in love with this form factor. Since then, I&amp;rsquo;ve tried to come
up with a reason to get one, and finally I&amp;rsquo;ve got one.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/0-assembled.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/0-assembled_hu617d2c8d12e97a84f282e8d5078732d8_3755312_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The ASRock DeskMini X300, up and running.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The ASRock DeskMini X300, up and running.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;configuration&#34;&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Because this is a bare-bones kit, you have to supply your own parts.&lt;/p&gt;
&lt;p&gt;My configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU: AMD Ryzen 7 5700G, locked to 35 W TDP in UEFI settings.&lt;/li&gt;
&lt;li&gt;Cooling: Noctua NH-L9a&lt;/li&gt;
&lt;li&gt;RAM: 2x 16 GB DDR4-3200 SODIMM&lt;/li&gt;
&lt;li&gt;NVMe storage: 2x Samsung SSD 980 500GB&lt;/li&gt;
&lt;li&gt;SATA storage: 2x Samsung SSD 870 QVO 4TB&lt;/li&gt;
&lt;li&gt;USB storage: 1x Samsung SSD 860 EVO 250GB in an IcyBox USB enclosure&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/1-mobo.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/1-mobo_hu90c130c123fa72adaef82af4bb30efed_5424061_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Initial test configuration with Ryzen 5 PRO 4650G and 16GB of RAM.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Initial test configuration with Ryzen 5 PRO 4650G and 16GB of RAM.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The use case for my kit is simple: it&amp;rsquo;s my server that hosts all my services and
data, including this blog you&amp;rsquo;re reading.&lt;/p&gt;
&lt;p&gt;Why this setup in particular?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most of my storage needs can be served by two 4 TB SSD-s.&lt;/li&gt;
&lt;li&gt;8 cores with SMT are perfect for multithreaded workloads, such as &lt;a href=&#34;https://jellyfin.org/&#34;&gt;Jellyfin&lt;/a&gt;
transcoding. This also works well for just running a bunch of services on the same
machine.&lt;/li&gt;
&lt;li&gt;Can support up to 64 GB of RAM, which should be plenty in the foreseeable
future.&lt;/li&gt;
&lt;li&gt;Supports fast NVMe SSD-s, which are perfect for more IO-sensitive workloads,
such as databases.&lt;/li&gt;
&lt;li&gt;Low power usage. Even with my almost maxed out kit, it still uses around
14 W in idle. At most this PC can use around 50-60 watts due to the CPU TDP
limit and SSD-s hitting full load.&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/3-testbed.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/3-testbed_hu2e032d737842a3e57220c5f94ac18848_4512366_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Never assemble the whole PC without checking if it actually works.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Never assemble the whole PC without checking if it actually works.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;why-is-this-form-factor-so-good&#34;&gt;Why is this form factor so good?&lt;/h3&gt;
&lt;p&gt;Desktop PC-s are big. Really big. While the small form factor PC movement has become
more popular lately, the most commonly available cases and parts still end up
taking a lot of space and resources. There are legitimate use cases for these
types of setups, especially if you&amp;rsquo;re running video renders, scientific
simulations or a lot of VM-s as part of a lab. Not every workload needs such a
big setup, however.&lt;/p&gt;
&lt;p&gt;The DeskMini X300 looks like a miniature version of a desktop PC in a tower case.
Similar shape and features, but at a fraction of the size and raw resources usage.
One might say that it even looks adorable, similar to how
&lt;a href=&#34;https://www.reddit.com/r/pcmasterrace/comments/nlddyc/since_gpus_are_in_short_supply_i_decided_to_build/&#34;&gt;Raspberry Pi-based builds look compared to desktops&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This PC takes up just 1.92 liters in volume (excluding the power adapter). For
comparison, a micro-ATX case like &lt;a href=&#34;https://www.fractal-design.com/products/cases/meshify/meshify-c-mini-dark-tempered-glass/black/&#34;&gt;the Fractal Meshify Mini C&lt;/a&gt;,
takes up a whopping 33.4 liters. I don&amp;rsquo;t have the raw numbers regarding material
usage or the weight difference, but this comparison should give you an idea of
the material usage difference between the two.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/5-size.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/5-size_hu4be2185c30d3485a23146686b57b99ad_3516089_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Included driver CD for scale. Not sure where you&amp;#39;d insert it, though.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Included driver CD for scale. Not sure where you&amp;#39;d insert it, though.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;caveats&#34;&gt;Caveats&lt;/h3&gt;
&lt;p&gt;I love this piece of kit, but I do have to acknowledge that there are some
trade-offs that you should be aware of.&lt;/p&gt;
&lt;p&gt;Starting with the obvious one first: you&amp;rsquo;re trading off some expandability.
No discrete GPU-s will fit in this thing, not even an external one due to lack
of Thunderbolt. On the other hand, if you don&amp;rsquo;t foresee a need for such
additions to your PC, then the DeskMini will be a great choice.&lt;/p&gt;
&lt;p&gt;Something that&amp;rsquo;s specific to the X300 is the lack of USB connectivity. You get
two USB 3.0 Type-A ports, one USB 2.0 port and a USB 3.2 Gen 1 Type-C port as
well. If you have a USB hub, then this won&amp;rsquo;t be much of an issue, but this
configuration is quite limited compared to most modern desktop motherboards.&lt;/p&gt;
&lt;p&gt;The motherboard inside this thing can also be a point of concern. It&amp;rsquo;s a
non-standard form factor, meaning that in case of failure you&amp;rsquo;re unlikely to
easily find a replacement. The most obvious step here would be to either repair
it or get another DeskMini kit to replace your existing one.&lt;/p&gt;
&lt;p&gt;One aspect of the DeskMini X300 that you may care about is the fact that the
power supply is an external 19V 120W power brick. This does mean that replacing
the power supply won&amp;rsquo;t be much of an issue, but you do have to take this into
account when planning your build. The power brick is quite big and has to be
placed somewhere, after all. In my setup, I&amp;rsquo;ve opted for sticking it to the
underside of my desk with double-sided tape.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/8-powersupply.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/8-powersupply_hu6eca71e5bc078e95366f4ddfa61fc00b_4666597_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;How to hide bulky power supplies: the tutorial.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      How to hide bulky power supplies: the tutorial.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;gpu-s-apu-s-and-the-future&#34;&gt;GPU-s, APU-s, and the future&lt;/h3&gt;
&lt;p&gt;For anyone who&amp;rsquo;s followed the GPU market in 2021/2022, the ridiculously high pricing
of GPU-s shouldn&amp;rsquo;t come as a surprise. As a firm believer in thinking that low
power computing is the future, I think that this presents a great opportunity
to start thinking differently about our computing architecture.&lt;/p&gt;
&lt;p&gt;AMD introduced the concept of &lt;a href=&#34;https://en.wikipedia.org/wiki/AMD_Accelerated_Processing_Unit&#34;&gt;APU-s back in 2011&lt;/a&gt;.
In its current iteration in the form of AMD Ryzen 5000 series APU-s, they provide
a compelling package, combining powerful CPU cores with a decent GPU that&amp;rsquo;s perfectly
capable of many tasks, including low-spec gaming.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve &lt;a href=&#34;https://ounapuu.ee/posts/2021/11/03/tech-rants-1/&#34;&gt;previously covered what I think about the state of computer hardware and the resource
usage associated with it&lt;/a&gt;. It&amp;rsquo;s possible that
we&amp;rsquo;re simply in a time in history where resource abundance allows us to push the
limit of what computer hardware is capable of without thinking much about the
cost. At some point we do need to address that issue, and I think APU-s will
play a role in it.&lt;/p&gt;
&lt;p&gt;We already have examples of what APU-like chips can be capable of in the form of
the last two console generations. To get an idea about the power usage numbers,
check out the &lt;a href=&#34;https://www.playstation.com/en-gb/legal/ecodesign/&#34;&gt;power usage statistics shared by Sony for the PS4 and PS5&lt;/a&gt;.
The power usage of the PS5 is still almost 200 W under load, which isn&amp;rsquo;t that great,
but that&amp;rsquo;s likely due to the high performance goals set for the console itself.
You&amp;rsquo;d have to give up some image quality or performance for a more efficient setup,
which is something the marketing department isn&amp;rsquo;t probably very happy about, given
that they&amp;rsquo;re in direct competition with Microsoft with their newest XBOX lineup
that is also pushing the limits of the custom APU inside it.&lt;/p&gt;
&lt;p&gt;The integrated GPU solutions that AMD and Intel have put out are becoming more
and more capable. Even an AMD Ryzen 3 2200G from 2018 with its measly 4 cores
and a Vega 8 GPU is still capable enough to run GTA V at 1080p with low-medium
settings smoothly (60 FPS or more). You do have to make a conscious trade-off
in image quality and performance when relying on APU-s, but if you&amp;rsquo;re willing
to make that trade-off, you can get a decent gaming experience.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://store.steampowered.com/steamdeck/&#34;&gt;Even the Steam Deck is shipping with a custom AMD APU.&lt;/a&gt;
What makes this one different from AMD-s previous APU-s is the inclusion of a
modern GPU core based on the RDNA 2 architecture, which should be a big jump
from the relatively old Vega-based GPU-s that desktop APU-s have shipped with.&lt;/p&gt;
&lt;p&gt;If it weren&amp;rsquo;t for the progress in gaming tech, such as high refresh rate monitors
and ever-increasing system requirements for newer games, APU-s would be a good
default choice for casual gamers, negating the need to get a huge box that you
have to somehow also fit on your desk.&lt;/p&gt;
&lt;p&gt;I have run on an APU-based setup and was happy with the experience, unfortunately
an APU-based machine just doesn&amp;rsquo;t cut it for virtual reality workloads, yet.&lt;/p&gt;
&lt;h3 id=&#34;comparison-to-tinyminimicro-pc-s&#34;&gt;Comparison to TinyMiniMicro PC-s&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://www.servethehome.com/introducing-project-tinyminimicro-home-lab-revolution/&#34;&gt;ServeTheHome&amp;rsquo;s TinyMiniMicro series&lt;/a&gt;
gives a good overview of the options available for someone who wants a very small
1 liter PC to do all their work on. Since these machines are also very small,
power-efficient and yet still quite powerful, I think a comparison between the
two is a reasonable one.&lt;/p&gt;
&lt;p&gt;One area where the TinyMiniMicro PC-s win is an obvious one: the size. They are
about half the size of the DeskMini X300: 1 liter vs 1.92 liters.&lt;/p&gt;
&lt;p&gt;TinyMiniMicro PC-s are also abundant on the used market with various configurations.
In most cases, the storage and RAM are upgradeable, and with some older models
you&amp;rsquo;ll find that the CPU is also socketed. Depending on your market, this means
that you may be able to get a whole PC for cheaper than the DeskMini + the rest
of the components (CPU, RAM, storage, Wi-Fi etc.).&lt;/p&gt;
&lt;p&gt;The size and cost benefits do come with some compromises that are not acceptable
for my use case. At 1 liter, the only option you have is to include a blower
type cooler in your PC. This type of cooler is similar to the ones found in
laptops and has in my experience resulted in a lot of annoying noise under heavy
load.&lt;/p&gt;
&lt;p&gt;The UEFI settings on these machines may also be quite limited. Sure, if you just
need the basics, these will be fine, but if you want to configure the fan
behaviour, you might find yourself unable to do so. On the DeskMini, you can
setup the CPU fan to run just the way you like it. In my case, the fan only
turns on when the system is under load, the fan is completely stopped while the
machine is idle.&lt;/p&gt;
&lt;p&gt;The DeskMini also allows you to change out the CPU cooler with anything that&amp;rsquo;s
AM4 socket compatible. The case of course sets some limits to that,
&lt;a href=&#34;https://www.reddit.com/r/Amd/comments/enw3up/a3003400g_w_ml120_aio_mod/&#34;&gt;unless you&amp;rsquo;re a madlad who doesn&amp;rsquo;t let boundaries bother them.&lt;/a&gt;
With the &lt;a href=&#34;https://noctua.at/en/nh-l9a-am4&#34;&gt;Noctua NH-L9a AM4&lt;/a&gt;, the setup is very
quiet, especially once you limit the CPU TDP and adjust the fan curve. In my
experience, the &amp;ldquo;coil whine&amp;rdquo; noise that the system produces under load is more
audible than the CPU fan itself.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/2-cooler-installed.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/2-cooler-installed_huc564bfc6f4f07287fe4ac136bcb1cebd_3893150_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Low profile Noctua cooler: looks good, is quiet and keeps the system cool.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Low profile Noctua cooler: looks good, is quiet and keeps the system cool.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;When it comes to storage options, the DeskMini is an obvious winner. In modern
TinyMiniMicro machines that I&amp;rsquo;ve seen, you can at most install two NVMe SSD-s.
This is a step up from older machines and you can still do a lot with that, but
the DeskMini trumps that with the addition of two SATA ports, which allows you
to go crazy with the storage configuration.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/4-bulk-storage.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/4-bulk-storage_hu7ae6735f279327a3fa823d64ff63ce89_3660630_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;8TB of solid state storage. Bonkers.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      8TB of solid state storage. Bonkers.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Both the DeskMini and TinyMiniMicro-series PC-s are fantastic, but for my use
case the DeskMini X300 was the obvious choice.&lt;/p&gt;
&lt;h3 id=&#34;tech-tip-vesa-mounts-for-what&#34;&gt;Tech tip: VESA mounts, for what?&lt;/h3&gt;
&lt;p&gt;The DeskMini X300 is so light and small that you can easily attach it to a
monitor arm using a piece of foam and long velcro strips.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/6-custommount.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/6-custommount_hu20d6b7f16ac0f9c82a32d7b5ae9ab5be_3281486_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;DeskMini X300 mounted on a monitor arm.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      DeskMini X300 mounted on a monitor arm.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/7-custommount.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/17/asrock-x300-future-of-desktops/media/7-custommount_hu530b70e8a27e4013658c55c6eb01a628_3256295_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Behind the scenes.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Behind the scenes.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;future-plans&#34;&gt;Future plans&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m hoping that the current DeskMini-based server configuration is the one that
will last me a while. The obvious upgrades in the future would be to max out the
RAM at 64 GB and upgrade the NVMe and SATA storage to whatever options are
available in the future. I&amp;rsquo;m not expecting the DeskMini X300 to get a CPU
upgrade, which isn&amp;rsquo;t too tragic, given that the Ryzen 7 5700G has 8 fast cores.&lt;/p&gt;
&lt;p&gt;My adventures in low power computing may take me to another setup in the future.
Until then, I&amp;rsquo;ll see how the DeskMini does. So far, it has met my expectations
in performance, power usage, reliability and noise.&lt;/p&gt;
&lt;h3 id=&#34;future-of-desktop-computing&#34;&gt;Future of desktop computing?&lt;/h3&gt;
&lt;p&gt;Predictions are difficult to make, especially in turbulent times that we&amp;rsquo;ve
found ourselves in. I do hope that this form factor takes off and that we
reevaluate our current computing workloads to be more suitable for machines
that use a lot less power.&lt;/p&gt;
&lt;p&gt;Constraints often result in clever tricks and fantastic end results. Hopefully
we&amp;rsquo;ll see something similar in the future.&lt;/p&gt;
&lt;p&gt;To get an idea of what you can achieve with very limited hardware, check out
the &lt;a href=&#34;https://www.youtube.com/c/CodingSecrets&#34;&gt;Coding Secrets YouTube channel&lt;/a&gt;
that showcases all the tricks and thinking behind some of the most impressive
effects on game consoles from early 90&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;Sure, you can argue that not having to think about such limitations can help
create solutions faster and that definitely has some value, but at some point
we need to start optimizing. Computing resources are cheap right up to the point
where every app on your PC thinks the same way.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Why I went back to using a ThinkPad from 2012</title>
      <link>https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/</link>
      <pubDate>Sun, 09 Jan 2022 11:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;&lt;em&gt;This post is inspired by &lt;a href=&#34;https://solar.lowtechmagazine.com/2020/12/how-and-why-i-stopped-buying-new-laptops.html&#34;&gt;this article from the Low-tech Magazine&lt;/a&gt;.
I highly recommend giving that a read as well!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Over my lifetime, I&amp;rsquo;ve used a bunch of different computers, mainly due to new
ideas and requirements popping into my mind every time I&amp;rsquo;m content with my
current setup. One of my last changes might be a bit of a headscratcher for some.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/media/t430.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/media/t430_hud530b6edc691ac92b9dd06689e5299a0_2545748_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;ThinkPad T430 in all its glory.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      ThinkPad T430 in all its glory.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;
&lt;p&gt;At my current place of employment, I&amp;rsquo;ve had the opportunity to try out recently
released laptops from Lenovo and Dell, with the goal of evaluating them for
software development workloads and pick a default option for new hires. My work
laptop at the time was the Lenovo ThinkPad T480 with some decent specs and an
NVIDIA GeForce MX 150 GPU that was weak and throttled itself whenever it hit 70
degrees Celsius in Windows 10, making it absolutely useless.&lt;/p&gt;
&lt;p&gt;I tried out a fair number of makes and models: Lenovo ThinkPad P14/T14 (gen 1
and 2) in both Intel 11th gen and AMD Ryzen 4000/5000 series configurations, plus
some Dell Latitudes with Intel 11th gen CPU-s as well. And the result? A lot of
disappointment.&lt;/p&gt;
&lt;p&gt;The non-exhaustive list of issues I ran into with these machines on Fedora
Linux 34:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The touchpad would sometimes randomly not work on one of the ThinkPads.&lt;/li&gt;
&lt;li&gt;On AMD models, performance was less than stellar for my workloads and not a
significant jump over a laptop from 2018.&lt;/li&gt;
&lt;li&gt;The Intel CPU-s had throttling issues that made them unusable for basic
things like calls over Google Meet as they would throttle to 400 MHz.&lt;/li&gt;
&lt;li&gt;On one of the Dell machines, it was very easy to overheat the SSD, which lead
to the CPU throttling to 400 MHz. Yes, the SSD caused the CPU to throttle.&lt;/li&gt;
&lt;li&gt;Wi-Fi/Bluetooth would not work on one of the laptops, even when I was using an
up-to-date Linux distro. Likely related to the type of adapter used (not Intel).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once that experiment was done, we settled on the least crappy version of the
ThinkPads that had an AMD Ryzen CPU, at least those didn&amp;rsquo;t sound like jet
engines under load and didn&amp;rsquo;t have insane throttling issues.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not all that bad, though. I was now committed to using my current ThinkPad
T480 for as long as possible. It, too, had a rough start, but at least all the
issues it came with have been ironed out over time.&lt;/p&gt;
&lt;h3 id=&#34;hopping-between-machines&#34;&gt;Hopping between machines&lt;/h3&gt;
&lt;p&gt;At this point in time, I had three machines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;desktop PC (for work and personal stuff)&lt;/li&gt;
&lt;li&gt;work laptop (for work stuff only)&lt;/li&gt;
&lt;li&gt;personal laptop (for personal stuff, of course)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I could not rely on the work laptop for personal use as it has limited storage
options. Call me a freak, but I feel very uneasy running on a single SSD, even
if my data is backed up to my NAS and on external backup drives. With my &lt;a href=&#34;https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/&#34;&gt;desktop
PC use case affecting other workloads as well&lt;/a&gt;, I
had to come up with a solution.&lt;/p&gt;
&lt;p&gt;Syncing data between machines was not the issue here. &lt;a href=&#34;https://syncthing.net/&#34;&gt;Syncthing&lt;/a&gt;
is an absolute open-source gem and had no issues with things like
&lt;code&gt;node_modules&lt;/code&gt; folders. The main issue was the fact that I didn&amp;rsquo;t want to carry
two laptops around or buy an extra USB-C dock for use at home.&lt;/p&gt;
&lt;p&gt;I took the risk and jumped back to the ThinkPad T430 for both my personal and
work use cases.&lt;/p&gt;
&lt;h3 id=&#34;thinkpad-t430-the-history&#34;&gt;ThinkPad T430: the history&lt;/h3&gt;
&lt;p&gt;My ThinkPad T430 has a rich history. I got it in 2016 to replace my aging
ThinkPad T60. Getting this laptop felt similar to that time a desktop PC that ran
Windows 98 got replaced with a dual-core &amp;ldquo;beast&amp;rdquo; in 2006.&lt;/p&gt;
&lt;p&gt;In 2006, my webpage load times went from 30 seconds to a second. Getting
Android app build times from 60 seconds to around 10 seconds on the T430 felt
the same.&lt;/p&gt;
&lt;p&gt;This ThinkPad T430 has survived all the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A bicycle crash while it was in a backpack. The latch mechanism broke and
there are a couple of cracks in the palm rest, but the rest is working fine.&lt;/li&gt;
&lt;li&gt;A coffee spill, which luckily only discoloured the casing of two USB 3.0 ports.&lt;/li&gt;
&lt;li&gt;Liquid metal experiments, had some pretty close calls there with my dumb ass
almost shorting the system out.&lt;/li&gt;
&lt;li&gt;Use as a budget low-power server machine for a bit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;5 years later, it&amp;rsquo;s back in my possession again after a short stint at a family
members&amp;rsquo; hands.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s more to this than simply a rich history, though.&lt;/p&gt;
&lt;h3 id=&#34;the-modifications&#34;&gt;The modifications&lt;/h3&gt;
&lt;p&gt;Over the years, I&amp;rsquo;ve been inspired by whatever modifications people over at
&lt;a href=&#34;https://www.reddit.com/r/thinkpad/&#34;&gt;/r/thinkpad&lt;/a&gt; have come up with. If you
want a short summary, you can check out
&lt;a href=&#34;https://medium.com/@n4ru/the-definitive-t430-modding-guide-3dff3f6a8e2e&#34;&gt;the definitive T430 modding guide&lt;/a&gt;
to get some inspiration.&lt;/p&gt;
&lt;p&gt;To make this machine viable in 2021, you need the CPU, RAM and SSD upgrades at
the very minimum.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the list of upgrades I&amp;rsquo;ve done:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU upgrade to a quad-core Intel i7-3820QM (45W TDP).&lt;/li&gt;
&lt;li&gt;RAM upgrade to 16 GB DDR3 memory.&lt;/li&gt;
&lt;li&gt;Storage: 250GB mSATA for OS, 2x 1TB SATA SSD-s for data, made possible with a
HDD caddy that replaces the optical drive.&lt;/li&gt;
&lt;li&gt;New third party 9-cell battery. I&amp;rsquo;ve had mixed experiences with these, but
the one I have now seems to be good enough.&lt;/li&gt;
&lt;li&gt;Replaced the heatsink and fan assembly with one that has a Delta fan
(FRU 04W3270). It&amp;rsquo;s quieter and doesn&amp;rsquo;t have the high-pitched whine that the
Toshiba fan exhibits.&lt;/li&gt;
&lt;li&gt;At one point, I ran an external GPU off of the ExpressCard34 slot.&lt;/li&gt;
&lt;li&gt;Installed &lt;a href=&#34;https://github.com/n4ru/1vyrain&#34;&gt;1vyrain&lt;/a&gt; to get rid of annoying
limitations, such as the Wi-Fi whitelist.&lt;/li&gt;
&lt;li&gt;Upgraded the Wi-Fi card to Intel Wireless-AC 7260.&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/media/fandesign.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/media/fandesign_hu5dde966a7bea1be801ce694010a67d27_4434774_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Delta fan (top) vs the annoyingly loud Toshiba fan (bottom).&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Delta fan (top) vs the annoyingly loud Toshiba fan (bottom).
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;There are some things I&amp;rsquo;d like to eventually tinker with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replace the display with a compatible 1600x900 panel that has better image
quality. The current screen is awful.&lt;/li&gt;
&lt;li&gt;Do something fun with the ExpressCard34 slot. There&amp;rsquo;s the &lt;a href=&#34;https://thinkmods.store/collections/all-mods-1/products/expresscard-to-nvme-adapter&#34;&gt;thinkmods.store
ExpressCard34 SSD adapter&lt;/a&gt;,
but I haven&amp;rsquo;t seen that released yet.&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/media/egpu.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2022/01/09/why-i-went-back-to-using-a-thinkpad-from-2012/media/egpu_huc5761fb6925c648f3a2825a4ee5151d1_3200508_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;eGPU setup that I used to run back in 2017 with surprisingly good results.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      eGPU setup that I used to run back in 2017 with surprisingly good results.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;With these modifications, it feels like an usable laptop again.&lt;/p&gt;
&lt;h3 id=&#34;but-why&#34;&gt;But why?&lt;/h3&gt;
&lt;p&gt;The reasons why I went back to the T430 are quite simple.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build quality: it has survived a nasty fall, and it will probably survive the
next ones as well.&lt;/li&gt;
&lt;li&gt;CPU performance is roughly on par with the T480 under sustained load.&lt;/li&gt;
&lt;li&gt;No dedicated GPU that takes up valuable space and power.&lt;/li&gt;
&lt;li&gt;Battery life with the 9-cell battery is on par or even better in real
world use scenarios, compared to the T480.&lt;/li&gt;
&lt;li&gt;Ridiculous storage configurations: dual-boot, triple-boot, RAID1 setups,
16+TB of solid-state storage, it&amp;rsquo;s all possible on this old laptop!&lt;/li&gt;
&lt;li&gt;Decent selection of ports, including VGA and gigabit ethernet.&lt;/li&gt;
&lt;li&gt;Docking stations can be dirt cheap and be bought for less than 10 EUR (used).&lt;/li&gt;
&lt;li&gt;I have plenty of Lenovo barrel plug chargers, but only one USB-C Lenovo
charger. I really didn&amp;rsquo;t want to buy more chargers when I have plenty of
perfectly working ones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are some downsides, though:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No HDMI, I&amp;rsquo;d need a mini-Displayport to HDMI dongle for that to work.&lt;/li&gt;
&lt;li&gt;No USB-C, which might be an issue if your environment at work is optimized
for that.&lt;/li&gt;
&lt;li&gt;It runs hot, but doesn&amp;rsquo;t have the same level of on-chip thermal protections
that the T480 has, resulting in &lt;a href=&#34;https://github.com/Hermanio/linux-cpu-manager&#34;&gt;this awful piece of software I wrote back in 2018.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s nothing compared to the unreliability I&amp;rsquo;ve experienced with the T480.
I&amp;rsquo;ve witnessed the keyboard dying once and the motherboard being replaced twice,
once due to charging related issues, and the other time due to random system
crashes and screen glitching.&lt;/p&gt;
&lt;h3 id=&#34;verdict&#34;&gt;Verdict&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve been using this setup for over a month now, and it has been surprisingly
adequate. Yes, opening Java projects in IntelliJ will make things slow, and to
record my desktop with OBS and acceptable performance, I had to drop my screen
resolution to 720p. I can&amp;rsquo;t expect everything to work super well on this
machine, but for a computer that&amp;rsquo;s released almost 10 years ago, it&amp;rsquo;s still
holding up well.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to thank Intel here for making this possible. The CPU innovation
stagnation between 2012-2017 has resulted in 4 cores still being an acceptable
low-end CPU in early 2022. Without this, my laptop would likely be obsolete by
now.&lt;/p&gt;
&lt;h4 id=&#34;2022-01-12-update&#34;&gt;2022-01-12 update&lt;/h4&gt;
&lt;p&gt;This post got a lot of feedback and comments on HackerNews with people sharing
their experiences, feel free to check it out and &lt;a href=&#34;https://news.ycombinator.com/item?id=29871693&#34;&gt;join the discussion!&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;2022-09-01-update&#34;&gt;2022-09-01 update&lt;/h4&gt;
&lt;p&gt;This post was translated into German and featured on golem.de,
&lt;a href=&#34;https://www.golem.de/news/notebook-warum-ich-jetzt-wieder-ein-thinkpad-von-2012-nutze-2209-166195.html&#34;&gt;check it out!&lt;/a&gt;&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>VR, VFIO and how latency ruined everything</title>
      <link>https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/</link>
      <pubDate>Wed, 29 Dec 2021 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I&amp;rsquo;ve been running my &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/&#34;&gt;&lt;em&gt;all-in-one&lt;/em&gt;&lt;/a&gt;
PC for a while now. It was my desktop, my NAS and my gaming PC.
However, during the next couple of months I kept hitting small bumps along the
road. Most of these were quite straightforward to fix, but there is one that
finally convinced me to go back to a simpler setup.&lt;/p&gt;
&lt;h3 id=&#34;iscsi&#34;&gt;iSCSI&lt;/h3&gt;
&lt;p&gt;As mentioned in &lt;a href=&#34;https://ounapuu.ee/posts/2021/10/13/diy-cloud-gaming-nvidia-moonlight/&#34;&gt;one of my previous posts&lt;/a&gt;,
I had set up the storage on my gaming VM over iSCSI. If you don&amp;rsquo;t know what
iSCSI is: think of it like a hard drive that you can hook up to your machine
over the network. This setup had a couple of benefits: the amount allocated to
the VM was flexible and I would always have a snapshot of my game data in case
the Windows VM decided to nuke itself.&lt;/p&gt;
&lt;p&gt;What I didn&amp;rsquo;t take into account was the configuration. &lt;code&gt;tgt&lt;/code&gt; allows you to
define the IP address of the client machine, which can be seen as an additional
layer of security. My gaming VM has two virtual NIC-s, one pointing to the
actual physical network, and another one to a virtual one. This resulted in the
iSCSI connection being flaky on startup: the disk was not present in the VM on
first boot, but was there after a reboot.&lt;/p&gt;
&lt;p&gt;This issue was gone once I removed this restriction from the iSCSI target
configuration on the Linux VM. My best guess is that the iSCSI stack in Windows
might have tried to initiate a connection over the wrong NIC, depending on
whichever one was brought up first.&lt;/p&gt;
&lt;p&gt;After &amp;ldquo;solving&amp;rdquo; this issue, it had been smooth sailing.&lt;/p&gt;
&lt;h3 id=&#34;gpu-audio-issues&#34;&gt;GPU audio issues&lt;/h3&gt;
&lt;p&gt;When the Windows VM had been on for a while, the HDMI audio output would start
to glitch out after a while, with the audio sounding slow, robotic and garbled.
After doing some research, I found some resources that mentioned enabling MSI
interrupts in Windows. The guide for this can be found over at
&lt;a href=&#34;https://forums.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts-msi-tool.378044/&#34;&gt;Guru3D forums&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After tweaking the Windows registry settings and reminding myself that I do have
snapshots to fall back to in case I mess up, I got the issue fixed.&lt;/p&gt;
&lt;h3 id=&#34;gpu-driver-issues&#34;&gt;GPU driver issues&lt;/h3&gt;
&lt;p&gt;Whenever there&amp;rsquo;s a new big and popular game released, NVIDIA usually releases
an updated version of their GPU drivers. I try to keep my software up to date,
so I usually install these updates when they come out. Just one problem: when I
upgrade the GPU drivers in the VM, the screen will stay black. After some time
passes, I have to force a reboot using &lt;code&gt;virt-manager&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I have not looked into this issue yet as it only happens during driver updates,
but it&amp;rsquo;s definitely an annoying thing to have.&lt;/p&gt;
&lt;h3 id=&#34;uefi-and-csm&#34;&gt;UEFI and CSM&lt;/h3&gt;
&lt;p&gt;UEFI updates have a bad habit of resetting all the custom settings that you
have made, and at least with the motherboards I have used, the settings cannot
be restored if the backed up settings are from an older UEFI version. This
means that I have to navigate the UEFI quite often to configure all the
settings that I need to have in place for VFIO to work.&lt;/p&gt;
&lt;p&gt;There is one setting that I didn&amp;rsquo;t expect to cause that much trouble though:
CSM support. CSM (compatibity support module) is generally enabled by default
and allows you to boot off of legacy operating systems if needed. I don&amp;rsquo;t have
that requirement, so I went ahead and set my boot options to boot in UEFI mode
only.&lt;/p&gt;
&lt;p&gt;Reboot, start up Fedora, and boom, anything VFIO related is spewing errors like
crazy.&lt;/p&gt;
&lt;p&gt;Turns out that enabling UEFI only mode in UEFI settings somehow grabs the GPU
and causes problems when you try to then pass the GPU to a VM. While in this
mode, I noticed that the GPU was also shown in a separate menu in UEFI settings.
Enabling CSM support fixed this issue for me.&lt;/p&gt;
&lt;h3 id=&#34;vr-and-usb-issues&#34;&gt;VR and USB issues&lt;/h3&gt;
&lt;p&gt;With the situation in the world being less than optimal, I decided to spice up
my gaming setup with the addition of a &lt;a href=&#34;https://www.vive.com/us/product/vive-cosmos/features/&#34;&gt;HTC Vive Cosmos&lt;/a&gt;
in case in-door activities become much more popular suddenly.&lt;/p&gt;
&lt;p&gt;First issue: I can&amp;rsquo;t get the damn thing working. My gaming VM setup has the
&lt;a href=&#34;https://www.inateck.com/products/inateck-kt4006-dual-port-usb-3-0-pci-express-card-20-pin-connector-no-power-connection&#34;&gt;inateck KT4006&lt;/a&gt;
passed through so that I can plug peripherals to the PC and make them available
to the gaming VM with ease. After plugging everything in according to
instructions and turning the link box on, I&amp;rsquo;m met with a barrage of USB
connected-disconnected sound effects. 6 or 7 cycles later the sound stops, and
with that do the rest of my USB devices.&lt;/p&gt;
&lt;p&gt;I took the USB 3.0 card and tried it in an older machine that doesn&amp;rsquo;t have a
fancy VFIO setup on it. Same issue. However, when connected to an USB 2.0 port,
the setup shows a warning in VIVE Console, but at least it works! Since my PC
literally has no USB 2.0 ports, I had to get a bit creative and plug an USB 2.0
extension cable between the PC and the USB 3.0 cable coming from the link box.&lt;/p&gt;
&lt;p&gt;With the help of my friend I got confirmation that the issue is indeed with my
USB ports. I also ordered a different USB PCIe card from inateck, this time the
&lt;a href=&#34;https://www.inateck.com/products/pci-e-to-usb-3-0-4-ports-pci-express-card-and-15-pin-power-connector-red-kt4001&#34;&gt;inateck KTU3FR-4P&lt;/a&gt;.
I made the assumption that since &lt;a href=&#34;https://www.vive.com/eu/support/vive/category_howto/headset-not-detected-due-to-usb-issue.html&#34;&gt;the VIVE support page also recommends an inateck card&lt;/a&gt;,
then they must be fit for purpose.&lt;/p&gt;
&lt;p&gt;Nope. The second card apparently has the same chipset and the same issue.&lt;/p&gt;
&lt;p&gt;What did end up working was a random VIA USB 3.0 PCIe card, which shows up as
&lt;code&gt;VIA Technologies, Inc. VL805/806 xHCI USB 3.0 Controller&lt;/code&gt; on my machine. Just
one issue: it has PCIe device reset issues. If I shut down the Windows VM and
start it up again, I would sometimes get a bunch of &lt;code&gt;IO_PAGE_FAULT&lt;/code&gt; errors in
my kernel logs. No worries, guess I&amp;rsquo;ll just avoid rebooting a notoriously
reboot-happy OS.&lt;/p&gt;
&lt;h3 id=&#34;latency-the-straw-that-broke-the-camels-back&#34;&gt;Latency: the straw that broke the camel&amp;rsquo;s back&lt;/h3&gt;
&lt;p&gt;If there&amp;rsquo;s one thing you don&amp;rsquo;t want to see in a VR gaming setup, it&amp;rsquo;s latency.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve covered &lt;a href=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/&#34;&gt;the tweaks I&amp;rsquo;ve made to my setup in a previous post&lt;/a&gt;.
Turns out that those might not be enough. The &lt;a href=&#34;https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Example_with_systemd&#34;&gt;CPU isolation using systemd&lt;/a&gt;
works well in general, but not with kernel threads.&lt;/p&gt;
&lt;p&gt;Whenever I did something IO heavy on an NVMe-based btrfs file system, it would
introduce stutter to the gaming VM. Running a scrub operation on the filesystem
was enough to put a huge load on the CPU, likely due to the raw speed that the
NVMe SSD-s can provide. This results in the gaming VM experiencing stutter
that ruins the whole experience.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an illustration.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/media/normalusage.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/media/normalusage_hu0d1a3f1b9e5821f2d317dac249ce5abd_4160386_1280x800_fit_q75_box.jpg&#34;
             width=&#34;956&#34;
             height=&#34;800&#34;
             alt=&#34;SteamVR performance statistics with a light load on the host system.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      SteamVR performance statistics with a light load on the host system.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/media/latencyhell.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/media/latencyhell_hud5d2a7064b86a26b3d90bce048550e7e_4655599_1280x800_fit_q75_box.jpg&#34;
             width=&#34;927&#34;
             height=&#34;800&#34;
             alt=&#34;The purple spikes mean that you are having a real bad time right now.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The purple spikes mean that you are having a real bad time right now.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/media/latencynative.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/12/29/vr-vfio-latency/media/latencynative_hudff90fb0614b4aa8f886f9b2c7bac89c_6602296_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;For comparison: VR performance running natively on Windows 10.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      For comparison: VR performance running natively on Windows 10.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Similar issues could be observed whenever I tried to run another VM that
shares the same cores.&lt;/p&gt;
&lt;p&gt;I looked into alternative solutions as well, and it does seem to be possible
to also isolate those CPU cores from the kernel. They will probably work to
some extent, but implementing them feels a bit hacky at the moment. I&amp;rsquo;m hoping
that in the future these kinds of tweaks will be exposed as a simple checkbox
in &lt;code&gt;virt-manager&lt;/code&gt; itself.&lt;/p&gt;
&lt;p&gt;At that point I had enough. If I&amp;rsquo;m not going to be able to use the machine for
other purposes at the same time without experiencing all these issues and
having to work around them, then I&amp;rsquo;ll just go back to a simpler setup. I&amp;rsquo;ll lose
some of the benefits, but at least I don&amp;rsquo;t have to spend time debugging all
these issues.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;VFIO and virtualization are still interesting topics to learn about and try
out, but for my use case they are just too limiting. I&amp;rsquo;d imagine that an use
case that didn&amp;rsquo;t have such strict latency requirements would still be able to
run just fine, unfortunately gaming just isn&amp;rsquo;t one of them.&lt;/p&gt;
&lt;p&gt;This experience has been quite fun in general, but I&amp;rsquo;m calling quits, at least
for now. The one machine that does it all turned out to be a jack of all
trades, master of none.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Self-hosting Wikipedia using Kiwix</title>
      <link>https://ounapuu.ee/posts/2021/12/09/self-hosting-wikipedia/</link>
      <pubDate>Thu, 09 Dec 2021 06:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/12/09/self-hosting-wikipedia/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Do you have a need to host Wikipedia on your computer?&lt;/p&gt;
&lt;p&gt;Or a StackExchange site, like &lt;a href=&#34;https://superuser.com/&#34;&gt;Super User&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s easier than you think!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/12/09/self-hosting-wikipedia/media/image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/12/09/self-hosting-wikipedia/media/image_hua3092edb542f6844da21c5ee5981e60b_59883_1280x800_fit_q75_box.jpg&#34;
             width=&#34;920&#34;
             height=&#34;518&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;h3 id=&#34;step-1-download-stuff&#34;&gt;Step 1: download stuff!&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&#34;https://www.kiwix.org/en/&#34;&gt;Kiwix project&lt;/a&gt; provides ZIM files for many popular websites, including Wikipedia.
These files can be downloaded &lt;a href=&#34;https://wiki.kiwix.org/wiki/Content_in_all_languages&#34;&gt;over at Kiwix wiki.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Take a look at the content packages available and download those that you are interested in.&lt;/p&gt;
&lt;h3 id=&#34;step-2-install-kiwix&#34;&gt;Step 2: install Kiwix&lt;/h3&gt;
&lt;p&gt;Kiwix provides &lt;a href=&#34;https://www.kiwix.org/en/download/&#34;&gt;all sorts of clients for different operating systems&lt;/a&gt;. If you don&amp;rsquo;t
want to go crazy with setting up a server and you just want to browser your offline copy of Wikipedia or any other
resource, then go ahead and use that.&lt;/p&gt;
&lt;p&gt;However, if you want to make the resources available for other people as well, then you need to install &lt;code&gt;kiwix-serve&lt;/code&gt;.
On Debian and Ubuntu systems, this is just a &lt;code&gt;sudo apt install kiwix-tools&lt;/code&gt; in your terminal.&lt;/p&gt;
&lt;p&gt;Once you have it installed, all you have to do is to run &lt;code&gt;kiwix-serve -p 8080 your-file-here.zim&lt;/code&gt; and your content
package is served to anyone who can connect to your machine with a browser over port 8080.&lt;/p&gt;
&lt;p&gt;If you have multiple ZIM files in the same folder, then you can serve all of them at once with something like
&lt;code&gt;kiwix-serve -p 8080 *.zim&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;step-3-enjoy&#34;&gt;Step 3: enjoy!&lt;/h3&gt;
&lt;p&gt;You should now be up and running with your very own hosted Wikipedia instance!
Just keep in mind that your copy might not be 100% up to date. The Kiwix project does repackage these sites quite
regularly so keep an eye out for updates.&lt;/p&gt;
&lt;h3 id=&#34;tips-and-tricks&#34;&gt;Tips and tricks&lt;/h3&gt;
&lt;p&gt;I have set up my own Kiwix instance and the way it works is quite simple.&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&#34;https://deluge-torrent.org/&#34;&gt;Deluge&lt;/a&gt; to download and seed the content packs that I have downloaded.&lt;/p&gt;
&lt;p&gt;Then I have also set up a &lt;code&gt;systemd&lt;/code&gt; service that automatically starts Kiwix on boot. It is located at
&lt;code&gt;/etc/systemd/system/kiwix-serve.service&lt;/code&gt; and looks like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Unit]
Description=Serve all the ZIM files loaded on this server

[Service]
Restart=always
RestartSec=15
User=kiwix
ExecStart=/usr/bin/bash -c &amp;#34;/usr/bin/kiwix-serve -p 8080 /path/to/your/files/*.zim&amp;#34;

[Install]
WantedBy=network-online.target
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note that I have set up a separate non-interactive user for this purpose. The path to the ZIM files simply refers to
the download folder of the Deluge torrent client.&lt;/p&gt;
&lt;p&gt;Making this available to the world is simply a matter of either exposing the selected port to the world, or using &lt;code&gt;nginx&lt;/code&gt;
as a reverse proxy. There are plenty of guides available on how to achieve the latter so I won&amp;rsquo;t go into detail about
that here.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it!&lt;/p&gt;
&lt;h3 id=&#34;2024-09-05-update&#34;&gt;2024-09-05 update&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s been a fun experiment, but LLM-bots are overwhelming my Kiwix instance and I can&amp;rsquo;t be bothered with setting up
any protections right now, so the &lt;code&gt;kiwix.ounapuu.ee&lt;/code&gt; instance is shut down for now.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Tech rants: PC-s use way too much power in 2021</title>
      <link>https://ounapuu.ee/posts/2021/11/03/tech-rants-1/</link>
      <pubDate>Wed, 03 Nov 2021 07:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/11/03/tech-rants-1/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Welcome to 2021. We have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;supply chain issues&lt;/li&gt;
&lt;li&gt;no reasonably priced GPU-s&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.anandtech.com/show/16495/intel-rocket-lake-14nm-review-11900k-11700k-11600k/5&#34;&gt;consumer-grade CPU-s with peak power consumption at 296W&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.notebookcheck.net/The-NVIDIA-GeForce-RTX-3090-may-have-a-350-W-TDP-but-it-can-consume-nearly-60-more.494757.0.html&#34;&gt;GPU-s that consume 350-400W of power under normal use&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/11/03/tech-rants-1/media/intel-fieri.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/11/03/tech-rants-1/media/intel-fieri_hu7de7ca6095aaa284a9964ab7bf522246_98503_1280x800_fit_q75_box.jpg&#34;
             width=&#34;507&#34;
             height=&#34;676&#34;
             alt=&#34;Accurate representation of CPU-s in 2021.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Accurate representation of CPU-s in 2021.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;At the same time, we have made great leaps in CPU/GPU architectures and chip manufacturing technologies, which &lt;em&gt;should&lt;/em&gt;
result in faster and more efficient devices, right?&lt;/p&gt;
&lt;p&gt;Well, yes. However, with some fierce competition between &lt;em&gt;AMD vs Intel&lt;/em&gt;
and &lt;em&gt;AMD vs NVIDIA&lt;/em&gt; all reason is thrown out the window and the power limits are raised in order to preserve the
performance crown. In the end, all that matters is &amp;ldquo;but &lt;em&gt;my&lt;/em&gt; CPU is 5% faster in this benchmark!&amp;rdquo; or &amp;ldquo;Oh yeah Intel has
the performance crown even if it took 290W to get there&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;This all sounds absurd during a time when it&amp;rsquo;s clear that energy usage is becoming a big problem in the near future.
Using up more power daily also makes it more difficult to rely on renewable (not necessarily green!) energy sources due
to the simple fact that building more capacity is more expensive.&lt;/p&gt;
&lt;h3 id=&#34;all-that-power-but-at-what-cost&#34;&gt;All that power, but at what cost?&lt;/h3&gt;
&lt;p&gt;What is often missing from this conversation is that it&amp;rsquo;s not only the CPU or the GPU that uses up a lot of energy
while running.&lt;/p&gt;
&lt;p&gt;When you have a hungry chip in your system, you will likely need to get a bigger cooler in your system to dissipate all
that heat. Whoops, more raw materials (aluminium, copper) required.&lt;/p&gt;
&lt;p&gt;The GPU is so hot that the manufacturer had to put on a giant heatsink, multiple fans and made the whole darn thing
barely fit in your case. Same story.&lt;/p&gt;
&lt;p&gt;Something has to deliver all that power as well. And just like that, the required amount of electrical components
on the GPU board or the motherboard has just multiplied.&lt;/p&gt;
&lt;p&gt;The hot air gets stuck in your PC case? Sounds like someone is going to need to make an investment into some PC fans.&lt;/p&gt;
&lt;p&gt;And to finish it all off, you discover that your power supply cuts out during high loads, because 800W power peaks are
acceptable now I guess. Time to go to your local PC parts store to get a new power supply.&lt;/p&gt;
&lt;p&gt;You might look at your monthly electricity bill and not even notice the power required to run such a machine, but the
thing is that the real cost comes from everywhere else. That cost is not low.&lt;/p&gt;
&lt;h3 id=&#34;okay-you-convinced-me-now-what&#34;&gt;Okay, you convinced me, now what?&lt;/h3&gt;
&lt;p&gt;If you already have bought hardware that fits the above description, then there isn&amp;rsquo;t much to do other than limiting the
power usage. CPU-s and GPU-s generally follow this kind of rule:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/11/03/tech-rants-1/media/masterpiece.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/11/03/tech-rants-1/media/masterpiece_hudbe20136ce951fed0a43df83ce6db666_30136_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;Rough representation of the relationship between power usage and performance of a chip.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Rough representation of the relationship between power usage and performance of a chip.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;If you use Windows, then one example of making a positive change is to change the power limit of your GPU. For AMD
GPU-s, this is present in Radeon settings and is a simple percentage slider. For NVIDIA cards I usually opt for using
MSI Afterburner. While doing any changes, definitely have something like FurMark running in the background, that helps
measure performance and get readouts for your current power usage and the performance that you get out of it.&lt;/p&gt;
&lt;p&gt;A modest reduction of the power limit will likely yield a small drop in performance, but a much bigger drop
percentage-wise in the power consumption of the GPU.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/11/03/tech-rants-1/media/msi-afterburner.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/11/03/tech-rants-1/media/msi-afterburner_hu42faebf4a7df065161b64d80077784b5_137478_1280x800_fit_box_3.png&#34;
             width=&#34;568&#34;
             height=&#34;722&#34;
             alt=&#34;Power limit slider present in MSI Afterburner.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Power limit slider present in MSI Afterburner.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;For CPU-s, there are two types of options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;configure power limits in UEFI settings (depends on your CPU and motherboard manufacturer)&lt;/li&gt;
&lt;li&gt;limit the CPU power usage using tools available in the operating system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here are some examples of the knobs and tools that you can use to achieve this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AMD CPU-s and UEFI: &lt;code&gt;cTDP&lt;/code&gt; option in UEFI settings. Just set the TDP that you want to run the CPU at and you&amp;rsquo;re done!
Allows you to run your 105W TDP CPU at 35W, for example.&lt;/li&gt;
&lt;li&gt;AMD Precision Boost Overdrive (PBO) and UEFI. Sometimes the cTDP setting is not present, which means that you&amp;rsquo;ll have
to go to the overclock settings and input the correct parameters to set the same limit.&lt;/li&gt;
&lt;li&gt;AMD and Linux: &lt;code&gt;cpufreq&lt;/code&gt;. Honestly, not the best way to do it since the steps don&amp;rsquo;t seem to be that granular, but
it&amp;rsquo;s better than nothing.&lt;/li&gt;
&lt;li&gt;Intel and UEFI: supported CPU-s likely support similar techniques to AMD, but since I don&amp;rsquo;t have experience with
Intel, I cannot say what exactly you can change.&lt;/li&gt;
&lt;li&gt;Intel and Windows/Linux: disable turbo boost. Peak performance will definitely suffer, but you end up running your
CPU at the base clock, which is likely very close to the efficiency point of the cpu.
&lt;ul&gt;
&lt;li&gt;in Linux, use the &lt;code&gt;intel_pstate&lt;/code&gt; driver.&lt;/li&gt;
&lt;li&gt;in Windows, you can set the &amp;ldquo;Maximum processor state&amp;rdquo; under the legacy power options UI to 99%, which will disable
turbo boost.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This list is not complete and there might be better options out there. Just go with the one that is easiest for you and
prefer UEFI-level settings to any OS settings as those will persist even if you change your operating system.&lt;/p&gt;
&lt;h3 id=&#34;i-changed-my-mind-why-should-i-care&#34;&gt;I changed my mind. Why should I care?&lt;/h3&gt;
&lt;p&gt;Using less power actually comes with a lot of benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;smaller electricity bill (just don&amp;rsquo;t expect any dramatic changes)&lt;/li&gt;
&lt;li&gt;your PC will run much cooler now, negating the need for a big and wasteful cooling setup&lt;/li&gt;
&lt;li&gt;you can run your PC much quieter now as well, less heat to dissipate -&amp;gt; fans don&amp;rsquo;t need to run as fast now&lt;/li&gt;
&lt;li&gt;you can pick cheaper (in &lt;strong&gt;&lt;em&gt;price&lt;/em&gt;&lt;/strong&gt;, not quality) options when it comes to PC components since
you don&amp;rsquo;t need all that overbuilt capacity.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;why-do-you-care&#34;&gt;Why do you care?&lt;/h3&gt;
&lt;p&gt;Once you limit yourself with the amount of resources available to you, you&amp;rsquo;ll soon discover that you can do a lot even
with a small power budget. I&amp;rsquo;m running all my self-hosted services, gaming and work off of one decently configured PC
that is quiet and yet powerful enough to perform well at any task I throw at it. If you can do all of that with a CPU
that was originally designed for laptops and has a rated TDP of 65 watts, then why get anything more powerful?&lt;/p&gt;
&lt;h3 id=&#34;apple-has-joined-the-game&#34;&gt;Apple has joined the game&lt;/h3&gt;
&lt;p&gt;We were in a Intel-lead stagnation, with new chips adding minor features and introducing small improvements in performance. AMD came
out with the first Zen-based CPU-s in 2017, followed soon by APU-s that were used in laptop designs as well. At that
point AMD had almost closed the performance gap in the laptop space, forcing Intel to up their core counts and the
turbo boost power limits as well. With the introduction of Ryzen 4000 and 5000 series, AMD went above and beyond and
managed to bring great CPU and GPU performance to the laptop space, with the one notable omission being Thunderbolt 3
support.&lt;/p&gt;
&lt;p&gt;Then Apple came out of nowhere and provided heavy competition for both companies. The new Apple M1 chips are fast as
hell for what they really are and consume so little power that the fans in the laptop rarely have to turn on. You
also get the benefit of having an amazing battery life. That same design has also found use in the desktop lineup in the
form of the new iMac, and who knows, maybe it will also end up in a proper workstation machine at some point?&lt;/p&gt;
&lt;p&gt;While I don&amp;rsquo;t like the software stack that MacBooks ship with, and the poor repairability is a major downside for me,
I still have to admit that Apple is moving in the right direction with their chip designs. Performing well without your
laptop turning into a poor man&amp;rsquo;s version of a jet engine is exactly what we should be striving for.&lt;/p&gt;
&lt;h3 id=&#34;closing-thoughts&#34;&gt;Closing thoughts&lt;/h3&gt;
&lt;p&gt;I understand that the reason we often end up using the latest and greatest hardware is a result from the need to perform
our work as fast as possible, because you&amp;rsquo;ll end up using less time, and less time spent on a task should result in more
productivity. However, this has to be more sustainable, and continuing the trend that the &amp;ldquo;big boys&amp;rdquo; are going in goes
against that.&lt;/p&gt;
&lt;p&gt;I hope that we will see more progress in this area, especially from companies other than Apple.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>DIY cloud gaming: NVIDIA and Moonlight</title>
      <link>https://ounapuu.ee/posts/2021/10/13/diy-cloud-gaming-nvidia-moonlight/</link>
      <pubDate>Wed, 13 Oct 2021 05:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/10/13/diy-cloud-gaming-nvidia-moonlight/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;As you might have read from &lt;a href=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/&#34;&gt;my previous post on this topic&lt;/a&gt;, I
have a pretty neat &amp;ldquo;cloud&amp;rdquo; gaming setup running. I have one powerful desktop PC, one virtual machine with a GPU attached
to it, and client machines that can be used to stream games from. To keep things simple (and because my current ISP is
unbelievably bad), I have so far used streaming only over my local network.&lt;/p&gt;
&lt;p&gt;However, there were some pretty annoying issues with this setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The AMD GPU encoder is bad. 720p streaming was the best I could do if I wanted reasonable performance.&lt;/li&gt;
&lt;li&gt;The Windows 10 VM would sometimes not be able to start the host encoder, and the GPU drivers reported issues. This was
fixed with a couple of reboots to the VM and I suspect that this may be related to the notorious GPU reset issues that
AMD cards are infamous for in the VFIO world, but I wasn&amp;rsquo;t interested in digging that deep into that topic.&lt;/li&gt;
&lt;li&gt;The stream would sometimes randomly crash or lag. This might have been down to the AMD GPU
or &lt;a href=&#34;https://parsec.app/&#34;&gt;Parsec&lt;/a&gt; itself.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I read about this topic for a while and found that the overwhelming number of threads related to this topic recommend an
NVIDIA GPU and Moonlight for the best streaming experience. And so I went out to get one.&lt;/p&gt;
&lt;h3 id=&#34;the-gpu&#34;&gt;The GPU&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s 2021. The world is on fire and GPU prices are insane. With that in mind, I tempered my expectations and went for
something simple: a NVIDIA GTX 1060 6G by MSI. Simple, relatively modern for my games and the price was around the
retail price 5 years ago (260 EUR), which is the best you can do in these lousy times.&lt;/p&gt;
&lt;p&gt;But hey, it works! From the testing I
did &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/&#34;&gt;in a previous post&lt;/a&gt;, I knew that NVIDIA had finally
stopped intentionally throwing &lt;code&gt;error code 43&lt;/code&gt; in their drivers, which made this option viable. Replacing the GPU was
simple, I just had to change the PCI device ID-s according to the VFIO setup guide and changed the devices attached to
the Windows 10 VM using &lt;code&gt;virt-manager&lt;/code&gt;, and that was it!&lt;/p&gt;
&lt;h3 id=&#34;parsec-amd-vs-nvidia&#34;&gt;Parsec: AMD vs NVIDIA&lt;/h3&gt;
&lt;p&gt;Since I was already using Parsec for my streaming purposes, I decided to do a quick test to see what the difference is
between the two cards.&lt;/p&gt;
&lt;p&gt;The previous GPU was an AMD Radeon RX 570 4GB by Sapphire. These two GPU-s are in the same performance class, which
makes for a good comparison.&lt;/p&gt;
&lt;p&gt;Here are some results taken in two quick testing sessions in Dirt Rally. Take these results with a spoonful of salt as
these have not been conducted with any kind of standards. I just picked the same graphics preset, resolution and let it
run with Parsec statistics view open.&lt;/p&gt;
&lt;h4 id=&#34;h264&#34;&gt;H.264&lt;/h4&gt;
&lt;p&gt;AMD RX 570: 10ms&lt;/p&gt;
&lt;p&gt;NVIDIA GTX 1060: 3ms&lt;/p&gt;
&lt;h4 id=&#34;h265&#34;&gt;H.265&lt;/h4&gt;
&lt;p&gt;AMD RX 570: 8ms&lt;/p&gt;
&lt;p&gt;NVIDIA GTX 1060: 3ms&lt;/p&gt;
&lt;p&gt;The difference in the encode performance is huge, especially if you consider that the time between two frames is 16.6ms
for a 60 FPS stream. Some of that budget is also taken up by network and decode latency in the client, so the shorter
the encode time is, the better.&lt;/p&gt;
&lt;p&gt;Parsec is fine, but I have had some trouble getting GPU-accelerated decode working on my Linux clients, and it also
lacks an iOS client. While the latter isn&amp;rsquo;t a deal-breaker, the first one definitely is.&lt;/p&gt;
&lt;h3 id=&#34;moonlight-an-open-source-gem&#34;&gt;Moonlight: an open-source gem&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://moonlight-stream.org/&#34;&gt;Moonlight&lt;/a&gt; is an alternative to Parsec. It implements the NVIDIA GameStream protocol and
has clients for most common platforms. My testing has been performed on Linux clients running Fedora 34, a Windows 10
laptop (ThinkPad X230), iPhone SE 2020 and an old Google Nexus 5. I also made an attempt to run the Moonlight client on
a Raspberry Pi 1 B+, but it seems that it is simply too old for the Moonlight client, resulting in an error on startup.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/10/13/diy-cloud-gaming-nvidia-moonlight/media/image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/10/13/diy-cloud-gaming-nvidia-moonlight/media/image_huaa7e9e5acb525f42312803d1eb6f8868_2777663_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;GTA V on a Google Nexus 5? More likely than you think.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      GTA V on a Google Nexus 5? More likely than you think.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;To set up Moonlight, I opened up the client and tried the automatic detection over the network. Unfortunately that did
not yield any results, so I input the IP address of the Windows VM manually. That worked well. This initiated a pairing
process that I had to continue using Parsec, because you need to input a code on the host machine. After that, I had to
quit Parsec and start streaming using Moonlight.&lt;/p&gt;
&lt;p&gt;OK, not quite yet. Moonlight is able to detect the games installed on your system, but for a remote desktop experience,
you
&lt;a href=&#34;https://github.com/moonlight-stream/moonlight-docs/wiki/Setup-Guide#using-moonlight-to-stream-your-entire-desktop&#34;&gt;have to do a small tweak&lt;/a&gt;
for it to be equivalent to the experience you get from Parsec.&lt;/p&gt;
&lt;p&gt;One thing that I noticed at the start was that the image quality on the desktop isn&amp;rsquo;t as good as on Parsec. However, it
more than makes up for it in-game. Moonlight just works. There are plenty of knobs you can turn as well, including
configuring the image quality by setting the resolution, framerate and network limits.&lt;/p&gt;
&lt;p&gt;What makes Moonlight more suitable for me is that
the &lt;a href=&#34;https://flathub.org/apps/details/com.moonlight_stream.Moonlight&#34;&gt;Linux client packaged as a Flatpak&lt;/a&gt;
is able to use the GPU for hardware-accelerated decode. The experience is great on a Linux machine and it just works,
which is not something you can always expect to happen. Even an older XBOX ONE controller connected over Bluetooth works
just fine over Moonlight!&lt;/p&gt;
&lt;p&gt;The only issues that I had with Moonlight were later determined to be caused by networking issues. This shows up well on
the integrated statistics that Moonlight provides using the &lt;code&gt;Ctrl + Alt + Shift + S&lt;/code&gt; key combination under
the &lt;code&gt;Network jitter&lt;/code&gt; field. After stopping some services on my network, the issues went away.&lt;/p&gt;
&lt;h3 id=&#34;the-setup-one-month-later&#34;&gt;The setup: one month later&lt;/h3&gt;
&lt;p&gt;After a month of use, I have made some adjustments to the setup. I used to keep the VM running so that I could just jump
in and start playing whenever I liked it, but due to a tweak I made in the name of improving gaming performance, half
the CPU cores on my system were not available for other purposes, such as suffering through IntelliJ indexing the
project again. I decided to only power on the VM if I actually was about to take the time to play it. I haven&amp;rsquo;t yet
figured out the best way to make this more convenient, though. I did make the &amp;ldquo;Calculator&amp;rdquo; key on my keyboard start/stop
the VM on demand, but then GNOME started ignoring the shortcut I had setup and opened the calculator anyway, so that was
a short-lived tweak.&lt;/p&gt;
&lt;p&gt;A bigger change that I made to the setup was to store all my games on my ZFS pool that lives in another VM. For that,
I &lt;a href=&#34;https://forum.level1techs.com/t/run-your-steam-library-from-a-nas-break-a-leg-challenge-update/107912&#34;&gt;setup an iSCSI target using this guide as a starting point&lt;/a&gt;
. I used the &lt;a href=&#34;https://packages.debian.org/bullseye/tgt&#34;&gt;tgt&lt;/a&gt; package instead. That has worked out surprisingly well, but
the iSCSI target does not want to properly connect in the Windows VM on the first boot, which is mildly annoying. I soon
discovered that spinning rust just does not cut it and got more SSD-based storage, otherwise other processes on the NAS
could wreak havoc on the gaming experience in games like GTA V. Those issues were manifesting as long loading times and
objects popping in too late, resulting in half the roads and building being missing while driving around the map. The
iSCSI target solution also comes with the added bonus of having a proper backup of all my games. If Windows decides to
blow itself up again and I don&amp;rsquo;t have a backup of the VM ready, then I could just reinstall it and not worry about
downloading and installing all the games again.&lt;/p&gt;
&lt;h3 id=&#34;verdict&#34;&gt;Verdict&lt;/h3&gt;
&lt;p&gt;Overall, I&amp;rsquo;m very happy about the setup. I don&amp;rsquo;t use it all too often, but occasionally launching &lt;em&gt;art of rally&lt;/em&gt; or
&lt;em&gt;BeamNG.drive&lt;/em&gt; on any random device I own is great. I do have some concerns about the future of this setup, especially
with Windows 11 having more strict system requirements and newer games demanding more performance. For the time being,
this works and I intend to keep it that way.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The one box that does it all&lt;/em&gt;: so far so good!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>DIY cloud gaming setup with VFIO, Parsec and AMD</title>
      <link>https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/</link>
      <pubDate>Tue, 07 Sep 2021 06:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;This is a follow-up to &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/&#34;&gt;my previous post&lt;/a&gt; where I covered
the VFIO setup in general. For many people that would have been good enough, but my goal with this setup was to have a
powerful gaming setup that I could access from my living room PC with 20 meters of Ethernet cables between the two.&lt;/p&gt;
&lt;h3 id=&#34;cloud-gaming&#34;&gt;Cloud gaming?&lt;/h3&gt;
&lt;p&gt;The concept of &lt;a href=&#34;https://en.wikipedia.org/wiki/Cloud_gaming&#34;&gt;cloud gaming&lt;/a&gt; has become more popular lately,
with &lt;a href=&#34;https://www.xbox.com/en-US/xbox-game-pass/cloud-gaming&#34;&gt;Microsoft&lt;/a&gt;,
&lt;a href=&#34;https://stadia.google.com/&#34;&gt;Google&lt;/a&gt;, &lt;a href=&#34;https://www.NVIDIA.com/en-eu/geforce-now/&#34;&gt;NVIDIA&lt;/a&gt; and others offering services
that allow you to stream games to your device. These setups usually include a powerful server in a datacenter rendering
the game and sending the compressed video stream to your device. This works surprisingly well, but due to high cost,
poor internet connectivity in many places in the world
and &lt;a href=&#34;https://www.NVIDIA.com/en-us/geforce/forums/gfn-announcements/22/346564/2k-games-on-geforce-now/&#34;&gt;licensing issues&lt;/a&gt;
, this setup might not work well for everyone.&lt;/p&gt;
&lt;p&gt;However, if you already own a moderately powerful gaming PC and would like to use it to play games you already own over
the network, then there are plenty of solutions that can get you there.&lt;/p&gt;
&lt;p&gt;Here are some options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://store.steampowered.com/remoteplay&#34;&gt;Steam remote play&lt;/a&gt;: works for games launched via Steam.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://parsec.app/&#34;&gt;Parsec&lt;/a&gt;: able to stream the whole desktop, including games.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://moonlight-stream.org/&#34;&gt;Moonlight&lt;/a&gt;: same, but only usable on hosts with NVIDIA GPU-s due to the implementation
relying on NVIDIA&amp;rsquo;s GameStream protocol.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the past, I&amp;rsquo;ve had OK results with Steam remote play, but the limiting factor has been the reliance on Steam. I have
bought a couple of games from &lt;a href=&#34;https://www.gog.com/&#34;&gt;GOG&lt;/a&gt; as well, which I could probably also play remotely by
launching them via Steam, I just don&amp;rsquo;t want to go through the hassle.&lt;/p&gt;
&lt;p&gt;For this setup I&amp;rsquo;ve opted to go with Parsec. It&amp;rsquo;s not perfect, but it&amp;rsquo;s still good enough for our purposes. The GPU
we&amp;rsquo;re using (AMD Radeon RX 570) also limits our options because it won&amp;rsquo;t work with Moonlight.&lt;/p&gt;
&lt;p&gt;The installation of Parsec is pretty straightforward: just install it on your host and client machines. In my case the
client machine is
a &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/&#34;&gt;Lenovo ThinkPad X230 that was brought back from the dead&lt;/a&gt;
. It&amp;rsquo;s not powerful, but at least it can do H.264 hardware decoding and it uses only 12W of power when idle, making it a
perfect candidate for testing this out. It&amp;rsquo;s also worth mentioning that both machines are connected on the local network
using an Ethernet connection to avoid Wi-Fi becoming a bottleneck.&lt;/p&gt;
&lt;h3 id=&#34;vfio-gaming-and-you&#34;&gt;VFIO, gaming and you&lt;/h3&gt;
&lt;p&gt;What turned out to be a bigger hurdle was the performance of games inside the VM. After getting everything running with
the VFIO setup, I didn&amp;rsquo;t really spend any time trying to optimize the setup for the smoothest experience. When trying to
actually run this setup, I ran into quite a few problems with performance which mainly manifested as stutters and
unusually low framerates. Turns out that gaming has stricter latency requirements than other server workloads.&lt;/p&gt;
&lt;p&gt;Thanks to the &lt;a href=&#34;https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Performance_tuning&#34;&gt;great guide in Arch Wiki&lt;/a&gt;,
I could get a lot of ideas on what to try out to improve the performance of this gaming virtual machine.&lt;/p&gt;
&lt;p&gt;Before doing anything, I ran some benchmarks to get a sense of what performance levels I&amp;rsquo;m dealing with. To test out
each individual change, I used GTA V as the gaming benchmark since it was pretty good at pointing out any performance
issues.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a list of things that I ended up doing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;setting the CPU model to &lt;code&gt;host-passthrough&lt;/code&gt; in &lt;code&gt;virt-manager&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Dynamically_isolating_CPUs&#34;&gt;isolating CPU-s dynamically&lt;/a&gt;
whenever the VM starts
and &lt;a href=&#34;https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#CPU_pinning&#34;&gt;pinning those CPU-s&lt;/a&gt; to the VM to avoid
the host OS and other VM-s from using those cores&lt;/li&gt;
&lt;li&gt;setting the CPU governor to performance on isolated cores to rule out issues with the CPU not clocking high enough and
switching between idle/load power
modes: &lt;code&gt;echo performance &amp;gt; /sys/devices/system/cpu/cpu[4-7]/cpufreq/scaling_governor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Static_huge_pages&#34;&gt;enabling static hugepages&lt;/a&gt; to rule out
issues stemming from poor memory access speeds&lt;/li&gt;
&lt;li&gt;disabling SMT in UEFI settings to get rid of one additional variable&lt;/li&gt;
&lt;li&gt;getting a 64 GB DDR4-3600 memory kit to allocate more RAM to the VM (16 GB) and leave enough for the host machine and
other services&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The golden rule of troubleshooting is to change one variable at a time and comparing results. Not every change that I
made ended up being a positive one. For example, when configuring the VM to use 4 cores and 8 threads instead of plain 4
cores, I saw the framerates in GTA V drop 50%. I assume that the VM treated the &amp;ldquo;SMT cores&amp;rdquo; as real ones, causing the
Windows scheduler to make incorrect decisions.&lt;/p&gt;
&lt;p&gt;After playing around with this setup and accumulating these tweaks, I managed to get rid of most of the issues that
bothered me during gaming, resulting in a much smoother experience. It finally felt like the gaming VM behaved like a
machine with a 4 core CPU, 16 GB of RAM and an AMD RX 570 inside it.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/media/cpu-before.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/media/cpu-before_hu68f32458c68f7b57dfa8e8473bc29f1f_118759_1280x800_fit_box_3.png&#34;
             width=&#34;649&#34;
             height=&#34;145&#34;
             alt=&#34;Passmark PerformanceTest CPU results before any tweaks.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Passmark PerformanceTest CPU results before any tweaks.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/media/cpu-after.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/media/cpu-after_hubd4219d0080e0b257a19dd2b35425245_148835_1280x800_fit_box_3.png&#34;
             width=&#34;961&#34;
             height=&#34;209&#34;
             alt=&#34;Passmark PerformanceTest CPU results after tweaks.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Passmark PerformanceTest CPU results after tweaks.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/media/memory-before.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/media/memory-before_hu989dc23a3ceeb2032faa31a1e11e5f2f_92716_1280x800_fit_box_3.png&#34;
             width=&#34;539&#34;
             height=&#34;142&#34;
             alt=&#34;Passmark PerformanceTest memory results before any tweaks.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Passmark PerformanceTest memory results before any tweaks.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/media/memory-after.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/09/07/diy-cloud-gaming-vfio-parsec-amd/media/memory-after_hu40a0585c123e0c73eca33f5307e8807c_141173_1280x800_fit_box_3.png&#34;
             width=&#34;810&#34;
             height=&#34;206&#34;
             alt=&#34;Passmark PerformanceTest memory results after tweaks.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Passmark PerformanceTest memory results after tweaks.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;At this point I&amp;rsquo;d consider the setup to be fantastic for someone who wants to play games with a VFIO setup. Since I was
using this setup over the network with Parsec, I soon ran into more issues, but this time with the GPU.&lt;/p&gt;
&lt;h3 id=&#34;gpu-issues&#34;&gt;GPU issues&lt;/h3&gt;
&lt;p&gt;Parsec and other similar solutions rely on the host GPU to encode the image into a video stream using the encoder
present on the GPU die itself. You might see this being referred to as &lt;em&gt;hardware encoding&lt;/em&gt; in settings. What I didn&amp;rsquo;t
know before trying this setup is that AMD GPU encoders have a reputation
for &lt;a href=&#34;https://support.parsec.app/hc/en-us/articles/115002683371-Troubleshooting-Lag-Latency-and-Quality-Issues&#34;&gt;just being plain bad&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If the host has an AMD card, AMD is usually known for having worse encode than NVIDIA and even Intel.
You should be fine at low resolutions. If all guests support H.265 and have it turned on,
you may see better performance than with it off&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And this shows. When trying to stream at 1080p, the result was a stuttery and inconsistent mess. Imagine trying to play
at around 30fps with the frame timings graph resembling a heart rate monitor, that&amp;rsquo;s what it felt like. At 720p, the
experience was so much smoother. Yes, the image quality suffers because of that, but at least it was mostly playable.&lt;/p&gt;
&lt;p&gt;I decided to also try out if changing the codec from H.264 to H.265 has a significant impact. I did a quick test in Dirt
Rally due to it having a benchmark loop mode and checked the statistics that Parsec shows. With H.264, I saw encode
latency of about 10ms. With H.265, this latency was now at 8ms. Still not great, but it is technically a ~20%
improvement. The downside of this for my setup is that the client laptop simply does not support hardware accelerated
H.265 decode, which is something that Intel integrated graphics received support for in 7th gen CPU-s.&lt;/p&gt;
&lt;p&gt;The GPU seems to also cause some trouble for Parsec, as it would fail to connect occasionally and reports a host encoder
issue. This is usually overcome by rebooting the VM, which can get quite annoying after a couple of times. At other
times, Parsec sometimes just froze during gameplay and caused the client to freeze at 100% CPU usage. Not what I&amp;rsquo;d call
smooth sailing.&lt;/p&gt;
&lt;p&gt;Another issue that I noticed by using &lt;a href=&#34;https://www.msi.com/Landing/afterburner/graphics-cards&#34;&gt;MSI Afterburner&lt;/a&gt; is that
the framerate was still not that stable in some games, such as GTA V. After all the fixes and tweaks, there were still
small stutters, even with vsync enabled. I decided to look over AMD Radeon settings to see if a driver feature had an
unintended side effect. I had picked the &lt;em&gt;Gaming&lt;/em&gt;
preset because that was what I was using this GPU for, but decided to switch to the &lt;em&gt;Standard&lt;/em&gt; mode instead. And just
like that, the stutters were gone! I suspect that the &lt;em&gt;Radeon Anti-Lag&lt;/em&gt; feature might have been the cause to this, as
that was one of the main settings that was disabled after switching to the &lt;em&gt;Standard&lt;/em&gt; settings preset.&lt;/p&gt;
&lt;h3 id=&#34;is-it-worth-it&#34;&gt;Is it worth it?&lt;/h3&gt;
&lt;p&gt;I like a technical challenge and going through all the attempts to get more and more performance out of this setup was
interesting for me. However, it might not be the same way for everyone else. If you still feel like you want to go
through this and learn something along the way, then feel free to use this as a guide on what you can try. Make sure to
also read up on experiences that others have had with these tweaks and always measure your results to see if they had
the intended effect.&lt;/p&gt;
&lt;p&gt;For those who just want to play games and not worry too much about getting the expected performance out of your machine,
I&amp;rsquo;d still recommend going with building a separate gaming PC.&lt;/p&gt;
&lt;p&gt;If I had to build a machine specifically for this type of workload, then I&amp;rsquo;d make these changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replace the CPU with a non-APU model, such as the Ryzen 9 5950X. Due to
the &lt;a href=&#34;https://images.anandtech.com/doci/16214/Ryzen9_3800X_Hand_575px_678x452.jpg&#34;&gt;physical core layout&lt;/a&gt; you could
assign one CPU core complex to the gaming VM and leave everything else to the host. These CPU-s also have a lot of L3
cache, which should help in workloads that require low latency, such as games.&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re going for a streaming setup, then I&amp;rsquo;d try it first with an NVIDIA GPU. The error code 43 issues are gone
now, making it a viable option with solutions like Moonlight.&lt;/li&gt;
&lt;li&gt;More SATA or M.2 slots on the system. This makes passing through storage devices so much easier.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;future-plans&#34;&gt;Future plans&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m not planning on stopping this adventure just yet. I&amp;rsquo;ve recently looked around for an NVIDIA GPU to do a comparison
against the AMD RX 570 and picked out an NVIDIA GTX 1060, which is from the same era and performance bracket. Should
make for an interesting comparison in both &lt;em&gt;Parsec vs Parsec&lt;/em&gt; and &lt;em&gt;Parsec vs Moonlight&lt;/em&gt; scenarios.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m also hoping to eventually move to a more modern client PC that can support H.265 decoding and output at higher
resolutions. Yes, 4K at 60Hz is demanding for a laptop from 2012. Given that the laptop is an older ThinkPad, I expect
that to happen after 2025.&lt;/p&gt;
&lt;p&gt;Regarding the storage setup, I&amp;rsquo;ve got input from a friend saying that I might want to try setting up a Samba share on
my &amp;ldquo;NAS&amp;rdquo; VM and host my Steam library and other game files on that. After all, the virtual LAN has managed hit 2-3
Gbit/s in my testing and with L2ARC being persistent in ZFS 2.0, I might be able to take advantage of that as well (
assuming that I even need L2ARC, ARC efficiency is pretty good!). Currently I just have a Syncthing sync set up between
the &amp;ldquo;NAS&amp;rdquo; VM and the gaming VM so that there exists at least a basic backup of all my games.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Testing GPU passthrough on AMD Ryzen 7 5700G APU</title>
      <link>https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/</link>
      <pubDate>Sat, 28 Aug 2021 10:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/</guid>
      <description>
        
          
          
          
        
        
        &lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Before we jump into all the nitty-gritty details, I&amp;rsquo;d like to go over what we are dealing with here since these topics
may be unfamiliar to you. VFIO is quite a niche topic and not everyone knows about it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF&#34;&gt;GPU passthrough&lt;/a&gt;: the process of allowing a VM (virtual
machine) to use a dedicated GPU. This allows you to run GPU-heavy workloads inside the VM, such as gaming or anything
that benefits from GPU compute power.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kernel.org/doc/Documentation/vfio.txt&#34;&gt;VFIO&lt;/a&gt;: the framework that allows us to perform this operation.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Input%E2%80%93output_memory_management_unit&#34;&gt;IOMMU&lt;/a&gt;: hardware feature that supports all
of this.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://virt-manager.org/&#34;&gt;virt-manager&lt;/a&gt;: GUI application that I use to manage VM-s.&lt;/p&gt;
&lt;p&gt;Reasons why you may want to go through all the hassle and use this approach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you&amp;rsquo;re on Linux but want to play games occasionally without rebooting into Windows&lt;/li&gt;
&lt;li&gt;you want to do all your work, gaming and server workloads on one machine&lt;/li&gt;
&lt;li&gt;you simply don&amp;rsquo;t want to build a dedicated PC for playing games and would like to utilize the existing resources on
your main machine&lt;/li&gt;
&lt;li&gt;you want more control over the Windows installation because you simply don&amp;rsquo;t trust Microsoft&lt;/li&gt;
&lt;li&gt;you want to have more control over the Windows installation and the ability to revert the installation to an earlier
point in time using a filesystem that supports snapshots (BTRFS, ZFS)&lt;/li&gt;
&lt;li&gt;you have multiple separate VM-s for different purposes, but you would like to use one single GPU for all of them&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One thing to keep in mind is that the hardware you use matters a lot here as that provides the foundation for getting
this solution working. Here are some of the requirements you should know about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The GPU you want to pass through has to support UEFI. GPU-s from the past 5 years should be good on that, but if you
have a really old GPU that you want to use for testing, then that might not work out that well.&lt;/li&gt;
&lt;li&gt;You need to have a good-enough CPU and plenty of RAM. After all, you&amp;rsquo;re essentially running a full PC within another
PC.&lt;/li&gt;
&lt;li&gt;Your motherboard has to support IOMMU and have IOMMU groups that allow you to isolate the GPU and only pass the GPU to
the VM. &lt;a href=&#34;https://www.youtube.com/user/teksyndicate&#34;&gt;Level1Techs&lt;/a&gt; does quite a few motherboard reviews and Wendell goes
over the IOMMU groups and suitability for VFIO in them. It also helps if you look around the internet for enthusiasts
that have already bought the same motherboard, they may have posted information about the groups. Here&amp;rsquo;s
a &lt;a href=&#34;https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Ensuring_that_the_groups_are_valid&#34;&gt;handy script that allows you to check your IOMMU groups.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Some games may ban you if they detect that you are running the game inside a VM. It&amp;rsquo;s great that they&amp;rsquo;re trying to do
something against cheaters, but unfortunately VFIO users get unfairly treated here. Please do some research beforehand
if you play competitive multiplayer games a lot!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I hope that this introduction helped you understand the basics. Now, let&amp;rsquo;s just jump right into it.&lt;/p&gt;
&lt;h3 id=&#34;setup&#34;&gt;Setup&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;re going to test this setup
on &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions&#34;&gt;hardware that I have covered previously&lt;/a&gt;. What makes this
setup a bit special is that we&amp;rsquo;re using an AMD Ryzen 7 5700G APU on an mITX motherboard and a single dedicated GPU,
allowing us to do big things in a small package. Yes, there are setups where you can do VFIO with a single GPU and pass
it between the host OS and the VM, but that setup might be a bit tricky to use.&lt;/p&gt;
&lt;p&gt;The OS is Fedora 34. To get this working, I&amp;rsquo;ve used various resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.level1techs.com/t/the-vfio-and-gpu-passthrough-beginners-resource/129897&#34;&gt;beginners guide on Level1Techs forums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.level1techs.com/t/fedora-33-ultimiate-vfio-guide-for-2020-2021-wip/163814&#34;&gt;Fedora-specific guide by Wendell from Level1Techs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Ensuring_that_the_groups_are_valid&#34;&gt;this brilliant Arch Wiki guide that covers most of what you need to know about setting this up.&lt;/a&gt;
It&amp;rsquo;s not only useful for Arch, a lot of what is written here applies for any distro.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;testing&#34;&gt;Testing&lt;/h3&gt;
&lt;p&gt;I decided to do the initial testing with the Nvidia GT 710. It&amp;rsquo;s slow, buggy on Linux on Nouveau open source drivers,
and I had it available. I also recently heard that Nvidia stopped being hostile towards their customers in one aspect
by &lt;a href=&#34;https://www.nvidia.com/en-us/geforce/news/outriders-game-ready-driver/&#34;&gt;allowing GeForce GPU-s to be used in a Windows 10 VM without having to resort to workarounds.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The testing itself was relatively straightforward. The only issues I had
were &lt;a href=&#34;https://en.wiktionary.org/wiki/PEBCAK&#34;&gt;PEBCAK&lt;/a&gt; issues, possibly related to me performing this testing after work.
The main issues I ran were either small typos in dracut configuration or the wrong device ID-s being added to kernel
boot parameters. Once I discovered and fixed those, it was all smooth sailing.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not going to rewrite a full guide here, please refer to the previously linked resources if you need more details
than that. Those resources are also much more likely to receive updates about new finds and features.&lt;/p&gt;
&lt;p&gt;The steps I took were roughly these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make sure that IOMMU was enabled in UEFI settings. It&amp;rsquo;s probably set to &lt;code&gt;auto&lt;/code&gt; by default, make sure to set it
to &lt;code&gt;enabled&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the GPU that I want to pass through and connect it to a monitor.&lt;/li&gt;
&lt;li&gt;Install virtualization packages on Fedora: &lt;code&gt;sudo dnf install @virtualization&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Enable IOMMU and preload the VFIO kernel module by adding &lt;code&gt;amd_iommu=on rd.driver.pre=vfio-pci&lt;/code&gt; to Linux kernel
parameters.
&lt;ul&gt;
&lt;li&gt;I use GRUB2, these parameters live in &lt;code&gt;/etc/sysconfig/grub&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To apply these changes, you have to regenerate the GRUB configuration. Under Fedora, this is done
using &lt;code&gt;grub2-mkconfig -o /etc/grub2-efi.cfg&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Get the device ID-s for the GPU and the related audio device that you&amp;rsquo;re planning on passing through
&lt;ul&gt;
&lt;li&gt;To see the devices and ID-s, run &lt;code&gt;lspci -nnk&lt;/code&gt;. The ID-s look something like &lt;code&gt;1002:aaf0&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bind the GPU to &lt;code&gt;vfio-pci&lt;/code&gt; to avoid the GPU driver from taking control of the GPU, otherwise you cannot pass it to the
VM.
&lt;ul&gt;
&lt;li&gt;I opted to go for the simple approach and added the device ID-s to kernel
parameters: &lt;code&gt;vfio-pci.ids=1002:67df,1002:aaf0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Since I went with this approach, then I have to regenerate GRUB configuration again.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Make sure that the initramfs loads the necessary vfio drivers early in the boot.
&lt;ul&gt;
&lt;li&gt;With Fedora 34, this means creating a file &lt;code&gt;/etc/dracut.conf.d/10-vfio.conf&lt;/code&gt; with
contents &lt;code&gt;add_drivers+=&amp;quot; vfio_pci vfio vfio_iommu_type1 vfio_virqfd &amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Make sure that you don&amp;rsquo;t have any typos in that.&lt;/li&gt;
&lt;li&gt;Regenerate the initramfs: &lt;code&gt;dracut -f&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Reboot!&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;virt-manager&lt;/code&gt;, select the VM you want to pass the GPU through and add two PCIe devices: the GPU and its
associated audio device.
&lt;ul&gt;
&lt;li&gt;If you don&amp;rsquo;t have the VM set up yet, then proceed with the normal installation without the GPU passed through yet.
Make sure to create an UEFI VM, otherwise you might run into issues. This can be configured in &lt;code&gt;virt-manager&lt;/code&gt; _
Overview_ section by selecting the Q35 chipset and setting the firmware to &lt;code&gt;OVMF_CODE.df&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you have passed through the GPU, then make sure to remove the &lt;code&gt;Display Spice&lt;/code&gt; device from the VM.&lt;/li&gt;
&lt;li&gt;If you want to also control the VM, you need to also pass through your USB devices, such as a Logitech wireless
receiver.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Start the VM and cheer once you notice TianoCore appearing on the monitor that&amp;rsquo;s connected to the passed through GPU!&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/vfio-success.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/vfio-success_hudeee53c0957d610616164726fe42fe27_765920_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1107&#34;
             height=&#34;800&#34;
             alt=&#34;If you see this, then you&amp;#39;ve just successfully passed the GPU to the VM. Congratulations!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      If you see this, then you&amp;#39;ve just successfully passed the GPU to the VM. Congratulations!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;results-nvidia-gt-710&#34;&gt;Results: Nvidia GT 710&lt;/h3&gt;
&lt;p&gt;Initial testing with Nvidia GT 710 was successful. By successful, I mean that the GPU displayed an image and did not
install GPU drivers automatically.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/nvidia-error-43.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/nvidia-error-43_hu21e757f8ae54b3ac531f45f56f0b1a86_5545348_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The infamous Nvidia error code 43.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The infamous Nvidia error code 43.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;To overcome that last issue, I downloaded the latest official Nvidia GPU drivers and was good to go. The news were true,
error code 43 was no longer an issue!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/nvidia-postinstall.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/nvidia-postinstall_hub9de5393650242adadb5638163439f95_6725051_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;If your GPU shows up like this in Device Manager, then it should work properly.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      If your GPU shows up like this in Device Manager, then it should work properly.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Things got a bit less exciting when I got reminded that this GPU is weak. Very weak. Regardless, I decided to
demonstrate its computing prowess by downloading the &lt;a href=&#34;https://funselektor.itch.io/art-of-rally&#34;&gt;art of rally demo&lt;/a&gt;. Side
note: it&amp;rsquo;s a great game, go try it out!&lt;/p&gt;
&lt;p&gt;The demo ran! Not well, but it still ran!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/nvidia-artofrally.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/nvidia-artofrally_hub67337412a820d159abbdaf44066ca2e_4194304_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Not pictured: the horrible framerate.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Not pictured: the horrible framerate.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Satisfied with the results, I decided to go for gold and replace this GPU with the AMD RX 570 that I &amp;ldquo;borrowed&amp;rdquo;
from &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/&#34;&gt;this PC I built recently&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;results-amd-rx-570&#34;&gt;Results: AMD RX 570&lt;/h3&gt;
&lt;p&gt;After switching the GPU, I replaced the device ID-s with the new values and continued with the VFIO adventure. This
time, the GPU drivers were automatically installed by Windows and everything just worked. That&amp;rsquo;s not supposed to happen,
at least in my experience &lt;em&gt;something&lt;/em&gt; always goes wrong. Always.&lt;/p&gt;
&lt;p&gt;I installed the latest drivers from AMD-s website and continued with testing.&lt;/p&gt;
&lt;p&gt;Furmark? Runs as expected.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/amd-furmark.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/amd-furmark_hu624dac774315c9bc6446929d8f566f75_3993552_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;VM on the left, VM performance stats on the right, mess of cables everywhere.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      VM on the left, VM performance stats on the right, mess of cables everywhere.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;GTA IV? A stuttery mess, so yeah, runs as expected.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/amd-gta-iv.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/amd-gta-iv_huaa85869780f5cbbef6a9e7a59553c460_3717365_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;On the left: GTA IV, straight from the GPU. On the right: GTA IV, streamed via Parsec.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      On the left: GTA IV, straight from the GPU. On the right: GTA IV, streamed via Parsec.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;At this point the VM was assigned 4 CPU cores and I had performed no CPU pinning or optimizations of any kind, so the
results were pretty good.&lt;/p&gt;
&lt;h3 id=&#34;storage&#34;&gt;Storage&lt;/h3&gt;
&lt;p&gt;Because I built this setup on my current workstation/server machine, the storage situation is a bit tricky. The other VM
that runs all the services has full access to the two 12TB hard drives and I wasn&amp;rsquo;t interested in setting up a networked
storage setup. The only free spots I had were as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;120GB partition from the NVMe SSD. Good enough for storing the Windows 10 system files.&lt;/li&gt;
&lt;li&gt;2x 250GB partitions on the Samsung SATA 1TB SSD-s. Just enough to hold my recently played games, but not much more.
Running in striped configuration under Windows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I later opted to expand the game storage partitions to 375GB, which meant that I had to get rid of the extra
overprovisioning space that I had left aside. This setup is fine, but I&amp;rsquo;m losing out on some of the benefits that come
with a virtualized Windows setup.&lt;/p&gt;
&lt;p&gt;With regards to passing this storage to the VM, I had two options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;keep using the SATA virtual disk: works out of the box, but might not perform as well.&lt;/li&gt;
&lt;li&gt;use &lt;code&gt;virtio&lt;/code&gt;: you need to manually load and install the drivers for Windows to recognize these disks, but allegedly
this has better performance than the SATA implementation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I started off with SATA and did a comparison against &lt;code&gt;virtio&lt;/code&gt; using CrystalDiskMark.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/crystaldiskmark.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/29/testing-gpu-passthrough-on-amd-ryzen-5700g/media/crystaldiskmark_hu24842dfe98f2bdb76efa55e698b7785a_306895_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;467&#34;
             alt=&#34;Left: SATA. Right: virtio.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Left: SATA. Right: virtio.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;code&gt;virtio&lt;/code&gt; did come ahead in these comparisons, but I would probably have been fine with the SATA performance as well.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;One of the main reasons I do these kinds of setups is the technical challenge. It sounds weird, but sometimes I am
happier after having completed something technical and novel compared to actually using the setup.&lt;/p&gt;
&lt;p&gt;Previously I&amp;rsquo;ve had mixed results with GPU passthrough,
with &lt;a href=&#34;https://www.reddit.com/r/linuxmasterrace/comments/7ry4jr/gta_v_on_arch_linux_how_i_managed_to_get_gpu/&#34;&gt;ThinkPad T430 and eGPU somehow managing to run GTA V in a VM&lt;/a&gt;
, while in another testing session I ran into issues which turned out to be related to the CPU being faulty (lots of
PCIe errors).&lt;/p&gt;
&lt;p&gt;I do have more practical future plans with this. The plan is to use this VM as a gaming VM that I can stream games from
using &lt;a href=&#34;https://parsec.app/&#34;&gt;Parsec&lt;/a&gt;
to any device that I wish. One idea is to use the &lt;a href=&#34;https://www.nvidia.com/en-us/shield/shield-tv/&#34;&gt;Nvidia Shield TV&lt;/a&gt; as
a low-power box that is capable of performing streaming. Alternatively, I could also get a super tiny form factor
Dell/Lenovo/HP PC that has plenty of power to drive a 4K display and uses a reasonable amount of power. More on that in
a future post.&lt;/p&gt;
&lt;p&gt;Regarding storage I foresee an upgrade coming soon, either to the drives themselves or the whole setup since ATX
motherboards support more SATA ports and expansion cards. If you also pair that up with a case
like &lt;a href=&#34;https://www.coolermaster.com/catalog/cases/mid-tower/masterbox-q500l/&#34;&gt;Masterbox Q500L&lt;/a&gt; with a good power supply
placement, then you&amp;rsquo;d still have a relatively small setup.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Turning leftover PC parts into a decent gaming PC</title>
      <link>https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/</link>
      <pubDate>Sat, 21 Aug 2021 18:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/</guid>
      <description>
        
          
          
          
        
        
        &lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;About a year ago, I bought an used PC based off of
a &lt;a href=&#34;https://www.lenovo.com/us/en/desktops/erazer/x-series/x510/&#34;&gt;Lenovo Erazer X510&lt;/a&gt;. It had a dual-core Intel Pentium
G3220 CPU, 4GB of DDR3 RAM, a crappy Codegen 400W power supply and a 60GB SSD. I added an Nvidia GTX 1050 and just like
that, a budget gaming PC was born. My brother ended up using it, and it was good for games that didn&amp;rsquo;t require a
powerful CPU.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/lenovoprebuilt.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/lenovoprebuilt_hue39dc01f0a39f057a3d77141ea9a9320_4425744_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;This is the box that started it all.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      This is the box that started it all.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;A year later, the dual core CPU was really showing its age. It could not even run GTA V, and the 4GB of RAM did not help
the situation either. After checking the used PC parts market, I had essentially two choices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;get a quad core CPU (Haswell Intel i5) and upgrade the memory to 8GB&lt;/li&gt;
&lt;li&gt;get a cheap PC and move over some parts, such as the GPU, SSD etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;performing-the-upgrade&#34;&gt;Performing the upgrade&lt;/h3&gt;
&lt;p&gt;I happened to find a PC that cost less than the CPU + RAM upgrade would have cost for the original setup. However, that
PC was a complete horror show, and I only discovered that once I brought it home. Here&amp;rsquo;s a short list of things wrong
with the PC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Nvidia GT 210 that was inside it was missing the L-bracket, and the heatsink had been cut, and another smaller
heatsink was brutally screwed on top of the existing one. That&amp;rsquo;s definitely how cooling works, right?&lt;/li&gt;
&lt;li&gt;The Windows 10 installation that it came with was probably a pirated Russian version of it. I couldn&amp;rsquo;t confirm it
because the installation bluescreened on the first boot and everything was in Russian.&lt;/li&gt;
&lt;li&gt;It had some random stickers on it, which was fine, but it took some force and alcohol to get it off properly.&lt;/li&gt;
&lt;li&gt;One of the memory sticks inside it threw a lot of errors in memtest. Might explain that BSOD I got.&lt;/li&gt;
&lt;li&gt;The HDD was barely held in place with a wood screw. Yes, a wood screw.&lt;/li&gt;
&lt;li&gt;One of the PC fans was not connected. The end of the connector was just cut off and the exposed cables were wrapped
over another power cable. I don&amp;rsquo;t know how that could have ever worked.&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/wtf-1.jpeg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/wtf-1_hu0d8ab4b45a31239c9dc360663cbd0f47_4024775_1280x800_fit_q75_box.jpeg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;This GPU was held in place with a piece of wire.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      This GPU was held in place with a piece of wire.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/wtf-2.jpeg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/wtf-2_hu4c44b14190f2e0c504d59d2a8abf8186_4477448_1280x800_fit_q75_box.jpeg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Oh, it gets worse.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Oh, it gets worse.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/wtf-3.jpeg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/wtf-3_hu9ae6d623d9adec21da2da6eb748137ac_231098_1280x800_fit_q75_box.jpeg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;I don&amp;#39;t know if I should be mad as this is clearly a fantastic demonstration of the creativity that some people have.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I don&amp;#39;t know if I should be mad as this is clearly a fantastic demonstration of the creativity that some people have.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;It goes to show that you really need to do your homework when buying a suspiciously cheap PC. In my case it was fine as
I was going to replace a lot of the parts anyway and it ended up being a good gaming PC, capable of running GTA V and
streaming CSGO on Twitch. A less experienced buyer would have been absolutely screwed though.&lt;/p&gt;
&lt;p&gt;After moving the good parts over, I was left with a weak but functional PC. I didn&amp;rsquo;t really have a good use for it so I
considered selling it. But then I thought about it and decided to try to build a good gaming PC out of it, since I
didn&amp;rsquo;t have a competent machine at the time and I needed something to drive a big TV.&lt;/p&gt;
&lt;h3 id=&#34;the-plan&#34;&gt;The plan&lt;/h3&gt;
&lt;p&gt;The case and the PSU this setup came with were not that great. I&amp;rsquo;d hate it if I built a good PC and the shoddy PSU fried
it.&lt;/p&gt;
&lt;p&gt;After some careful consideration, I decided to get the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Case: Fractal Design Meshify Mini C with dark tempered glass. I would have preferred a plain version of this case, but
the tempered glass doesn&amp;rsquo;t look half bad either, just can&amp;rsquo;t drop that panel. Oh, and it looks good as well.&lt;/li&gt;
&lt;li&gt;PSU: Seasonic Core 500W 80+ Gold. They make good stuff.&lt;/li&gt;
&lt;li&gt;Storage: 2x 1TB Crucial BX500 SSD. Have to keep the games somewhere and an SSD-based RAID0 setup made the most sense
to me.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The core of the system would be the motherboard, CPU and 8GB of RAM that I pieced together from leftover sticks. All I
needed to do now was to simply upgrade the CPU and get myself a GPU, right?&lt;/p&gt;
&lt;h3 id=&#34;cpu-upgrade&#34;&gt;CPU upgrade&lt;/h3&gt;
&lt;p&gt;The Lenovo Sharkbay platform supports Haswell CPU-s, which includes Intel Core 4000 series CPU-s. I checked used CPU
listings and opted for an Intel i5 4460. 4 cores, 4 threads at a reasonable clock speed, that should play all the games
I have with reasonable performance.&lt;/p&gt;
&lt;p&gt;The CPU arrived, and with it came trouble. Because I started following the hardware world in more detail in 2016, I was
not aware of one crucial detail: &lt;em&gt;Haswell&lt;/em&gt; vs &lt;em&gt;Haswell Refresh&lt;/em&gt;. Turns out that the CPU I bought was part of the Haswell
Refresh series, meaning that you either needed a motherboard that supported this CPU, or a motherboard that offered a
BIOS update which adds support for the upgraded CPU-s. This motherboard from the Lenovo prebuilt PC turned out to be
neither of them. The fans spun up and kept spinning at max speed, but the PC did not POST.&lt;/p&gt;
&lt;p&gt;Frustrated and disappointed, I decided to double down. I got myself another used CPU and was luckily able to sell the
existing CPU for the same price I got it for. This time, the CPU was the Intel i5 4440, same specs, but a year older and
a small drop in clock speeds. Plug it in, and it works like a charm.&lt;/p&gt;
&lt;h3 id=&#34;proprietary-connections&#34;&gt;Proprietary connections&lt;/h3&gt;
&lt;p&gt;Once the new parts arrived, I started building. I knew that the Lenovo machine had some non-standard front panel
connectors that would not work well with more standard cases. I got myself a PCIe USB 3.0 internal header adaptor to
enable the front USB ports and left the audio ports disconnected since I had no need for them.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build-internals-3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build-internals-3_hu4ac0e69648854d448558e5c877634ba9_4166248_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;PCIe to USB 3.0 internal header adapter, and dust.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      PCIe to USB 3.0 internal header adapter, and dust.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Finding out which pins are for the power button was also a relatively simple process. I grabbed my flathead screwdriver
and tried shorting pairs of pins in the front panel connector area. Once I found the one that turned the machine on, I
connected the PC power button connector there. I didn&amp;rsquo;t care for the other connectors, so I left those disconnected as
well.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build-internals-5.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build-internals-5_hu4533652a532a31fd4527c71e06ff87f3_1639810_1280x800_fit_q75_box.jpg&#34;
             width=&#34;823&#34;
             height=&#34;800&#34;
             alt=&#34;These are the two pins that you need to short to turn this machine on.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      These are the two pins that you need to short to turn this machine on.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;adding-the-gpu&#34;&gt;Adding the GPU&lt;/h3&gt;
&lt;p&gt;To make this machine into a proper gaming PC, I needed a GPU. At first, I used an AMD RX 560 that I had, but since I
borrowed it from my main PC and the Nvidia GT 710 was a horrible GPU for even the most basic tasks, I had to put that
one back into the workstation.&lt;/p&gt;
&lt;p&gt;The GPU market of mid-2021 is not that great. Any decent GPU from the last 5 years is completely overpriced, and even
cards like AMD RX 480 - a 5 year old card at this point - sell for the original price from 2016. Somehow I managed to
stumble upon an AMD RX 570 4GB model with a somewhat acceptable price, so I pulled the trigger on that one. That card is
powerful enough to keep me busy until the prices for newer GPU-s become reasonable on the used market.&lt;/p&gt;
&lt;p&gt;I plug the GPU in, and the TV displays nothing but a black screen. Tried the Nvidia GT 710 and the integrated graphics,
all good. Tried the RX 570 as a secondary GPU, and the PC gets past the POST screen. Odd.&lt;/p&gt;
&lt;p&gt;After some searching and digging, I saw some forum posts detailing how the CSM (compatibility support module) setting on
the motherboard could fix the issue. I went into the BIOS while running off of integrated graphics, enabled CSM, plugged
the RX 570 in, booted, and it actually worked now!&lt;/p&gt;
&lt;p&gt;What I discovered after using the GPU for a while was that it got quite loud under load, even though the GPU itself
wasn&amp;rsquo;t that dusty. While cleaning it, I noticed that the thermal paste seems to have never been changed, and it showed:
the thermal paste was rock solid. I had to take a plastic prying tool to get rid of the thermal paste without breaking
the GPU. A repaste and a reassembly later, the GPU was whisper-quiet even under a full FurMark test.&lt;/p&gt;
&lt;h3 id=&#34;cooling&#34;&gt;Cooling&lt;/h3&gt;
&lt;p&gt;The Lenovo prebuilt game with a surprisingly adequate CPU cooler. However, the fan was not having a good time and made
more noise than I&amp;rsquo;d like. I decided to splurge a bit and got for a beQuiet Pure Rock Slim 2 as I had a good experience
running that cooler on a PC I built years earlier.&lt;/p&gt;
&lt;p&gt;When installing it, I noticed one critical flaw: the CPU cooler mounting holes were non-standard. They were simply too
big. If I had the patience, I could have probably added some washers or other available solutions to fix it. Anyway, I
ended up just replacing the fan on the original cooler with the one from the beQuiet cooler. I could probably use the
CPU cooler in another project, so no big loss there.&lt;/p&gt;
&lt;p&gt;I also noticed that the stock fan curve (or lack of it) means that the case fans run pretty loud by default. To fix
this, I used Noctua low noise adapters that I happened to have from previous projects. It did fix the issue, but I still
wish that I had more granular control over the fan speeds.&lt;/p&gt;
&lt;h3 id=&#34;how-well-does-it-work&#34;&gt;How well does it work?&lt;/h3&gt;
&lt;p&gt;This PC has mainly two uses: watching media and playing games. To keep it short: yes, it works well for these use cases.
I value smooth performance more than a crystal clear image, which results in me running all of my games under 1080p and
medium-high settings.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t consider this particular setup to be in any way practical. The cost of all the parts is actually quite big once
you add it all up. The setup does do everything that I need it for and that&amp;rsquo;s what makes it worth it for me. As an
additional bonus, I also get the satisfaction of prolonging the life of the used parts (CPU, RAM, motherboard).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll try to see how long I can keep using this setup. In case the CPU and/or RAM become the limiting factors, I&amp;rsquo;ll just
replace that part of the system with something reasonable and carry the rest of the system over.&lt;/p&gt;
&lt;h3 id=&#34;gallery&#34;&gt;Gallery&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s what the setup looks like.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build_hu1a4ab11c5af7a8699f9eaf0f8df8b92d_3190415_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The tinted glass does a great job at hiding the green PCB.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The tinted glass does a great job at hiding the green PCB.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build-internals.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build-internals_hu215559b6286e06347af8f2841ee97856_4087933_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Here&amp;#39;s what it looks like on the inside.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Here&amp;#39;s what it looks like on the inside.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build-internals-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/media/the-build-internals-2_huc3bb277f781014cea2410fc60b98467c_5464068_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The same, but now at a pretty angle!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The same, but now at a pretty angle!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;


        
        </description>
    </item>
    
    
    
    <item>
      <title>AMD Ryzen 7 5700G: first impressions on Fedora 34</title>
      <link>https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/</link>
      <pubDate>Sat, 07 Aug 2021 07:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/</guid>
      <description>
        
          
          
          
        
        
        &lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve covered my self-hosting setup in &lt;a href=&#34;https://ounapuu.ee/posts/2021/05/23/self-hosting-endgame&#34;&gt;a previous post&lt;/a&gt;. It has been a couple of
months and the setup has mostly been fine. Sure, the power usage was pretty big under load, and yes, my internet did cut
out every time I turned the VM on with all the services starting, but other than that, it has been rock-solid.&lt;/p&gt;
&lt;p&gt;However, I soon realized that in most situations, the 12 CPU cores is a bit overkill. Performance was fantastic, but due
to the case and the cooling solution that I&amp;rsquo;m using, the fans did have to ramp up to cool the CPU down. Due to the
ongoing GPU drought driven by yet another cryptocurrency bubble, it also felt a bit wasteful to use an AMD RX 560 just
to drive two 1080p monitors.&lt;/p&gt;
&lt;p&gt;It just so happened that around this time, AMD released the Ryzen 5000 G-series APU-s to retail. Yes, you could buy the
4000 series &amp;ldquo;OEM-only&amp;rdquo; APU-s from certain online retailers as well, but with this release, it&amp;rsquo;s 100% official. The
release date rolled around, and the reviews were good. A day later, the CPU was also listed at a local reseller and was
actually in stock. After checking the street price for a used Ryzen 9 3900X and the Radeon RX 560, I decided to go for
it, as it would be very close to a free &amp;ldquo;upgrade&amp;rdquo;.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image1_huadd55b130312778858334ef51abdc9ab_3666951_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;CPU retail packaging. Holds the APU and a small CPU cooler as well.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      CPU retail packaging. Holds the APU and a small CPU cooler as well.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;prep-work&#34;&gt;Prep work&lt;/h3&gt;
&lt;p&gt;Before performing the purchase, I confirmed that the motherboard that I
use (&lt;a href=&#34;https://www.gigabyte.com/Motherboard/B450-I-AORUS-PRO-WIFI-rev-10#kf&#34;&gt;Gigabyte  B450 I AORUS PRO WIFI&lt;/a&gt;) supports
this CPU after a BIOS upgrade. B450 chipset lives in a bit of a gray area where the CPU support is determined by the
motherboard manufacturer. No updates? No CPU support for you.&lt;/p&gt;
&lt;p&gt;From my previous BIOS updating experiences, I remember that this particular motherboard had some buggy BIOS
implementations. I ran into two issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PC would get stuck on POST if you reboot. It&amp;rsquo;s annoying when making changes to UEFI settings, but with my use case
this is not that big of a deal.&lt;/li&gt;
&lt;li&gt;If you remove a boot option, then it is impossible to get it back. Seriously, even a CMOS reset did not help with this
one.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This time around, I decided to update the versions one by one to follow the happy path and not run into other types of
issues. The bug did resurface right after the first version that I tried, so that was a bit disappointing.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image2_hu79b4fa68331ebe5ffa97f94cfecbeef3_4052625_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Now would be the perfect time for a surprise power outage or a cat intervention.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Now would be the perfect time for a surprise power outage or a cat intervention.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Once I was all up-to-date, I carefully removed the old CPU and plugged in the new one.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image3_hu7a94197c82a4f591a2b627a6d820a974_4949801_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;There&amp;#39;s something very satisfying and beautiful about computer hardware. Just look at it!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      There&amp;#39;s something very satisfying and beautiful about computer hardware. Just look at it!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;hold-on-why-would-you-intentionally-downgrade-your-cpu&#34;&gt;Hold on, why would you intentionally downgrade your CPU?&lt;/h3&gt;
&lt;p&gt;It all came down to &lt;em&gt;&amp;ldquo;use the right tool for the job&amp;rdquo;&lt;/em&gt;. The Ryzen 9 3900X is a good CPU, no doubts about that, but
during my work, I kept an eye on my CPU usage quite often and found that even in the worst-case scenarios, such as
IntelliJ IDEA performing indexing, I wasn&amp;rsquo;t using the CPU to the full extent. It&amp;rsquo;s great for those scenarios, but I
wasn&amp;rsquo;t hitting them as often as I would have thought.&lt;/p&gt;
&lt;p&gt;It also did not help that the CPU did not have an integrated GPU. When all you have to run is a basic desktop setup with
60Hz 1080p monitors, having a dedicated GPU to run them sounds so wasteful. This increased the power use of the whole
setup and the GPU could be utilized better elsewhere.&lt;/p&gt;
&lt;p&gt;The Ryzen 7 5700G is a downgrade in multi-core performance, mainly due to 4 fewer cores and only 25% of the L3 cache,
but according to various reviews and benchmarks, you could actually expect a small single-core performance uplift.
Nothing groundbreaking, but good enough for my use case.&lt;/p&gt;
&lt;h3 id=&#34;power-usage&#34;&gt;Power usage&lt;/h3&gt;
&lt;p&gt;Because I don&amp;rsquo;t change my CPU-s too often, I thought I&amp;rsquo;d take the time to run some benchmarks and measure the power
usage of the whole setup. This includes everything: the PC (with two spinning hard drives), standing desk, two 1080p
monitors and peripherals.&lt;/p&gt;
&lt;p&gt;Please note that these benchmarks are not very scientific and are simply my observations of the change you can expect
when performing a switch like this on your own setup. I did my best to make sure that the running conditions are as
close as possible by stopping the service VM, waiting until the background CPU usage was normal, running the memory at
the same spec etc.&lt;/p&gt;
&lt;h4 id=&#34;amd-ryzen-9-3900x--radeon-rx-560&#34;&gt;AMD Ryzen 9 3900X + Radeon RX 560&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Idle, sitting on desktop: ~139W&lt;/li&gt;
&lt;li&gt;Full synthetic CPU load using &lt;code&gt;stress&lt;/code&gt;: ~253W&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;amd-ryzen-7-5700g--integrated-vega-8-gpu&#34;&gt;AMD Ryzen 7 5700G + integrated Vega 8 GPU&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Idle, sitting on desktop: ~99W (generally between 85-100W)&lt;/li&gt;
&lt;li&gt;Full synthetic CPU load using &lt;code&gt;stress&lt;/code&gt;: ~166W&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As expected, the change of the CPU and removal of the dedicated GPU results in a big drop when it comes to the power
usage of the whole workstation setup. To go even lower, I&amp;rsquo;d have to switch out the core of the PC to something like
the &lt;a href=&#34;https://www.asrock.com/nettop/AMD/DeskMini%20X300%20Series/&#34;&gt;ASRock Deskmini X300&lt;/a&gt; and replace the hard drives with
two big SSD-s. I&amp;rsquo;d go for that as soon as bulk SSD storage became a viable option. Unfortunately, this is not the case,
yet.&lt;/p&gt;
&lt;h3 id=&#34;performance&#34;&gt;Performance&lt;/h3&gt;
&lt;p&gt;Reputable review sites, such
as &lt;a href=&#34;https://www.anandtech.com/show/16824/amd-ryzen-7-5700g-and-ryzen-5-5600g-apu-review&#34;&gt;AnandTech&lt;/a&gt;, have already done a
lot of benchmarks with better testing methodologies, so I instead went ahead and tested out something that I do quite
often at work: running tests in poorly written Java projects!&lt;/p&gt;
&lt;p&gt;For this, I have two Java projects that have their own test suites. Project A has 900 or so tests, which are mainly
parallel in nature. Project B has 2000+ tests, where a good number of them are dependent on a single thread to do all
the work.&lt;/p&gt;
&lt;p&gt;To run the tests, I just call the &amp;ldquo;Run all tests&amp;rdquo; function in IntelliJ and let it do the work of running the tests and
measuring the elapsed time. And as mentioned before: this is not scientific, there are probably some errors in here, but
the actions performed here are in my opinion a pretty good reflection of day-to-day work, and that&amp;rsquo;s what matters the
most to me. Tests were run twice with a short break between the test runs to let the CPU cool down a bit.&lt;/p&gt;
&lt;h4 id=&#34;project-a-amd-ryzen-9-3900x&#34;&gt;Project A: AMD Ryzen 9 3900X&lt;/h4&gt;
&lt;p&gt;Test run 1: 10.396s.&lt;/p&gt;
&lt;p&gt;Test run 2: 10.494s.&lt;/p&gt;
&lt;h4 id=&#34;project-a-amd-ryzen-7-5700g&#34;&gt;Project A: AMD Ryzen 7 5700G&lt;/h4&gt;
&lt;p&gt;Test run 1: 15.561s.&lt;/p&gt;
&lt;p&gt;Test run 2: 15.690s.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image4.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image4_hu6ca8c681d0576fa8d71ba33732f69058_102845_1280x800_fit_box_3.png&#34;
             width=&#34;952&#34;
             height=&#34;407&#34;
             alt=&#34;CPU usage on the Ryzen 9 3900X during the test run.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      CPU usage on the Ryzen 9 3900X during the test run.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h4 id=&#34;project-b-amd-ryzen-9-3900x&#34;&gt;Project B: AMD Ryzen 9 3900X&lt;/h4&gt;
&lt;p&gt;Test run 1: 364s.&lt;/p&gt;
&lt;p&gt;Test run 2: 365s.&lt;/p&gt;
&lt;h4 id=&#34;project-b-amd-ryzen-7-5700g&#34;&gt;Project B: AMD Ryzen 7 5700G&lt;/h4&gt;
&lt;p&gt;Test run 1: 471s.&lt;/p&gt;
&lt;p&gt;Test run 2: 480s.&lt;/p&gt;
&lt;p&gt;The performance hit was somewhat expected for project A due to the parallel nature of the tests. However, for project B
I expected better results than that due to the alleged improvements in single-thread CPU performance.&lt;/p&gt;
&lt;h3 id=&#34;the-linux-experience&#34;&gt;The Linux experience&lt;/h3&gt;
&lt;p&gt;I expected the APU to work as expected, with perhaps some small issues popping up here and there. I&amp;rsquo;m currently running
Fedora 34 with all the latest updates installed and the kernel version at 5.13.6, which should be the best option when
trying to get new hardware working on Linux.&lt;/p&gt;
&lt;p&gt;The CPU portion of the APU is working relatively well for a CPU that was released just a couple of days ago. I have
noticed that for some reason this CPU is constantly clocked at around 4.2GHz on all cores at all times, even if there
isn&amp;rsquo;t too much going on in the system. &lt;code&gt;sensors&lt;/code&gt;, the program I use to monitor system temperatures, is also having a
small hiccup, as I cannot see the CPU temperatures at all, only the integrated GPU temperatures show up even after
running &lt;code&gt;sensors-detect&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;nvme-pci-0900
Adapter: PCI adapter
Composite:    +47.9°C  (low  = -40.1°C, high = +89.8°C)
                       (crit = +93.8°C)
Sensor 2:     +47.9°C  (low  = -40.1°C, high = +89.8°C)

iwlwifi_1-virtual-0
Adapter: Virtual device
temp1:        +48.0°C  

amdgpu-pci-0a00
Adapter: PCI adapter
vddgfx:        1.36 V  
vddnb:       999.00 mV 
edge:         +51.0°C  
power1:        6.00 mW 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The GPU seems to be a bit rough around the corners. I&amp;rsquo;m using the &lt;a href=&#34;https://www.gnome.org/&#34;&gt;GNOME desktop environment&lt;/a&gt;,
which means that I&amp;rsquo;ve learned to endure laggy user interfaces. I default to using Wayland, but I sometimes also use Xorg
for those situations where the application I&amp;rsquo;m trying to run does not work properly under Wayland (looking at you, Slack
and your screen sharing functionality&amp;hellip;).&lt;/p&gt;
&lt;p&gt;The integrated Vega 8 graphics are almost as fast as the dedicated RX 560 GPU under normal light desktop workloads. Once
you run something very heavy, like Furmark, the GPU performance tanks and the desktop becomes almost unusable. This is
not the case when running some
&lt;a href=&#34;https://webglsamples.org/&#34;&gt;WebGL workloads&lt;/a&gt; though, so it could be an isolated case.&lt;/p&gt;
&lt;p&gt;The most serious issue I&amp;rsquo;ve managed to find is that Firefox has some issues with this GPU once you put enough load on
the GPU. You may start to notice flickering and UI elements blinking when moving around. A good test case for this is to
run &lt;a href=&#34;https://www.netdata.cloud/&#34;&gt;Netdata&lt;/a&gt; in live mode and have a 1080p Youtube video in another window. I haven&amp;rsquo;t seen
anything like that since running
the &lt;a href=&#34;https://www.pny.eu/en/consumer/explore-all-products/graphics-cards/1294-geforce-gt-710-2gb-ddr3-single-fan&#34;&gt;Nvidia GT 710&lt;/a&gt;
with Nouveau drivers under Fedora 34. At least it does not crash the browser or the Wayland session, so it&amp;rsquo;s not a
complete disaster. Still, pretty annoying, so I hope this gets resolved eventually. If I had to guess: the issue is
probably related to the Webrender implementation that makes use of the GPU to speed up the browsing experience.&lt;/p&gt;
&lt;h3 id=&#34;closing-thoughts&#34;&gt;Closing thoughts&lt;/h3&gt;
&lt;p&gt;Overall, I&amp;rsquo;m happy that the APU actually works. I&amp;rsquo;ve had a couple of bad experiences in the past where the Ryzen 3 2200G
had stability issues and had to be replaced, so this experience is already a step up from that. The PC runs cooler and
quieter, the desktop experience is good enough for me and the CPU performance is acceptable.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure that the issues that I&amp;rsquo;ve had with this APU under Linux will be fixed eventually. Each kernel update usually
brings lots of improvements to new hardware and I&amp;rsquo;m sure that this APU is no exception.&lt;/p&gt;
&lt;p&gt;As for the BIOS issues, I&amp;rsquo;m happy that AMD and Gigabyte opted to support the B450 chipset well into 2021, but I&amp;rsquo;m sure
that this choice has come at the cost of QA. If I had to choose between buggy support and having to buy a new
motherboard for my new, shiny CPU, then I&amp;rsquo;d still pick the first one.&lt;/p&gt;
&lt;h3 id=&#34;update-2021-08-18&#34;&gt;Update (2021-08-18)&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve had this CPU for a while now, and there have been a couple of kernel updates in the meantime. Here are my notes.&lt;/p&gt;
&lt;p&gt;The idle power usage has recently been in between 65-70W for the whole setup. I&amp;rsquo;ve measured the desktop itself to take up 38W of that.&lt;/p&gt;
&lt;p&gt;Although my motherboard does not seem to expose the cTDP option or have &lt;code&gt;ECO mode&lt;/code&gt; available, I still managed to limit my TDP to 45W
using &lt;a href=&#34;https://www.reddit.com/r/Amd/comments/j3ro5j/eco_mode_setting_in_bios_on_gigabyte_b550i_aorus/g7dysoo/&#34;&gt;this trick that /u/The-Stilt mentioned over at Reddit&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;The potential lack of the ECO-mode does not prevent you from using it, 
since it is nothing but a preset of PPT/TDC/EDC settings.

Eco-Mode (95W): PPT = 128W, TDC = 80A, EDC = 125A

Eco-Mode (65W): PPT = 88W, TDC = 60A, EDC = 90A

Eco-Mode (45W): PPT = 61W, TDC = 45A, EDC = 65A
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This had a great effect on the full load of the system: 3.8GHz all-core while the whole setup consumed 113W.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image5.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions/media/image5_hu94aae1982d94045317f6b29c7d8268b1_4382618_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Precision Boost Overdrive settings that should result in a nice efficiency win. Target = 45W.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Precision Boost Overdrive settings that should result in a nice efficiency win. Target = 45W.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;update-2021-08-20&#34;&gt;Update (2021-08-20)&lt;/h3&gt;
&lt;p&gt;Quick update on the GPU situation: Firefox seems to be fine now, I could not get the flickering to occur again even under
worst case scenarios.&lt;/p&gt;
&lt;h3 id=&#34;notes-and-stuff&#34;&gt;Notes and stuff&lt;/h3&gt;
&lt;p&gt;Here are the outputs for a couple of commands that I could think of.&lt;/p&gt;
&lt;h4 id=&#34;iommu-groups&#34;&gt;IOMMU groups&lt;/h4&gt;
&lt;p&gt;Script taken from &lt;a href=&#34;https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Setting_up_IOMMU&#34;&gt;Arch wiki&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;shopt -s nullglob
for g in `find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V`; do
    echo &amp;#34;IOMMU Group ${g##*/}:&amp;#34;
    for d in $g/devices/*; do
        echo -e &amp;#34;\t$(lspci -nns ${d##*/})&amp;#34;
    done;
done;

IOMMU Group 0:
        00:01.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge [1022:1632]
IOMMU Group 1:
        00:02.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge [1022:1632]
IOMMU Group 2:
        00:02.1 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge [1022:1634]
IOMMU Group 3:
        00:02.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge [1022:1634]
IOMMU Group 4:
        00:08.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge [1022:1632]
        00:08.1 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus [1022:1635]
        00:08.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus [1022:1635]
        0a:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [1002:1638] (rev c8)
        0a:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller [1002:1637]
        0a:00.2 Encryption controller [1080]: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) Platform Security Processor [1022:15df]
        0a:00.3 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1 [1022:1639]
        0a:00.4 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1 [1022:1639]
        0a:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) HD Audio Controller [1022:15e3]
        0b:00.0 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] [1022:7901] (rev 81)
        0b:00.1 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] [1022:7901] (rev 81)
IOMMU Group 5:
        00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller [1022:790b] (rev 51)
        00:14.3 ISA bridge [0601]: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge [1022:790e] (rev 51)
IOMMU Group 6:
        00:18.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166a]
        00:18.1 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166b]
        00:18.2 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166c]
        00:18.3 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166d]
        00:18.4 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166e]
        00:18.5 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166f]
        00:18.6 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:1670]
        00:18.7 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:1671]
IOMMU Group 7:
        01:00.0 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset USB 3.1 XHCI Controller [1022:43d5] (rev 01)
        01:00.1 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset SATA Controller [1022:43c8] (rev 01)
        01:00.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Bridge [1022:43c6] (rev 01)
        02:00.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
        02:01.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
        02:04.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
        02:05.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
        02:06.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
        02:07.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
        06:00.0 Network controller [0280]: Intel Corporation Wireless-AC 9260 [8086:2526] (rev 29)
        08:00.0 Ethernet controller [0200]: Intel Corporation I211 Gigabit Network Connection [8086:1539] (rev 03)
IOMMU Group 8:
        09:00.0 Non-Volatile memory controller [0108]: Kingston Technology Company, Inc. U-SNS8154P3 NVMe SSD [2646:5008] (rev 01)
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# lscpu
Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   48 bits physical, 48 bits virtual
CPU(s):                          16
On-line CPU(s) list:             0-15
Thread(s) per core:              2
Core(s) per socket:              8
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       AuthenticAMD
CPU family:                      25
Model:                           80
Model name:                      AMD Ryzen 7 5700G with Radeon Graphics
Stepping:                        0
Frequency boost:                 enabled
CPU MHz:                         3800.000
CPU max MHz:                     4672,0698
CPU min MHz:                     1400,0000
BogoMIPS:                        7585.94
Virtualization:                  AMD-V
L1d cache:                       256 KiB
L1i cache:                       256 KiB
L2 cache:                        4 MiB
L3 cache:                        16 MiB
NUMA node0 CPU(s):               0-15
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full AMD retpoline, IBPB conditional, IBRS_FW, STIBP always-on, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid ap
                                 erfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topo
                                 ext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a rdseed adx smap clflushopt clwb sha_ni 
                                 xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rdpru wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists paus
                                 efilter pfthreshold avic v_vmsave_vmload vgif v_spec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca fsrm
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# lspci -nnk
00:00.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne Root Complex [1022:1630]
	Subsystem: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne Root Complex [1022:1630]
00:00.2 IOMMU [0806]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne IOMMU [1022:1631]
	Subsystem: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne IOMMU [1022:1631]
00:01.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge [1022:1632]
00:02.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge [1022:1632]
00:02.1 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge [1022:1634]
	Kernel driver in use: pcieport
00:02.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge [1022:1634]
	Kernel driver in use: pcieport
00:08.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge [1022:1632]
00:08.1 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus [1022:1635]
	Kernel driver in use: pcieport
00:08.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus [1022:1635]
	Kernel driver in use: pcieport
00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller [1022:790b] (rev 51)
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:5001]
	Kernel modules: i2c_piix4, sp5100_tco
00:14.3 ISA bridge [0601]: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge [1022:790e] (rev 51)
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:5001]
00:18.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166a]
00:18.1 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166b]
00:18.2 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166c]
00:18.3 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166d]
00:18.4 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166e]
00:18.5 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:166f]
00:18.6 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:1670]
00:18.7 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Device [1022:1671]
01:00.0 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset USB 3.1 XHCI Controller [1022:43d5] (rev 01)
	Subsystem: ASMedia Technology Inc. Device [1b21:1142]
	Kernel driver in use: xhci_hcd
01:00.1 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset SATA Controller [1022:43c8] (rev 01)
	Subsystem: ASMedia Technology Inc. Device [1b21:1062]
	Kernel driver in use: ahci
01:00.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Bridge [1022:43c6] (rev 01)
	Kernel driver in use: pcieport
02:00.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
	Kernel driver in use: pcieport
02:01.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
	Kernel driver in use: pcieport
02:04.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
	Kernel driver in use: pcieport
02:05.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
	Kernel driver in use: pcieport
02:06.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
	Kernel driver in use: pcieport
02:07.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port [1022:43c7] (rev 01)
	Kernel driver in use: pcieport
06:00.0 Network controller [0280]: Intel Corporation Wireless-AC 9260 [8086:2526] (rev 29)
	Subsystem: Intel Corporation Device [8086:0014]
	Kernel driver in use: iwlwifi
	Kernel modules: iwlwifi
08:00.0 Ethernet controller [0200]: Intel Corporation I211 Gigabit Network Connection [8086:1539] (rev 03)
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:e000]
	Kernel driver in use: igb
	Kernel modules: igb
09:00.0 Non-Volatile memory controller [0108]: Kingston Technology Company, Inc. U-SNS8154P3 NVMe SSD [2646:5008] (rev 01)
	Subsystem: Kingston Technology Company, Inc. U-SNS8154P3 NVMe SSD [2646:5008]
	Kernel driver in use: nvme
	Kernel modules: nvme
0a:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [1002:1638] (rev c8)
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:d000]
	Kernel driver in use: amdgpu
	Kernel modules: amdgpu
0a:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller [1002:1637]
	Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller [1002:1637]
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel
0a:00.2 Encryption controller [1080]: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) Platform Security Processor [1022:15df]
	Subsystem: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) Platform Security Processor [1022:15df]
	Kernel driver in use: ccp
	Kernel modules: ccp
0a:00.3 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1 [1022:1639]
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:5007]
	Kernel driver in use: xhci_hcd
0a:00.4 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1 [1022:1639]
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:5007]
	Kernel driver in use: xhci_hcd
0a:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) HD Audio Controller [1022:15e3]
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:a0c3]
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel
0b:00.0 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] [1022:7901] (rev 81)
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:b002]
	Kernel driver in use: ahci
0b:00.1 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] [1022:7901] (rev 81)
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:b002]
	Kernel driver in use: ahci
&lt;/code&gt;&lt;/pre&gt;
        
        </description>
    </item>
    
    
    
    <item>
      <title>How to mess up a simple ThinkPad X230 BIOS flash and how to recover from it</title>
      <link>https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/</link>
      <pubDate>Mon, 28 Jun 2021 07:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/</guid>
      <description>
        
          
          
          
        
        
        &lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;
&lt;p&gt;I have a Lenovo ThinkPad X230. It&amp;rsquo;s a small and good laptop that I&amp;rsquo;ve used as my main laptop and a server as well.&lt;/p&gt;
&lt;p&gt;A couple of years ago I messed around with flashing alternative BIOS implementations on the X230, such
as &lt;a href=&#34;https://github.com/merge/skulls&#34;&gt;the skulls project&lt;/a&gt;, which made installing prebuilt coreboot images very simple. Of
course, before doing any testing, I made backups of the stock BIOS implementation (ooh, foreshadowing!).&lt;/p&gt;
&lt;p&gt;Skulls was nice, it booted fast, but changing the boot order likely required modifications and rebuilding the coreboot
image (I wanted to set the mSATA SSD as the first bootable device). It was also not UEFI-compatible, which could have
probably been solved with something like TianoCore, but I didn&amp;rsquo;t feel like messing with that too much. Eventually I
flashed the original UEFI implementation back and went on with my life.&lt;/p&gt;
&lt;p&gt;Then I stumbled upon &lt;a href=&#34;https://1vyra.in/&#34;&gt;the 1vyrain project&lt;/a&gt; project, which allows you to &amp;ldquo;jailbreak&amp;rdquo; your BIOS. This
modification also enables a lot more bells and whistles in the BIOS under the &lt;em&gt;Advanced&lt;/em&gt; menu option, plus it also gets
rid of the WiFi adaptor whitelist that Lenovo has put in place, allowing you to now use any adaptor that&amp;rsquo;s compatible
with the form factor.&lt;/p&gt;
&lt;p&gt;The mod was very easy to install and had no issues, until I got myself a DDR3 SODIMM RAM kit. One of the sticks was not
working properly, showing up with graphical glitches and failing a memtest run. To troubleshoot it, I decided to change
the speed at which the memory runs from DDR3-1600 to DDR3-1333. It booted, and still had the issues.&lt;/p&gt;
&lt;p&gt;Then I changed it to DDR3-1066.&lt;/p&gt;
&lt;p&gt;Black screen. Uh-oh.&lt;/p&gt;
&lt;h3 id=&#34;initial-troubleshooting&#34;&gt;Initial troubleshooting&lt;/h3&gt;
&lt;p&gt;Thinking that this is just a simple issue that I could get fixed by clearing the BIOS settings and starting fresh, I
looked up some basic instructions on doing so.&lt;/p&gt;
&lt;p&gt;Things I tried:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;remove the battery (even if it is completely dead, like mine), and hold the power button for 60 seconds, then attach
the battery and turn it on again.&lt;/li&gt;
&lt;li&gt;remove both the battery and disconnect the internal CMOS battery that sits under the palmrest and hold the power
button for 60 seconds again.&lt;/li&gt;
&lt;li&gt;disconnect all the batteries and leave the laptop sitting on a shelf, then try again.&lt;/li&gt;
&lt;li&gt;try &lt;a href=&#34;http://www.masnick.com/2007/09/07/the-secret-thinkpad-powerbutton-code-to-bring-dead-laptops-back-to-life/&#34;&gt;&amp;ldquo;the secret ThinkPad power button combo&amp;rdquo;&lt;/a&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; unplug the AC adapter and take out the battery. Then, you push the power button 10 times in a row at one second intervals.
Next, you push and hold the power button for 30 seconds. Then you put the battery back in and push the power button…
and she lives. The computer came back, good as ever.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After all of that, the laptop was still as good as dead. You could see the light turn on, the fan starts spinning, but
nothing shows up on the screen. At that point I knew that the BIOS reflash was probably my only choice.&lt;/p&gt;
&lt;h3 id=&#34;flashing-the-bios&#34;&gt;Flashing the BIOS&lt;/h3&gt;
&lt;p&gt;To fix the issue, I had to flash the BIOS externally. Luckily I still had the original BIOS backup images available.&lt;/p&gt;
&lt;p&gt;With the help of a good friend, we set everything up and did some tests to ensure that the connection is good and that
read/write operations on the chips return consistent results.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/bios-chips-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/bios-chips-2_hu494a80d894116ecd7af933004c8232df_4531542_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The chips that we&amp;#39;re going to flash sit behind the left side of the palmrest, making them quite easy to access.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The chips that we&amp;#39;re going to flash sit behind the left side of the palmrest, making them quite easy to access.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/bios-chips-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/bios-chips-1_hu46a36c68343dfa040220c1ab4e0891c2_1909977_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Left one is generally referred to as the bottom chip and the right one is the top one.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Left one is generally referred to as the bottom chip and the right one is the top one.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Once we had specified the correct chip type by looking at what was written on the chip package itself, we flashed both
the top and bottom chips with the original images that were once made as a backup. After reading the chips back and
comparing checksums using &lt;code&gt;md5sum&lt;/code&gt;, it all looked good.&lt;/p&gt;
&lt;p&gt;We disconnected the SOIC clip, attached the power cable and tried turning the laptop on. Power button light comes up for
1 second and then turns off. Not a good sign.&lt;/p&gt;
&lt;p&gt;We flashed both chips again and made sure that everything is in order. No dice, the symptoms are the same.&lt;/p&gt;
&lt;h3 id=&#34;a-closer-look&#34;&gt;A closer look&lt;/h3&gt;
&lt;p&gt;It didn&amp;rsquo;t take too long for me to start thinking about what I could use all these extra laptop parts for. After all, the
screen was good, it had 16GB DDR3 RAM, two SSD-s, a screen assembly in good condition etc. I was stopped in my tracks
when my friend noticed something.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/something-missing.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/something-missing_hu8e534be1057e67daa66ef38dc57a6d8a_1313701_1280x800_fit_q75_box.jpg&#34;
             width=&#34;967&#34;
             height=&#34;800&#34;
             alt=&#34;Find the missing resistor.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Find the missing resistor.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;It turns out that during this flashing process, we (probably me) had managed to get rid of a resistor that sat next to
the top flash chip. Whoops. Turns out that it was an important one, because over at
Reddit, &lt;a href=&#34;https://old.reddit.com/r/coreboot/comments/dhwdss/did_i_just_brick_my_x230/&#34;&gt;someone else also ran into this issue and had similar symptoms&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;To resolve this, my friend had the idea of putting a 10K resistor in there to see if it fixes things. The issue was that
the only one available right from the get-go was a very big one, so he had to be clever with it. He ended up positioning
it upright with a piece of wire handling the other side.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/resistor-hackjob.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/resistor-hackjob_hufd1d1e1d59896b6323124c0b3ad20fef_155808_1280x800_fit_q75_box.jpg&#34;
             width=&#34;700&#34;
             height=&#34;372&#34;
             alt=&#34;Isn&amp;#39;t it beautiful?&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Isn&amp;#39;t it beautiful?
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This, however, didn&amp;rsquo;t improve the situation much.&lt;/p&gt;
&lt;h3 id=&#34;schematics-to-the-rescue&#34;&gt;Schematics to the rescue&lt;/h3&gt;
&lt;p&gt;To understand the role of the missing resistor better, we started looking for schematics online. I managed to find an OK
looking one from a random forum and started browsing through it. The keyword of the day was &amp;ldquo;SPI&amp;rdquo; and when searching for
it, we found some promising results. My friend found the resistor and found that we could just short it, since the
resistor used to be between two wires. And that he did.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/schematics.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/schematics_hu9fac1c8905e6610fe9ecd22a50e677b2_104105_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;401&#34;
             alt=&#34;The missing resistor, as shown on the schematic.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The missing resistor, as shown on the schematic.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/the-big-short.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/the-big-short_hu9738852abd32b2020210263d78fa52e1_534202_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1250&#34;
             height=&#34;800&#34;
             alt=&#34;The big short.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The big short.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;We attempted to power on the machine again and this time the error sequence was different as the laptop went into some
sort of a party mode with lights flashing. The usual troubleshooting steps didn&amp;rsquo;t work that well here, either, so it&amp;rsquo;s
possible that the stock BIOS image did not like something here.&lt;/p&gt;
&lt;p&gt;What we did have was the option of flashing the known-good skulls image on. I handled that part quite OK, since all the
commands were in my bash history anyway. The excitement, however, got the best of me and I managed to repeat the
original mistake and I bumped the soldered piece of wire off of the board, putting us back to the original issue.&lt;/p&gt;
&lt;p&gt;After another session of carefully connecting the two wires, we repeated the steps and after the flash, we finally saw
the Skulls splash screen.&lt;/p&gt;
&lt;p&gt;It works!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/it-works-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/it-works-1_hu05b0696f2dcef68d7646365fa702f4d1_3244421_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Picture taken after the fact, because I forgot to do it initially.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Picture taken after the fact, because I forgot to do it initially.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;After booting into a Fedora 34 liveusb environment with &lt;code&gt;iomem=relaxed&lt;/code&gt;, I grabbed the latest release of skulls (
released on 4/20 🔥) and used the internal flashing method to update.&lt;/p&gt;
&lt;p&gt;Reboot, and we saw party mode again. Having used skulls in the past, I knew that this was likely down to skulls (or
coreboot) being very picky about RAM. The solution here is to reseat the RAM modules and turn it on again. Why does that
work? Not sure, but it did.&lt;/p&gt;
&lt;p&gt;To make this solution more resistant to my unintentional attempts of breaking things, I added a glob of hot glue next to
the top chip to make sure that I don&amp;rsquo;t knock anything off of the board again.&lt;/p&gt;
&lt;h3 id=&#34;testing&#34;&gt;Testing&lt;/h3&gt;
&lt;p&gt;Once the laptop was assembled again, I did some testing to see if everything still works as intended.&lt;/p&gt;
&lt;p&gt;Fedora 34 liveusb boot resulted in a black screen once, but on the second try, it worked again.&lt;/p&gt;
&lt;p&gt;Windows 10 installed fine on the machine and while some functions don&amp;rsquo;t work as well (TrackPoint and touchpad being the
prime examples here), it was still usable. Unfortunately I did not manage to write down the original Windows 10 key that
is embedded to the stock BIOS image, so I could not activate it. But hey, at least it works.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/it-works-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/it-works-2_hu894393dfcd45e00208e9e0645bfd8251_3308373_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Windows 10 also works.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Windows 10 also works.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;lessons-learned&#34;&gt;Lessons learned&lt;/h3&gt;
&lt;p&gt;Even though this adventure started with a self-inflicted wound, I still consider it a success, as I learned a couple of
things.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s very easy to get confused when reviewing how the wires should be set up on the SOIC test clip and the device
that&amp;rsquo;s actually performing the flashing.&lt;/li&gt;
&lt;li&gt;If a piece of software exposes a bunch of knobs and levers and warns you about catastrophic failures that might occur
as a result, then trust it and don&amp;rsquo;t mess with things that you have no clue about. With this example case, though, I
didn&amp;rsquo;t expect a memory speed change to result in such a catastrophic failure in the first place&amp;hellip;&lt;/li&gt;
&lt;li&gt;Developers that know hardware are worth their weight in gold.&lt;/li&gt;
&lt;li&gt;Access to schematics is very valuable when fixing hardware.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And on the final note, I would like to give a shout-out to &lt;a href=&#34;https://zirk.me/&#34;&gt;Arti Zirk&lt;/a&gt;, the guy who helped fix the
mess I created. If you need someone who is well-versed in anything related to software development, Linux and embedded
systems, then he is your guy.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/the-setup.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/06/28/breaking-and-fixing-thinkpad-x230/media/the-setup_hub2c893dec782d5ed7b75f55e71bced29_3152433_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Genius at work.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Genius at work.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;flashrom-references&#34;&gt;flashrom references&lt;/h3&gt;
&lt;p&gt;This section has some commands that might be useful to you. Unless you&amp;rsquo;re using the exact same flasher, you will probably
need to specify a different programmer with the &lt;code&gt;-p&lt;/code&gt; flag.&lt;/p&gt;
&lt;p&gt;The names and extensions for the input-output files are arbitrary. A file is a file.&lt;/p&gt;
&lt;h4 id=&#34;readingwriting-the-top-chip&#34;&gt;Reading/writing the top chip.&lt;/h4&gt;
&lt;p&gt;Note that I had to specify the chip type, otherwise &lt;code&gt;flashrom&lt;/code&gt; would complain.&lt;/p&gt;
&lt;p&gt;The top chip is 4MB and the bottom chip is 8MB. This should also be reflected in any output that you get.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--verify&lt;/code&gt; option is also useful for checking if the results are OK. I also recommend reading the image from the chip
after a write and comparing its checksum using &lt;code&gt;md5sum&lt;/code&gt;, just to be extra safe.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Read the existing image on the chip
flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r top.bin -c MX25L3206E/MX25L3208E 

# Write the specified image to the chip
flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -w top_backup.bin -c MX25L3206E/MX25L3208E 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;readingwriting-the-bottom-chip&#34;&gt;Reading/writing the bottom chip&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Read
flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r bottom.bin -c MX25L6406E/MX25L6408E

# Write
flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -w bottom_backup.bin -c MX25L6406E/MX25L6408E
&lt;/code&gt;&lt;/pre&gt;
        
        </description>
    </item>
    
    
    
    <item>
      <title>I&#39;ve reached the self-hosting endgame</title>
      <link>https://ounapuu.ee/posts/2021/05/23/self-hosting-endgame/</link>
      <pubDate>Sun, 23 May 2021 07:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/05/23/self-hosting-endgame/</guid>
      <description>
        
          
          
          
        
        
        &lt;h3 id=&#34;setup&#34;&gt;Setup&lt;/h3&gt;
&lt;p&gt;After I had a &lt;a href=&#34;https://ounapuu.ee/posts/2021/04/02/tech-tip-1/&#34;&gt;perfectly functional, quiet and performant server&lt;/a&gt; up and running, I fell
victim to my imagination and completely changed my self-hosting setup. Again.&lt;/p&gt;
&lt;p&gt;Here it is, in all its glory:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/05/23/self-hosting-endgame/media/image1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/05/23/self-hosting-endgame/media/image1_hu63b0743cd47c372dc8646af52a788bab_3274798_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Find the server.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Find the server.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Well, at least that&amp;rsquo;s what&amp;rsquo;s on the table.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/05/23/self-hosting-endgame/media/image2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/05/23/self-hosting-endgame/media/image2_hu12b911fe17f91ea97fa81a0db89546d9_2772994_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;There it is.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      There it is.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This machine is a true &lt;em&gt;all-in-one&lt;/em&gt;: it hosts all my services in a VM while also acting as my main workstation.&lt;/p&gt;
&lt;h3 id=&#34;specs&#34;&gt;Specs&lt;/h3&gt;
&lt;p&gt;CPU: AMD Ryzen 9 3900X. 12 cores and 24 threads in a consumer platform is absolutely bonkers.&lt;/p&gt;
&lt;p&gt;RAM: 32GB DDR4 @ 3200MHz&lt;/p&gt;
&lt;p&gt;Motherboard: Gigabyte B450 I Aorus PRO WIFI. It&amp;rsquo;s OK, but oh man are the newer BIOS releases buggy. At least it gives 0
hoots about flashing an older BIOS version.&lt;/p&gt;
&lt;p&gt;GPU: AMD RX 560. It gets the job done.&lt;/p&gt;
&lt;p&gt;HDD: 2x 12TB WD white-label (WD120EDAZ) drives, shucked from WD My Book external drives.&lt;/p&gt;
&lt;p&gt;SSD: 240GB Kingston A1000 NVMe for OS, 2x1TB Samsung 870 EVO SATA SSD for fast solid state storage&lt;/p&gt;
&lt;p&gt;PSU: Seasonic Focus &lt;em&gt;something-something&lt;/em&gt;. Doesn&amp;rsquo;t really matter, it&amp;rsquo;s reliable and has plenty of power.&lt;/p&gt;
&lt;p&gt;Cooling: Noctua NH-D9L on the CPU, 200mm fan at the front and 2x80mm beQuiet fans at the back to keep the system cool.&lt;/p&gt;
&lt;p&gt;Case: ThermalTake Core V1. Not the smallest case, but super simple to work in!&lt;/p&gt;
&lt;h3 id=&#34;why&#34;&gt;Why?&lt;/h3&gt;
&lt;p&gt;Before setting this up, I had three machines running:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a laptop that was always on so that there won&amp;rsquo;t be any conflicts with Syncthing.&lt;/li&gt;
&lt;li&gt;a server with server workloads&lt;/li&gt;
&lt;li&gt;a desktop that I mainly used for work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At any point in time, I had at least two machines running and the desktop was fired up for a good part of the day due to
work. Since trying to reduce my electricity usage was one of my goals with going low-power on my server, this sounded a
bit wasteful. At this point I got the brilliant idea of trying to combine this into one machine that does it all, but
before that, I had some concerns. The hardware was simple: just shuck the 12TB drives in there and get some big SSD-s
and partition them, but the software part required some thinking and testing.&lt;/p&gt;
&lt;h3 id=&#34;the-software&#34;&gt;The software&lt;/h3&gt;
&lt;p&gt;To keep the work to a minimum, I found that the easiest way to move my setup was to just put the existing server
installation into a VM. I&amp;rsquo;ve had plenty of experience with VM-s so this was not a difficult task, just install libvirt
and all the dependencies will be settled automatically.&lt;/p&gt;
&lt;p&gt;The problem is the networking. If I want the VM to show up as a separate machine on the network, I need to add a virtual
network interface as a &lt;code&gt;macvtap&lt;/code&gt; device, which means that the desktop and the VM can both connect to the internet and to
other devices on the local network, but the desktop cannot reach the VM directly. There are other solutions, such as the
default NAT-based solution, but with that, forwarding ports is quite tricky to someone not familiar with networking.&lt;/p&gt;
&lt;p&gt;To overcome this limitation, I came up with a pretty simple solution: add another network interface to the VM! This
time, the interface was set up as the NAT-based solution. To make this work, I had to make sure that the Debian 10
install was configured to use that interface as well, which meant a little copy-pasting in &lt;code&gt;/etc/network/interfaces&lt;/code&gt;. To
make the host connect to this machine using the hostname, I also added an entry to &lt;code&gt;/etc/hosts&lt;/code&gt; on the host machine to
route all requests to the hostname via this second virtual network interface.&lt;/p&gt;
&lt;p&gt;With this, the main obstacle was resolved and the host machine had no issues connecting to the VM.&lt;/p&gt;
&lt;h3 id=&#34;the-storage&#34;&gt;The storage&lt;/h3&gt;
&lt;p&gt;Since this machine was also used as a workstation, I had to be a bit clever with my storage setup. The bulk storage in
the form of two 12TB hard drives was 100% managed by the VM.&lt;/p&gt;
&lt;p&gt;The 1TB SSD-s were partitioned as such:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2x 500GB partitions for my workstation running in BTRFS mirror, since I don&amp;rsquo;t trust ZFS updates on Fedora.&lt;/li&gt;
&lt;li&gt;2x 250GB partitions for fast SSD-based ZFS mirror in the VM&lt;/li&gt;
&lt;li&gt;2x 250GB free space for overprovisioning.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the event that something does go wrong, it should not have too much of a negative impact either on the host or the
VM. If the drive quality does become a concern, there is always the option to upgrade to PRO series drives that should
have a much better endurance rating.&lt;/p&gt;
&lt;h3 id=&#34;pros-and-cons&#34;&gt;Pros and cons&lt;/h3&gt;
&lt;p&gt;With that, the setup was up and running. The VM initially had assigned 6 CPU cores and 8GB of RAM, but lately I&amp;rsquo;ve
decided to assign 12 cores and 16GB of RAM to make the most out of the available resources.&lt;/p&gt;
&lt;p&gt;So, how well does it work?&lt;/p&gt;
&lt;p&gt;Quite well, in fact. There were some hiccups, though:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the latest BIOS update for the motherboard was very buggy, which resulted in the ability to permanently get rid of
boot devices in the boot device selection menu and the annoying issue of getting stuck in POST when rebooting the
machine&lt;/li&gt;
&lt;li&gt;the VM would sometimes have issues with networking, which I attempted to fix by treating the NIC-s within the VM as
non-hotpluggable devices. This seems to have done the trick, as I have not had any issues since.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With this setup, there are some tradeoffs that you should be aware of.&lt;/p&gt;
&lt;p&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everything runs in one machine with reasonable power usage : ~70 W when idle and monitors off, ~120 W with monitors on
and a light workload&lt;/li&gt;
&lt;li&gt;Optimal utilization of resources. Instead of having to upgrade my workstation or server separately, I can just share
the resources and modify limits any time I want. Should I upgrade to 64GB of RAM in the future, I can make some more
available on the server by changing only one configuration parameter in the VM. The same goes for storage. If I were
to upgrade to something bigger and faster, then it will benefit both the workstation and the server workloads.&lt;/li&gt;
&lt;li&gt;Easier troubleshooting. In case things go wrong with the server, I don&amp;rsquo;t need to grab an external monitor and hook it
up to the server, the console is accessible via virt-manager on the host.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All eggs in one basket. If your host OS breaks something, then this will affect your server workloads as well.&lt;/li&gt;
&lt;li&gt;Noise. While not so bad with noise-cancelling headphones, it can still be annoying when you have hard drives running
at your desk.&lt;/li&gt;
&lt;li&gt;Your server workload is dependent on your host OS booting up first, which will require manual input from you if your
host installation is encrypted.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This setup worked out better than I expected, with no further issues occurring over a couple of weeks. The availability
issues during restarts are not a concern for me, as this is a hobby to me, and the flexibility and ridiculous amounts of
power this setup has outweighs all the cons.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see how long this setup lasts.&lt;/p&gt;
&lt;h3 id=&#34;2021-06-28-update&#34;&gt;2021-06-28 update&lt;/h3&gt;
&lt;p&gt;It still works like a charm!&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Tech tip: eliminate HDD humming noise</title>
      <link>https://ounapuu.ee/posts/2021/04/02/tech-tip-1/</link>
      <pubDate>Fri, 02 Apr 2021 07:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/04/02/tech-tip-1/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Anyone that has bought themselves external WD drives from the Elements/My Book/Easystore series are probably familiar
with the acoustic characteristics of the drives. The drives have a loud hum caused
by &lt;a href=&#34;https://arstechnica.com/gadgets/2020/09/western-digital-is-trying-to-redefine-the-word-rpm/&#34;&gt;WD running the drives at 7200rpm while claiming the drives to be &amp;ldquo;5400rpm-class&amp;rdquo;&lt;/a&gt;
and the clacking of the read-write heads is audible as well. In a small space, such as an apartment, the hum is
maddening, especially when you have more than one drive running at the same time.&lt;/p&gt;
&lt;p&gt;After running such a setup for months, enough was enough. I bought some sound dampening foam and used that to try to
limit the noise that my setup was making. However, that didn&amp;rsquo;t do much and the before/after noise comparisons didn&amp;rsquo;t
have much of a difference. As a result of this testing, I did have various pieces of acoustic foam left, and after I
noticed that my Lenovo M73 Tiny PC had a similar shape to the WD My Book 12 TB hard drives that I got recently, I had an
idea.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/04/02/tech-tip-1/media/image.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/04/02/tech-tip-1/media/image_hu3cd2dff577803d2344a9558f914c6e7a_2315883_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Minimum viable server, now with 90% less noise!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Minimum viable server, now with 90% less noise!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I used four pieces of foam and placed them so that I could stack the hard drives on top. This resulted in the humming
noise being completely eliminated. The sound of hard drive read-write heads is still there, but it is so much less
audible now. After this change, I have started hearing the cooling fan more than the hard drives themselves.&lt;/p&gt;
&lt;p&gt;This setup could probably be improved by switching around the setup so that the hard drives were at the bottom with the
bottom drive having additional foam or rubber feet below it to support it better. For the time being, I&amp;rsquo;m perfectly
happy with this arrangement, as long as it doesn&amp;rsquo;t fall over.&lt;/p&gt;
&lt;h3 id=&#34;2021-04-23-update&#34;&gt;2021-04-23 update&lt;/h3&gt;
&lt;p&gt;I have now added a fan to the setup!&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/04/02/tech-tip-1/media/image2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/04/02/tech-tip-1/media/image2_huc09dad7937c3b6a5b42f6fe7fed3e719_1670943_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Pretty cool, eh?&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Pretty cool, eh?
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The fan itself is powered by one of the USB ports with the help of a spare sacrificial USB cable and a Noctua omni-join
kit that I had left over.&lt;/p&gt;
&lt;p&gt;The drive temperatures are now reading around 42C and 46C.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Whacky setups: seedbox on a wall</title>
      <link>https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/</link>
      <pubDate>Sat, 20 Mar 2021 12:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;The Orange Pi Zero is one hell of an SBC. It has served as
a &lt;a href=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could&#34;&gt;Wi-Fi access point for months without issues&lt;/a&gt;
and as &lt;a href=&#34;https://ounapuu.ee/posts/2021/02/27/database-optimization-adventures-on-low-end-hardware&#34;&gt;a testbed for playing around with MySQL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I wanted it to be a useful device again, but had trouble finding an use case for it due to its hardware limitations.
After messing around with my amateur archival work, I had accumulated some data that might be worth keeping around. Due
to my network being quite unreliable and slow, I decided to go with torrents as the main distribution method. I could
have just hosted the torrents on my main server box, which is what I later did anyway, but then I realized that hosting
torrents is a workload that a weak machine could handle just as well.&lt;/p&gt;
&lt;p&gt;I took a board that was left over from a shelf, grabbed some twine and nails and banged together this monstrosity:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/media/image1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/media/image1_hu85e840f5ef7ad6964dec936e89858a6f_3483163_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The setup in all its glory.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The setup in all its glory.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/media/image2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/media/image2_hu9b359fef819013417416d829fee13ac8_3003930_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;This setup originally had two 4TB hard drives. Unfortunately one of them was too faulty for even BTRFS to handle.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      This setup originally had two 4TB hard drives. Unfortunately one of them was too faulty for even BTRFS to handle.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This brave little machine runs on &lt;a href=&#34;https://www.armbian.com/&#34;&gt;Armbian&lt;/a&gt; and hosts one Transmission instance. This instance
is a mirror for some of the data that I collect as part of my archival effort. The OS
lives on a 120GB Crucial SSD with the help of the &lt;code&gt;nand-sata-install&lt;/code&gt; script that Armbian provides, and the data lives
on one 4TB Seagate hard drive that is somehow still working.&lt;/p&gt;
&lt;p&gt;The board is pressed against the metal part of an AMD AM4 socket stock cooler with the help of a thick 5mm thermal pad
and solid copper wires taken from an electrical cable. This looks very janky, but the cooling performance is absolutely
fantastic: 30C when idling and not more than 50-60C under the heaviest workloads.&lt;/p&gt;
&lt;p&gt;The total power consumption of this setup is typically between the 5-10W range, which isn&amp;rsquo;t the lowest, but still
acceptable. The CPU is a 32-bit one, so let&amp;rsquo;s see if this board can make it to 2038.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/media/image3.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/20/whacky-setups-1/media/image3_hu7d432e26c2b17638c596616f66ec0309_2444106_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;All in all, it was just another server on the wall.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      All in all, it was just another server on the wall.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;2021-04-02-update&#34;&gt;2021-04-02 update&lt;/h3&gt;
&lt;p&gt;The 4TB Seagate HDD decided to start a career in experimental music production and started clicking and not showing up
when connected to a PC. And thus, the seedbox on a wall has been put on pause for now.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>How to start your self-hosting adventure: a high-level overview</title>
      <link>https://ounapuu.ee/posts/2021/03/17/how-to-start-your-self-hosting-adventure/</link>
      <pubDate>Wed, 17 Mar 2021 15:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/03/17/how-to-start-your-self-hosting-adventure/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Reddit is a great starting point for getting new ideas for your homelab: racks full of machines
in &lt;a href=&#34;https://www.reddit.com/r/homelab/&#34;&gt;/r/homelab&lt;/a&gt;, storage measured in terabytes (or even petabytes) over
at &lt;a href=&#34;https://www.reddit.com/r/DataHoarder/&#34;&gt;/r/datahoarder&lt;/a&gt;, all the different services that people host over at
&lt;a href=&#34;https://www.reddit.com/r/selfhosted/&#34;&gt;/r/selfhosted&lt;/a&gt;. This can be a bit overwhelming for someone just starting out in
this area, which is why I decided to write a small guide on how to start off on your self-hosting adventure.&lt;/p&gt;
&lt;h3 id=&#34;why-self-host-in-the-first-place&#34;&gt;Why self-host in the first place?&lt;/h3&gt;
&lt;p&gt;Hobbyists and professionals have a lot of different reasons for self-hosting services. These include (but are not
limited to):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it&amp;rsquo;s an excuse to play around with computer hardware and rationalize the purchase of thousands of dollars of hardware&lt;/li&gt;
&lt;li&gt;reduce reliance on &lt;a href=&#34;https://en.wikipedia.org/wiki/Big_Tech&#34;&gt;&amp;ldquo;big tech&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;the services solve an actual problem for the user (home automation, secure file storage, backups etc.)&lt;/li&gt;
&lt;li&gt;learning new tech and solutions that otherwise have not come up during their day-to-day work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Regardless of the specifics, the main part of the self-hosting experience is to just have fun and work on challenges
that you find interesting.&lt;/p&gt;
&lt;h3 id=&#34;step-0-find-a-problem-to-solve&#34;&gt;Step 0: find a problem to solve&lt;/h3&gt;
&lt;p&gt;One of the best motivators for setting up your homelab/self-hosting setup is to solve a real problem that you have.&lt;/p&gt;
&lt;p&gt;Do you want to automate your home with &lt;a href=&#34;https://www.home-assistant.io/&#34;&gt;HomeAssistant&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Or do you want your family to be able to back up their valuable photos and videos to your server
using &lt;a href=&#34;https://nextcloud.com/&#34;&gt;Nextcloud&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Or do you want to share your media collection with your family and friends using &lt;a href=&#34;https://jellyfin.org/&#34;&gt;Jellyfin&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;It doesn&amp;rsquo;t really matter what solution you end up using or how you do it, as long as it is a secure solution and that
solves your original problem without creating 10 additional ones.&lt;/p&gt;
&lt;h3 id=&#34;step-1-find-a-place-for-running-your-software&#34;&gt;Step 1: find a place for running your software&lt;/h3&gt;
&lt;p&gt;Once you have a problem that you are going to solve, you will need to also find a home for your project to live in. For
this, you have a lot of different options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;using a virtual machine at a cloud service provider (DigitalOcean, Linode etc.). Performance is not the best and
beefier configurations can be quite expensive, but this is a reliable option with a fast network.&lt;/li&gt;
&lt;li&gt;renting a server from a service provider (example: Hetzner). More performant than a virtual machine at most cloud
service providers, but probably more expensive as well. Usually comes with a fast network.&lt;/li&gt;
&lt;li&gt;an old laptop that you have collecting dust on your shelf. Not the fastest or the quietest option, but it does not use
a lot of power.&lt;/li&gt;
&lt;li&gt;an old desktop PC. Probably plenty fast for any task that you can throw at it, but its power usage is higher compared
to laptops.&lt;/li&gt;
&lt;li&gt;a tiny desktop PC. Low power usage, but can pack quite a punch. For inspiration, check
out &lt;a href=&#34;https://www.servethehome.com/introducing-project-tinyminimicro-home-lab-revolution/&#34;&gt;Project TinyMiniMicro&lt;/a&gt;
by ServeTheHome.&lt;/li&gt;
&lt;li&gt;a single-board computer, such as a Raspberry Pi or alternatives. Plenty of performance for most workloads, uses very
little power (5-15W generally) and silent as well.&lt;/li&gt;
&lt;li&gt;a second-hand rack-mounted server. Probably quite performant, but uses a lot of power and is very noisy.&lt;/li&gt;
&lt;li&gt;a NAS box from one of the more popular providers (Synology, QNAP, TerraMaster etc.). Useful for when you need a lot of
storage on your machine or something that &lt;em&gt;just works&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Your choice will likely be affected by other factors as well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;your home internet connection. If your ISP does not allow opening ports or if your upload/download speeds are not that
great, then using a cloud service provider or renting a server might be a better option for you.&lt;/li&gt;
&lt;li&gt;living in a small apartment will likely rule out noisy solutions, such as full-blown rack-mounted servers or powerful
desktop PC-s.&lt;/li&gt;
&lt;li&gt;if all you want to do is local testing, then a virtual machine on your already existing desktop/laptop PC might be a
better fit, as it does not require you to buy any new/used hardware.&lt;/li&gt;
&lt;li&gt;reliability and price of electricity. In some countries, running a server in your home might result in a huge power
bill or might not be possible at all due to the power grid being unreliable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The workloads that you plan on running will also have an effect on your chosen approach. You will need to take into
account the resources that your workload requires. It does not make much sense to get a rack-mount server for hosting
your Wordpress blog if a Raspberry Pi can do the same job just as well. On the other hand, running a CPU-heavy service
like Jellyfin on a Raspberry Pi will be a painful experience when compared to running it on a desktop PC or an
enterprise-grade server. If your service will be used by a high number of users, then you might want to opt for a more
powerful machine.&lt;/p&gt;
&lt;p&gt;Some solutions may also benefit from faster, SSD-based storage. Loading a lot of smaller files or running a big database
off of hard drives will be noticeably slower than running them off of fast SSD-s.&lt;/p&gt;
&lt;p&gt;There is no &lt;em&gt;one size fits all&lt;/em&gt; solution. It&amp;rsquo;s better to do a little bit of initial research and use the right tool for
the job. If in doubt, ask for help from someone more experienced.&lt;/p&gt;
&lt;h3 id=&#34;step-2-find-the-software-solution-that-fits-your-use-case-the-best&#34;&gt;Step 2: find the software solution that fits your use case the best&lt;/h3&gt;
&lt;p&gt;Just like with hardware, there is also a lot of choice when it comes to software.&lt;/p&gt;
&lt;p&gt;Some solutions are pretty low-level and require setting up the OS and the services manually. This is not very
user-friendly, but it offers the most potential for learning about your system and how to manage it. This approach will
likely require you to learn new things and pay more attention to automating common tasks (updates, monitoring, backups)
and making sure that everything is secure (no weak passwords, services properly isolated, regular and frequent updates
etc.). If something goes wrong, then you will need to fix it yourself, but at least you have all the tools and knowledge
to do so.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Debian with ZFS for your main storage and services running using Docker or Podman (my personal preference).&lt;/p&gt;
&lt;p&gt;There are also solutions that cater to people who just want to get work done. These solutions usually provide the user
with a web-based user interface that can manage the system and any services that run on it. Do you want to set up your
very own Wordpress blog? Just click this button and you will soon be set up with one without having to even know what
the hell a &amp;ldquo;Docker&amp;rdquo; is. The downside of this approach is that when things go wrong, you will still need to familiarize
yourself with the inner workings of the system. Troubleshooting issues with no preparation and learning new things under
stressful circumstances is not very fun.&lt;/p&gt;
&lt;p&gt;Cloud service providers have also started offering &lt;em&gt;one-click&lt;/em&gt; solutions to setting up the more popular services. your
very own Minecraft server is just a click away!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a NAS box from Synology that is aimed towards consumers&lt;/li&gt;
&lt;li&gt;VM provided and set up by Linode using a one-click solution in their web UI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then there are solutions that fit in somewhere in-between. Solutions
like &lt;a href=&#34;https://www.truenas.com/&#34;&gt;TrueNAS (formerly FreeNAS)&lt;/a&gt;
and &lt;a href=&#34;https://www.openmediavault.org/&#34;&gt;OpenMediaVault&lt;/a&gt; are made for users that can probably set things up themselves as
well, but are just too lazy to do it. Using these solutions is not in any way worse than the alternatives. If it solves
a problem and fits your use case, then go ahead and use it! Just keep in mind that you might need to peek under the hood
when there are issues where the GUI cannot help you out.&lt;/p&gt;
&lt;p&gt;As always, if in doubt, ask for assistance. It is perfectly fine for you to pick one of the user-friendlier options
first and dig deeper once you feel more comfortable. Self-hosting is not a race, you can do everything at your own pace.&lt;/p&gt;
&lt;h3 id=&#34;step-3-managing-your-setup&#34;&gt;Step 3: managing your setup&lt;/h3&gt;
&lt;p&gt;Once you have everything up and running, there are some topics that you really should pay attention to in order to avoid
big problems down the line.&lt;/p&gt;
&lt;h4 id=&#34;backups&#34;&gt;Backups&lt;/h4&gt;
&lt;p&gt;If the only copy of your files lives on your NAS and something should happen to them (accidental delete, hard drives
suddenly die, you get hit by ransomware etc.), then you are in a world of hurt. Having backups is a mandatory part of
your self-hosting adventure. A mix of automated and manual backups is better than having no backups at all.&lt;/p&gt;
&lt;p&gt;Some ideas for backups:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;external hard drive attached to your server that receives automated backups that run on an schedule. Just make sure
that any failures during the backup will be communicated to you (over e-mail, for example). It&amp;rsquo;s also a good idea to
occasionally check if the last backup was successful or not. Downside of this approach is that since this drive is
still connected to the server, it is subject to other events that can shred your data (ransomware, power surges etc.).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;offline backups that you will manually run on a regular schedule. Example: copying all files from the server to an
external hard drive on the 1st day of each month. If you accidentally delete all files on your server or a piece of
malware does this for you, or if your server is toast due to a power surge, you will still have a copy of the data
that cannot be affected by those kinds of issues.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;snapshots. While technically not a backup, snapshots do help against accidental deletes. Depending on your setup, you
might be able to retrieve files deleted a week ago if you keep snapshots of your data for the last 30 days.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a hard drive at your friends house. Helps protect against the worst case scenario where your house burns down.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(encrypted) backups to cloud storage providers, such as Backblaze, OneDrive or Google Drive. It will require a monthly
subscription, but at least you will likely have a copy of the file &lt;em&gt;somewhere&lt;/em&gt;. Just keep in mind that if you should
get locked out of the service or fail to pay for it, then you might not be able to access the data hosted at that
service.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;security&#34;&gt;Security&lt;/h4&gt;
&lt;p&gt;If you are exposing a service to the wild wild west that is the internet, then you will be a target. Automated scanners
will poke your services and if they find a vulnerability, they will use it. To prevent the worst, consider the
following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;keep everything up to date. Don&amp;rsquo;t forget that for some updates to apply (example: kernel updates), you &lt;em&gt;need&lt;/em&gt; to
restart the machine. For other services (example: ssh), they can be restarted without restarting the whole machine.
Regular updates will help prevent most security issues.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;only expose services that you absolutely need to expose. With something like a web server, you really don&amp;rsquo;t have a lot
of choice here, but with services aimed towards a known set of users, you can limit the exposed surface area by using
a VPN or enforcing other restrictions (whitelisted IP addresses, fail2ban to block most intrusion attempts, etc.).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;make sure that your configuration is correct. A lot of intrusions are caused by configuration issues that usually end
up with a service being exposed to the web without any passwords or other protections set up. It&amp;rsquo;s a good idea to
check if you are accidentally exposing too much by checking what others are seeing when they try to connect to your
service.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;try to set up your services so that you are prepared for an intrusion. If the attacker is able to take control of
service X, but it is completely isolated from other services and devices on the network, then the damage they can do
is likely limited.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;monitoring&#34;&gt;Monitoring&lt;/h4&gt;
&lt;p&gt;Your setup will likely have issues. Hard drives might die, or the CPU might be overheating due to years of dust
accumulation, or one service might be using up all the available resources, causing others to slow down as well. A
better understanding of what your system is doing will help out a lot here.&lt;/p&gt;
&lt;p&gt;Cloud hosting service providers usually provide at least a basic level overview of your resource usage: CPU, RAM, disk,
network etc. If you are running your own machine, then you will need to figure this out on your own.&lt;/p&gt;
&lt;p&gt;To understand what your system is doing, a tool like &lt;a href=&#34;https://www.netdata.cloud/&#34;&gt;Netdata&lt;/a&gt; is a good starting point. If
your server slows down, then you can most likely pinpoint the reason by looking at the resource indicators.&lt;/p&gt;
&lt;p&gt;It is not realistic for you to keep an eye on all the indicators all the time, so having some kind of alerting set up is
also a great idea. Events, such as a hard drive starting to throw errors, the CPU usage being at 100% for more than an
hour, or a service not being reachable, are all something that you might be interested in hearing about.&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t have to monitor everything and have alerts set up to catch everything, but it is a great starting point for
responding to issues proactively. Ending up with all your data lost because you did not hear about hard drive failures
is not a great situation to be in.&lt;/p&gt;
&lt;h3 id=&#34;what-next&#34;&gt;What next?&lt;/h3&gt;
&lt;p&gt;If you have reached this point, then you are probably aware of most of the topics that will come up during your
self-hosting adventure. You will encounter issues that will be specific to the approach that you have chosen at the
hardware and software steps, but that&amp;rsquo;s perfectly normal. Most of these issues have solutions that are one search away,
and if you have trouble figuring something out, then feel free to ask for help!&lt;/p&gt;
&lt;p&gt;If you need new ideas, then check out the subreddits mentioned at the start of this post, you might find some gems in
there! Do keep in mind that you will likely end up in an endless loop of building something, being happy with it for a
week and finding something else to try out. It&amp;rsquo;s really fun, though.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>My server setups throughout the years</title>
      <link>https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/</link>
      <pubDate>Wed, 17 Mar 2021 10:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;My self-hosting adventure started during my university days. Once I actually had money to buy myself a decent used laptop
(ThinkPad T430) that had more than 3GB of RAM that my ThinkPad T60 had, I could use some of my older hardware as
testbeds for any of the stupid ideas that I had. For someone that liked to learn more about Linux and wanted any excuse
to play around with hardware, something like a RAID0 setup over 4 80GB Samsung hard drives on an old PC setup sounded great.&lt;/p&gt;
&lt;p&gt;I also had a small collection of data that I had on an 1TB external hard drive, and I wanted to also have backups of
the data that lived on my laptop. This was the main motivation for setting up a machine that would serve as a NAS and
a testbed for anything that I wanted to try out.&lt;/p&gt;
&lt;h3 id=&#34;the-first-box-amd-athlon-64-x2-4200-based-pc&#34;&gt;The first box: AMD Athlon 64 X2 4200+ based PC&lt;/h3&gt;
&lt;p&gt;At this point in time, I didn&amp;rsquo;t really have any names for my systems. They were simply named by the model of the machine
or whatever else I had in mind.&lt;/p&gt;
&lt;p&gt;One of the first &amp;ldquo;server&amp;rdquo; builds that I built was based on some old parts I had lying around. The CPU was from an old
family PC that we got in 2006, and to this date, it is the only surviving component from that build. The motherboard
was from a place that collected old hardware and resold some of it and if I remember correctly, it was the &lt;em&gt;abit KN9 Ultra&lt;/em&gt;.
AM2 socket, DDR2, 6 SATA ports, all that good stuff. This was coupled with 4GB of DDR2 memory. Not much, but it is a start.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/amd.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/amd_hu9a045dce8ed5c291bcb991c1d049ef83_5017987_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The heart of the system. It wasn&amp;#39;t fast nor power efficient, but at least I had something.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The heart of the system. It wasn&amp;#39;t fast nor power efficient, but at least I had something.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The details regarding the hard drive situation are a bit hazy, but at least initially it hosted whatever drives I had around.
At some point I managed to buy 8x 500GB hard drives to test out ZFS on a big array. This was mainly inspired by &lt;a href=&#34;https://www.reddit.com/r/buildapc/comments/6cn1wk/build_complete_alice_a_32tb_server_in_an_nzxt/&#34;&gt;the glorious
32TB server build in an NZXT S340 case&lt;/a&gt;
that someone showed off in Reddit. I&amp;rsquo;m still surprised that it was acceptable for me to be in the same room as that
monstrosity.&lt;/p&gt;
&lt;p&gt;This setup ran well for a while and there weren&amp;rsquo;t any hardware issues with this setup. Drives were OK, speed was acceptable,
and ZFS did its job well, since this was all a big RAID-Z3 array. I even removed two drives temporarily to put in a GPU
at one point and ZFS did not complain. After putting the drives back in, the drives were resilvered and all was good.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/amd-v2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/amd-v2_hu1d3f723e57ce8e73a8540de6ffcf1771_2877826_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The server box running a more sensible setup of less than 8 hard drives.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The server box running a more sensible setup of less than 8 hard drives.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;the-engoodening-of-my-server-amd-ryzen&#34;&gt;The engoodening of my server: AMD Ryzen&lt;/h3&gt;
&lt;p&gt;2017-2018 was wild in the world of CPU-s. AMD came in with some well-designed CPU-s that provided a much better value
proposition than the competing Intel CPU-s at the time. The value was insane: double the cores for the same price!
It didn&amp;rsquo;t take much for me to be convinced that the next server build will be an AMD Ryzen based machine, and as soon as
I had the resources, I got myself parts for doing that upgrade.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/amd-ryzen-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/amd-ryzen-1_hu98477b919e75c97697440d9114215e32_4006210_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Picture taken moments before a lot of fun was had.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Picture taken moments before a lot of fun was had.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The build wasn&amp;rsquo;t without hiccups, though. I discovered that cats &lt;em&gt;really&lt;/em&gt; like playing around with screws and walking on
all the expensive computer parts that took up half of the free space in the apartment. Nevertheless, I managed to complete
the build.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/hdd-migration.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/hdd-migration_hud96f2e593f429bf22a7b7b66c3cdff62_4392214_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;How to migrate from an 8x HDD setup to something more sensible.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      How to migrate from an 8x HDD setup to something more sensible.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/amd-ryzen-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/amd-ryzen-2_hu31998f6754d53c547d2d6a0668a5fc3e_6183845_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;New parts, new drives.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      New parts, new drives.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;laptop-as-a-server&#34;&gt;Laptop-as-a-server&lt;/h3&gt;
&lt;p&gt;Due to reasons that have no rational explanations, I started looking into switching out this perfectly working server
machine into something more power efficient. The CPU sat idle most of the time and I figured that I could use the machine
somewhere else.&lt;/p&gt;
&lt;p&gt;And thus, one of the stupidest server builds was born: a ThinkPad X230 serving as a server, with two 4TB WD Red hard drives
attached over USB 3.0, running BTRFS RAID1. I do not have pictures of the setup, but this was pretty much it. I learned
soon after that cats like climbing on things and that they have no understanding of the amount of force that is required to
temporarily disconnect the USB 3 cable from the laptop. This is the part where BTRFS failed on me and I actually lost data
in the array. Luckily I had &lt;em&gt;working&lt;/em&gt; backups.&lt;/p&gt;
&lt;p&gt;Not long after this incident, I started looking for alternatives.&lt;/p&gt;
&lt;h3 id=&#34;low-power-but-still-somewhat-usable&#34;&gt;Low power, but still somewhat usable?&lt;/h3&gt;
&lt;p&gt;My search criteria was quite simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;low power (ruled out any desktop builds)&lt;/li&gt;
&lt;li&gt;x86 based (no OS lock-in)&lt;/li&gt;
&lt;li&gt;hosts at least 2 drives over SATA&lt;/li&gt;
&lt;li&gt;reasonably priced&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The closest match I could find was the &lt;a href=&#34;https://www.terra-master.com/global/f2-221.html&#34;&gt;TerraMaster F2-221&lt;/a&gt;. It has a
low-power Intel CPU, standard UEFI implementation, fits two drives and has two SATA ports. The only part that it really
didn&amp;rsquo;t fit under well was the reasonable cost aspect, but it was still much more affordable than the alternatives.&lt;/p&gt;
&lt;p&gt;Around this time I also discovered the world of &lt;a href=&#34;https://www.reddit.com/r/DataHoarder/comments/7fx0i0/wd_easystore_8tb_compendium/&#34;&gt;shucking&lt;/a&gt;.
I got myself two 8TB WD MyBook drives and used them in this build. However, what I did not take into account was the noise.
These 8TB drives were much louder than the 4TB WD Red drives that I used previously, and allegedly this is due to WD labelling
these drives as &amp;ldquo;5400-rpm class&amp;rdquo;, even though they actually run at 7200 rpm. The TerraMaster NAS unit had no vibration
dampeners or other methods to isolate the noise, so I had to stick it in a closet.&lt;/p&gt;
&lt;p&gt;The TerraMaster build was otherwise great. I could upgrade the RAM to 10GB using the available DDR3 SODIMM slot on the
board, and the services that ran on it were fine. This thing could even run Jellyfin, assuming that you utilized the
integrated GPU to provide hardware acceleration for transcoding video.&lt;/p&gt;
&lt;p&gt;However, there were some limitations for this setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OS lives on an USB drive. Generally fine, but depending on your setup you could pick between internal USB 2.0 ports or
one of the USB 3.0 ports at the back.&lt;/li&gt;
&lt;li&gt;When you have lots of small files and a database on the system as well, the lack of SSD base storage became quite
painful. You could do it over the available USB 3.0 ports on the back, but that&amp;rsquo;s it.&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/terramaster.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/terramaster_huecafd8d0c689df291c687de38a0576af_1721632_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Yes, that is an mSATA drive in an USB enclosure stuck inside the TerraMaster chassis.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Yes, that is an mSATA drive in an USB enclosure stuck inside the TerraMaster chassis.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;back-to-the-desktop&#34;&gt;Back to the desktop&lt;/h3&gt;
&lt;p&gt;Due to a combination of me getting two ITX builds and having workloads that are performance-sensitive (PostgreSQL,
Nextcloud, Jellyfin), I decided to go back to where I started from and put the setup back into a desktop case.
For that purpose, I picked the &lt;a href=&#34;https://uk.thermaltake.com/core-v1.html&#34;&gt;Thermaltake Core V1&lt;/a&gt;, mainly due to how easy it
is to build in it and it having room for 2x8TB hard drives and 2x 2.5&amp;quot; SSD-s.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/desktop-server-1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/desktop-server-1_hu14966252d29ffda07d7b73dd02cb0e75_2166008_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Clean and performant server setup.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Clean and performant server setup.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/desktop-server-2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/desktop-server-2_hub321657782123040578f6e098f35d1ea_1765462_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;For future historians: yes, even servers had RGB in 2020.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      For future historians: yes, even servers had RGB in 2020.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;This box was very fast. Too fast, in fact. It also used quite a lot of power. 70-120W doesn&amp;rsquo;t sound like much, but when
this box is supposed to run for 24 hours a day, this really adds up. I had reached my storage target, the performance was
acceptable and everything was working, which meant that the next logical step is to change the setup and hit some limits
again.&lt;/p&gt;
&lt;h3 id=&#34;quest-for-low-power-usage&#34;&gt;Quest for low power usage&lt;/h3&gt;
&lt;p&gt;At this point, I had made it a game for myself to try to go as low as possible with the power usage of my setup while also
running my workloads at an acceptable performance level. From my previous meddling, I had a ThinkPad T430 that now boasts
16GB of RAM and a 4-core Intel i7 3820QM quad-core CPU, which is plenty of performance. This laptop also houses up to three
SSD-s, which meant that having performant storage around over SATA was also not an issue. The main storage (2x 8TB)
was attached over USB 3.0. Not the best solution, but ZFS has handled these kinds of setups very well in my past
experience.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/t430-server.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/t430-server_hu2b8407867b2bc39674f03cc482fa7c01_1803790_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Sure, it&amp;#39;s low power, but the cables are a mess.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Sure, it&amp;#39;s low power, but the cables are a mess.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;can-we-go-even-smaller&#34;&gt;Can we go even smaller?&lt;/h3&gt;
&lt;p&gt;Recently I have learned about tiny form factor machines produced by big OEM-s, such as Dell, HP and Lenovo. These
machines are very compact, but can pack quite a punch with a desktop-level CPU and the ability to put in 16+GB of RAM
while being powered by a laptop power supply. The only downside of these builds is that the internal storage can be limited
to 1-2 drives (SATA or M.2 form factor) and not all USB ports might be USB 3.0.&lt;/p&gt;
&lt;p&gt;Once I stumbled upon one offer for a Lenovo M73, I knew that I had to try this kind of setup out. Initially I was thinking
of using such a machine for media center purposes, but after I accidentally configured one too many UEFI settings for my
ThinkPad X230 in the advanced BIOS settings, I needed a replacement laptop. And thus, the ThinkPad T430 based server
was replaced by the M73. I did have to limit the CPU power usage using &lt;code&gt;intel_pstate&lt;/code&gt; driver and the USB 3.0 ports
needed a bit of bending so that they aren&amp;rsquo;t loose, but other than that it has been smooth sailing.&lt;/p&gt;
&lt;p&gt;This is where the story ends for now. The machine takes about 13-15W when idling, and with 4 8TB external hard drives
attached, the typical power usage is between 40-55W. I am planning on replacing the 4 drives with 2 high-capacity drives,
something like a WD Elements/MyBook 14TB once those go on sale.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/lenovo-m73.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/03/17/server-setups-throughout-the-years/media/lenovo-m73_hu213fcc0ac78d601bc735238c2bfb774f_1857759_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The current setup in all its glory. Don&amp;#39;t worry, the cable mess is temporary until I get a PSU that can supply all the drives at once.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The current setup in all its glory. Don&amp;#39;t worry, the cable mess is temporary until I get a PSU that can supply all the drives at once.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;future-plans&#34;&gt;Future plans&lt;/h3&gt;
&lt;p&gt;This is probably where the setup changes will stop for a while. I occasionally play around with some alternative setups to try
to go even lower (Raspberry Pi 4), but so far this setup has proven to be the &lt;em&gt;minimum viable server&lt;/em&gt;. It does everything
that I need, the power usage is low and it has room for expandability with regards to services that I can run on it.&lt;/p&gt;
&lt;p&gt;If I had to start from scratch, then I would probably opt for an &lt;a href=&#34;https://www.asrock.com/nettop/AMD/DeskMini%20X300%20Series/index.asp&#34;&gt;AsRock Deskmini X300&lt;/a&gt;.
It has the same power efficiency benefits, but you could install a more powerful CPU, a lot of RAM and up to 4 SSD-s,
two of which can be NVMe drives.&lt;/p&gt;
&lt;p&gt;The bulk storage would still be over USB 3.0, but that comes with its own benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you can not go over a reasonable amount of drives, meaning that your wallet will be happy.&lt;/li&gt;
&lt;li&gt;you do not need to shuck the drives, you can use them as-is and get warranty service without issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This has been my self-hosting journey throughout the years. I hope that it was at least somewhat interesting and maybe
gave you some ideas to test out on your own.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>My attempt at archiving nfscars.net</title>
      <link>https://ounapuu.ee/posts/2021/03/01/my-attempt-at-archiving-nfscars.net/</link>
      <pubDate>Mon, 01 Mar 2021 09:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/03/01/my-attempt-at-archiving-nfscars.net/</guid>
      <description>
        
          
          
          
        
        
        &lt;h3 id=&#34;background&#34;&gt;Background&lt;/h3&gt;
&lt;p&gt;My mother once had a laptop: the Compaq Armada 1592DT. It came with Windows ME which later got &amp;ldquo;upgraded&amp;rdquo; to Windows 98 SE
after I managed to completely screw up the OS, a whopping 96MB of RAM and a hard drive that probably wasn&amp;rsquo;t much larger
than 1-3GB. It wasn&amp;rsquo;t powerful or anything, but some of my earliest memories of playing video games on that thing were
related to Sports Car GT and Need for Speed III Hot Pursuit. Yes, both were demos, and the performance was probably in
the 10-20FPS range, but it was still great for a younger me. That laptop eventually got replaced by a Windows 98 based
desktop which wasn&amp;rsquo;t a lot better with its 64MB of RAM, but it could play RuneScape (barely) and also Need for Speed III.&lt;/p&gt;
&lt;p&gt;Need for Speed III Hot Pursuit holds a very special place in my heart. It looked great at the time, the police chases were
fun and challenging, the soundtrack was fantastic and the track featured in the demo (Rocky Pass) is still something I
could probably draw up from memory, assuming that I could draw. At some point I discovered that it is possible to mod
the game to include new cars and tracks, which resulted in ridiculous speeds, cars that could absolutely destroy the
police cars, and lots and lots of game crashes. One of the sources for these mods was &lt;a href=&#34;https://www.nfscars.net/&#34;&gt;nfscars.net&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;nfscarsnet&#34;&gt;nfscars.net&lt;/h3&gt;
&lt;p&gt;Depending on when you will be reading this, nfscars.net is/was a website that hosts/hosted thousands cars, tracks and other
mods for various Need for Speed titles. In 2020, I decided to check this site out again to see if it is still operational.&lt;/p&gt;
&lt;p&gt;The last post referred to an &amp;ldquo;upcoming&amp;rdquo; NFS title that was already released a year ago.&lt;/p&gt;
&lt;p&gt;The link to the forums resulted in an error page being shown.&lt;/p&gt;
&lt;p&gt;Should the site suddenly disappear without any warning, all the content would be lost. Since I have a small datahoarding
bug, I decided to take matters into my own hands and do my best to archive the contents of the site. That, and nostalgia
for the old Need for Speed titles was what pushed me to start this archiving adventure.&lt;/p&gt;
&lt;h3 id=&#34;initial-efforts&#34;&gt;Initial efforts&lt;/h3&gt;
&lt;p&gt;Before trying any fancy technical solutions to crawl the site and get all of the assets that way, I decided to start from
the source and tried contacting the site owner to arrange the download of the assets. That did not work out at all,
since the contact e-mails were either not active or the inboxes were full.&lt;/p&gt;
&lt;p&gt;I signed up for the site and tried to message some user accounts which hopefully were related to someone who was in charge.
No dice.&lt;/p&gt;
&lt;p&gt;There is a small chatroom on the site named &amp;ldquo;Shoutbox&amp;rdquo;, so I tried asking about the site owners there. It seems that a
couple of users are still occasionally chatting there, mainly about random topics and spammy users. Unfortunately none
of the users there - even the moderators - could not assist with setting up a backup of the site.&lt;/p&gt;
&lt;p&gt;With the domain (potentially) expiring on 2021-05-02, I felt like I had to act now, because the site was probably running
on borrowed time.&lt;/p&gt;
&lt;h3 id=&#34;technical-solutions&#34;&gt;Technical solutions&lt;/h3&gt;
&lt;p&gt;I checked a selection of solutions for performing a crawl on the site and decided on &lt;a href=&#34;https://github.com/internetarchive/heritrix3&#34;&gt;Heritrix&lt;/a&gt;,
mainly due to this being backed by the &lt;a href=&#34;https://archive.org/&#34;&gt;Internet Archive&lt;/a&gt;.
If they cannot get archiving right, then who can?&lt;/p&gt;
&lt;p&gt;Setting up Heritrix turned out to be quite a hassle. There does not seem to be a quick guide that you can follow to
get started in 5 minutes. After stumbling around, learning the config file format and understanding that the best way
to configure crawls was to do it externally with a text editor, I was set up to launch my first crawl. Even then, I hit
some roadblocks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The crawl was slow. I understand that Heritrix is just trying to be polite here, but if you have millions of URL-s to
crawl and the site might go down at any moment, then time really isn&amp;rsquo;t on your side.&lt;/li&gt;
&lt;li&gt;Checkpointing is supported, but for some reason the default configuration does not enable it. If the machine that you
are running this on should restart, then your crawl will be stopped and you cannot resume at that point, you can only start
over.&lt;/li&gt;
&lt;li&gt;Heritrix is based on Java, which means that &lt;em&gt;theoretically&lt;/em&gt; it should run on anything that runs Java, such as an ARM
CPU based SBC. However, I ran into weird &lt;code&gt;java.nio&lt;/code&gt; related issues with symlinking on those platforms and I just could
not get them resolved.&lt;/li&gt;
&lt;li&gt;If you run too many crawls at once, then Heritrix is perfectly capable of killing your LAN by using up all the available
connections. It managed to rack up 16000+ active connections, which hit the 16384 connection limit on my consumer-grade
router. That was not fun to debug.&lt;/li&gt;
&lt;li&gt;Automatically continuing crawls from a checkpoint on system startup requires you to use the Heritrix API, which isn&amp;rsquo;t
too complicated, but I just wish that this was another feature that it supported out of the box.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After messing up a couple of times and trying again, I finally managed to complete a crawl of the site. This only took 6 months,
where the crawl itself ran for 3 months. &lt;strong&gt;&lt;em&gt;MONTHS!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;what-the-hell-is-a-warc&#34;&gt;What the hell is a WARC?&lt;/h3&gt;
&lt;p&gt;Heritrix collects the results of the crawl into a special format called &lt;a href=&#34;https://en.wikipedia.org/wiki/Web_ARChive&#34;&gt;WARC&lt;/a&gt;,
which it then compresses, resulting in lots of little &lt;code&gt;.warc.gz&lt;/code&gt; files. If you extract one of these, you will end up with
a &lt;code&gt;.warc&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;To extract files from a WARC file, you need &lt;a href=&#34;https://wiki.archiveteam.org/index.php/The_WARC_Ecosystem&#34;&gt;one of these tools listed here&lt;/a&gt;.
After trying a couple, I decided to go with &lt;a href=&#34;https://github.com/chfoo/warcat&#34;&gt;warcat&lt;/a&gt; since it seemed to mostly work and
it supported combining smaller WARC files into bigger ones and extracting the contents.&lt;/p&gt;
&lt;p&gt;Depending on the size of the site, the extracting process might take a while. Crawls can contain thousands or even millions
of small little files, and if you are using hard drives for storing these, then it will be slow. I have not done testing
on an SSD, but it will probably be much faster due to its superior random I/O performance.&lt;/p&gt;
&lt;p&gt;Once I had extracted the contents, I did some checking to see if the assets that I care about are present in the crawl.
Did a file search for a modded car in Need for Speed III.&lt;/p&gt;
&lt;p&gt;No results.&lt;/p&gt;
&lt;p&gt;Okay, that&amp;rsquo;s odd. Tried it with another file name.&lt;/p&gt;
&lt;p&gt;No results.&lt;/p&gt;
&lt;p&gt;Well, what &lt;em&gt;do&lt;/em&gt; we have? I checked the extracted contents using &lt;code&gt;ncdu&lt;/code&gt; and found that while Heritrix managed to grab a lot
of the webpages and the images from the galleries, it failed to download files, such as .zip and .rar files that contain
the modifications themselves.&lt;/p&gt;
&lt;h3 id=&#34;getting-the-final-pieces-of-the-puzzle&#34;&gt;Getting the final pieces of the puzzle&lt;/h3&gt;
&lt;p&gt;I started investigating the download functionality of the site. On every page load, the download link would have a new
identifier attached to it. Upon clicking on it, the download would start. If you wait too long, then the download link
would expire.&lt;/p&gt;
&lt;p&gt;Firefox has a handy feature where you can copy the request into a &lt;code&gt;curl&lt;/code&gt; command. I did that, added some parameters to it
so that it would use the filename that comes from the response header and made it save the file to disk. It worked!&lt;/p&gt;
&lt;p&gt;Now I had to figure out how to collect all of these download links. The site has sections for each game, which is also
reflected in the URL. However, I found that when you navigate to the page of a mod and change the numerical ID at the end,
you could cycle through all the cars, tracks and other tools for &lt;em&gt;all&lt;/em&gt; games, even if the URL was technically referring
to one game in the series.&lt;/p&gt;
&lt;p&gt;After bashing around for a while, I came up with this masterpiece:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;cd /your/download/destination &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; exit &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; index in &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;1..18050&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Index at &lt;/span&gt;$index&lt;span style=&#34;color:#e6db74&#34;&gt;, starting.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  filePath&lt;span style=&#34;color:#f92672&#34;&gt;=(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;curl --silent https://www.nfscars.net/need-for-speed-hot-pursuit/1/files/view/$index/ -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Cookie: csrftoken=XXX; sessionid=YYY&amp;#39;&lt;/span&gt; | grep -oE &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;files/download/send/[0-9]+/[0-9a-zA-Z]+&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;File path: &lt;/span&gt;$filePath&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Making directory &lt;/span&gt;$index&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  mkdir -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$index&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Going into directory &lt;/span&gt;$index&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  cd $index
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; path in &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;filePath[@]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Starting download on path https://www.nfscars.net/&lt;/span&gt;$path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    curl --silent &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.nfscars.net/&lt;/span&gt;$path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0&amp;#39;&lt;/span&gt; -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8&amp;#39;&lt;/span&gt; -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Accept-Language: en-US,en;q=0.5&amp;#39;&lt;/span&gt; --compressed -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Connection: keep-alive&amp;#39;&lt;/span&gt; -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Referer: https://www.nfscars.net/need-for-speed-hot-pursuit/1/files/view/1/&amp;#39;&lt;/span&gt; -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Cookie: csrftoken=XXX; sessionid=YYY&amp;#39;&lt;/span&gt; -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Upgrade-Insecure-Requests: 1&amp;#39;&lt;/span&gt; -OJ
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Download &lt;/span&gt;$path&lt;span style=&#34;color:#e6db74&#34;&gt; done.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  cd /your/download/destination 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Back in home dir. Index &lt;/span&gt;$index&lt;span style=&#34;color:#e6db74&#34;&gt; end.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Not the prettiest script around, but it did the trick. In a day or so the assets were downloaded and you could use the
index to connect these to a page that is contained in the crawl.&lt;/p&gt;
&lt;h3 id=&#34;results&#34;&gt;Results&lt;/h3&gt;
&lt;p&gt;All this effort would be for nothing if I didn&amp;rsquo;t share my results, so I decided to pack these up and serve them for anyone
that wants to keep a backup of at least one part of Need for Speed history.&lt;/p&gt;
&lt;p&gt;The archived content can be found &lt;a href=&#34;https://archive.org/details/nfscars.net.2020.&#34;&gt;on the Internet Archive&lt;/a&gt;.
&lt;a href=&#34;https://archive.org/details/nfscars.net.2021&#34;&gt;Here&amp;rsquo;s a newer crawl from 2021.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The torrent files are also mirrored here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://ounapuu.ee/misc/archive/torrents/nfscars.net.2020.zip.torrent&#34;&gt;2020 crawl&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://ounapuu.ee/misc/archive/torrents/nfscars.net.2021.zip.torrent&#34;&gt;2021 crawl&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pieces of history get lost all the time with sites going offline. I&amp;rsquo;m hoping that at least with this effort I have managed
to do my part in preserving a tiny piece of it.&lt;/p&gt;
&lt;h3 id=&#34;2021-03-15-update&#34;&gt;2021-03-15 update&lt;/h3&gt;
&lt;p&gt;The site seems to be down at the moment and has been for a couple of days. Oh no.&lt;/p&gt;
&lt;h3 id=&#34;2021-03-20-update&#34;&gt;2021-03-20 update&lt;/h3&gt;
&lt;p&gt;Somehow the site is alive again.&lt;/p&gt;
&lt;h3 id=&#34;2024-08-20-update&#34;&gt;2024-08-20 update&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s dead.&lt;/p&gt;
&lt;p&gt;However, I&amp;rsquo;m delighted to &lt;a href=&#34;https://www.reddit.com/r/needforspeed/comments/1dc6bva/comment/l9otz0z/&#34;&gt;find people using this archive to get their favourite mods!&lt;/a&gt;&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Database optimization adventures on low-end hardware</title>
      <link>https://ounapuu.ee/posts/2021/02/27/database-optimization-adventures-on-low-end-hardware/</link>
      <pubDate>Sat, 27 Feb 2021 15:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/02/27/database-optimization-adventures-on-low-end-hardware/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I used to work on a short-term project a while ago where the goal was to visualize some metrics that were collected from
a pretty fancy smart home setup. This data included power usage of various sections of the building, temperature
sensors, water usage levels and more. The data itself was collected by a proprietary piece of software that sent this
data to a MySQL database. My job was to understand the data, get useful values from the binary data and visualize it.&lt;/p&gt;
&lt;h3 id=&#34;the-hardware&#34;&gt;The hardware&lt;/h3&gt;
&lt;p&gt;While testing out this solution, I started with an &lt;a href=&#34;http://www.orangepi.org/orangepizero/&#34;&gt;Orange Pi Zero&lt;/a&gt; that a good
friend had given to me. You might remember this board
from &lt;a href=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/&#34;&gt;a previous adventure&lt;/a&gt;. This board boasts a whopping 4 ARM 32-bit
CPU cores running at 1000MHz, 100 Mbps networking and one USB 2.0 port. The slow USB port means that the read speeds
for any storage you attach to it will be capped out at 40 MB/s.&lt;/p&gt;
&lt;p&gt;With all of this in mind, I still went ahead and built this monstrosity. I took a 480 GB Kingston SSD that was lying in
a box and connected it to the board.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/02/27/database-optimization-adventures-on-low-end-hardware/media/image1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/02/27/database-optimization-adventures-on-low-end-hardware/media/image1_hu38e787918bb50c644a4cf3d763154c9d_259138_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;I&amp;#39;m pretty sure that the PCB of the SSD itself is larger than the SBC itself.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I&amp;#39;m pretty sure that the PCB of the SSD itself is larger than the SBC itself.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;the-workload&#34;&gt;The workload&lt;/h3&gt;
&lt;p&gt;This server had two jobs: collect the incoming data from sensors to a MariaDB instance and visualize it using a tool
like Grafana. The first part was OK, since the amount of incoming data was not that high and the SBC could handle it.
However, I hit some roadblocks when trying to visualize it.&lt;/p&gt;
&lt;p&gt;The first hurdle was to convert the binary values into something usable. Going by the documentation, I could figure out
how to show signed and unsigned integer values correctly by utilizing some SQL magic that did the conversions
more-or-less correctly. However, with other data types, such as floating-point values of varying precision and other fun
formats, I could not use the same methods to perform the conversion.&lt;/p&gt;
&lt;p&gt;The second hurdle was performance. The incoming data was put into one table, which would periodically get split up on a
month-by-month basis to avoid the table getting too big. Not a bad solution, but since I was planning on using Grafana,
having all the data in one table was the only sensible solution if I wanted to show data for previous months as well.
This meant that I had one big table with all the important data, plus some adjacent ones that provided details for the
sensor/meter type, its value type (integer, floating point, etc.) and more. Performing &lt;code&gt;SELECT&lt;/code&gt; statements with a couple
of joins proved to be a headache: the queries would trigger a full table search, which was very painful on a system
where the maximum read speed of the SSD is 40 MB/s. Understandably, lookups on a database that was already at a couple
of gigabytes in size and growing would be slow even for shorter time spans (30 days).&lt;/p&gt;
&lt;p&gt;These limitations meant that in its current state, the solution was pretty limited in functionality and very slow to use
as well.&lt;/p&gt;
&lt;h3 id=&#34;the-solution&#34;&gt;The solution&lt;/h3&gt;
&lt;p&gt;I soon learned that the company behind the hardware and software of this system provides a tool which can be used
to connect to the database and read the collected data, with values converted properly and sensor/meter names provided
as well. And to top it all off, this thing was written in Java!&lt;/p&gt;
&lt;p&gt;I decided to dig around in the provided &lt;code&gt;.jar&lt;/code&gt; file using IntelliJ IDEA and stumbled upon some interesting files. These files
corresponded to different data types, and also contained the logic that was used to convert the binary data to usable
values. I can only guess that this conversion was made with the goal of keeping the database size as small as possible,
or to just avoid users from using this data for other purposes using tools made by other companies.&lt;/p&gt;
&lt;p&gt;There were still the performance issues to resolve. I looked into optimizing MySQL/MariaDB tables and queries and
stumbled upon some useful tips and tricks. While I cannot remember the exact details, I did end up testing the different
DB engines (InnoDB vs whatever they had previously), configuring various cache sizes and limits, indexes on various
column types, investigating query plans and the performance benefits of &lt;a href=&#34;https://en.wikipedia.org/wiki/Denormalization&#34;&gt;denormalization&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And then it clicked.&lt;/p&gt;
&lt;p&gt;What if I wrote a small Java service that would handle the data conversion &lt;em&gt;and&lt;/em&gt; put all the data into one table that
holds only the relevant data and has the correct set of indexes set up? The service would periodically check the main table that
collected all the data, select the results, convert the value into something that a human can understand, and then
insert it into a new table that is optimized for read performance.&lt;/p&gt;
&lt;p&gt;After hours of work, I had this Java service up and running on the underpowered server and started testing this
solution. Queries that would previously take minutes to run, would now finish within seconds. Even queries with a time
window of 90+ days would still finish within 5 seconds. This improvement in performance is further amplified by the fact
that Grafana is able to show multiple graphs at the same time, resulting in multiple queries running at the same time.&lt;/p&gt;
&lt;h3 id=&#34;deployment&#34;&gt;Deployment&lt;/h3&gt;
&lt;p&gt;The hardware that I tested this solution on was pretty neat and used up very little power. The total cost with the SSD
included was roughly in the 100-150 euro range. However, it was decided that the deployment would be done on a more
conventional machine.&lt;/p&gt;
&lt;p&gt;I went ahead and built a tiny PC based on
the &lt;a href=&#34;https://www.asrock.com/nettop/amd/deskmini%20a300%20series/index.asp&#34;&gt;AsRock Deskmini A300&lt;/a&gt;. The build included a
dual-core AMD Athlon APU (cut-down version of a Ryzen APU), 16 GB of DDR4 RAM because it
cost just as much as an 8 GB DDR4 kit did at the time, one 120 GB SATA SSD for the OS, two 512GB Kingston A1000 NVMe SSD-s for the main storage (ZFS
mirror) and a cheap 480 GB Kingston A400 SATA SSD for local backups. This whole build fit in a 500 euro budget and was a
bit overkill for the purpose, but the performance that you could get out of this build was &lt;em&gt;insane&lt;/em&gt;. And to top it all
off, the server itself is very tiny and energy efficient, meaning that you could stick it pretty much anywhere, and it would
still run happily while consuming less than 50 watts even under the most intense workloads.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/02/27/database-optimization-adventures-on-low-end-hardware/media/image2.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/02/27/database-optimization-adventures-on-low-end-hardware/media/image2_hu1747a65554571813ecba26703d07abda_239727_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;Yup, that&amp;#39;s the whole motherboard. Very small, but it can pack quite a punch.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Yup, that&amp;#39;s the whole motherboard. Very small, but it can pack quite a punch.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The performance optimizations that I did were a must-have on the SBC that I did most of my testing on. On this new
build, however, all the bottlenecks were lifted. The CPU probably had more processing power than 20 of the Orange Pi
Zero boards combined, and the maximum read speeds on the crazy fast ZFS mirror were measured in &lt;em&gt;gigabytes per second&lt;/em&gt;.
Queries that took a second to run on the old setup were now done in the blink of an eye (or in other words, measured in
milliseconds).&lt;/p&gt;
&lt;p&gt;This deployment would probably last years without any intervention from anyone, assuming that the incoming data would
not grow too fast. Unfortunately the solution itself did not find much use, so I could not test this theory out. The box
itself is still happily running at the time of writing.&lt;/p&gt;
&lt;h3 id=&#34;lessons-learned&#34;&gt;Lessons learned&lt;/h3&gt;
&lt;p&gt;The main reason that I am writing about this experience is the simple fact that it was a fantastic challenge to try to
extract as much performance out of the Orange Pi Zero based server. Getting your queries from 30 seconds down to 0.3
seconds felt like a great achievement, plus I got to revisit some database related topics that I first learned about during
my university days.&lt;/p&gt;
&lt;p&gt;This experience also shows that even low-end hardware can achieve a lot if you are aware of its limitations and can
work around them with a little bit of effort. After this project, I have played around with my homelab setup a lot and
have finally settled on a solution that does not consume a lot of power, but can still run all the workloads that I want
to run.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Things I&#39;ve learned during my self-hosting adventure</title>
      <link>https://ounapuu.ee/posts/2021/02/08/things-learned-while-self-hosting/</link>
      <pubDate>Mon, 08 Feb 2021 16:00:00 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/02/08/things-learned-while-self-hosting/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;This is a list of lessons that I&amp;rsquo;ve learned while playing around with my computer setup during the last 6-7 years or so.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;USB connected storage is a bad idea when you are using BTRFS.&lt;/li&gt;
&lt;li&gt;USB connected storage is still a bad idea when you are using ZFS, but it is at least much more resilient.&lt;/li&gt;
&lt;li&gt;USB drive enclosures are a total crapshoot when it comes to the quality. Some are good, some will have random issues.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Shingled_magnetic_recording&#34;&gt;SMR&lt;/a&gt; based hard drives can be &lt;strong&gt;unusably&lt;/strong&gt; slow for
certain workloads.&lt;/li&gt;
&lt;li&gt;Desktop PC-s use quite a lot of power when sitting mostly idle (50+ watts).&lt;/li&gt;
&lt;li&gt;You might be OK with Intel QuickSync for your transcoding needs, try it out before opting for a much more powerful
hardware configuration.&lt;/li&gt;
&lt;li&gt;Some hard drives are very, very loud. If you live in an apartment, keep this in mind, otherwise you will start trying
to rationalise the purchase of 8TB SSD-s to make your setup quieter.&lt;/li&gt;
&lt;li&gt;ZFS snapshotting with a tool like &lt;a href=&#34;https://github.com/jimsalterjrs/sanoid&#34;&gt;Sanoid&lt;/a&gt; is invaluable.&lt;/li&gt;
&lt;li&gt;You will need to use your offline backups, don&amp;rsquo;t think that you can get away without having some.&lt;/li&gt;
&lt;li&gt;Five nines uptime is perfectly doable in a homelab environment, if you are willing to move the decimal point.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s all fun and games until you have actual people using services on your server.&lt;/li&gt;
&lt;li&gt;Who needs a fancy monitoring setup when you have your friends and family members yelling that the server is down?&lt;/li&gt;
&lt;li&gt;VM-s are great for service isolation, but terrible for flexibility and efficiency.&lt;/li&gt;
&lt;li&gt;Containers, if kept up to date, are an amazing way to manage your numerous services.&lt;/li&gt;
&lt;li&gt;BTRFS is one of the few filesystem options on 32-bit ARM CPU based machines that can still provide data integrity
benefits.&lt;/li&gt;
&lt;li&gt;Some workloads, such as databases and services with lots of random I/O, require an SSD to perform well.&lt;/li&gt;
&lt;li&gt;If your workload is very heavily dependent on random I/O, then the &amp;ldquo;pro&amp;rdquo; branded SSD-s are actually worth the money.&lt;/li&gt;
&lt;li&gt;SSD power usages can vary wildly, some may require 5V@1A, some up to &lt;a href=&#34;mailto:5V@1.8A&#34;&gt;5V@1.8A&lt;/a&gt;. This will be problematic for hosts that
cannot supply much power through the USB ports, such as a Raspberry Pi.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.armbian.com/&#34;&gt;Armbian&lt;/a&gt; is great for SBC-s that support it.&lt;/li&gt;
&lt;li&gt;Try running your database on a slow machine first. Any optimizations you will make will be very noticeable and your
database will fly once you move it to a more powerful machine.&lt;/li&gt;
&lt;li&gt;Old laptops are a great way to start your self-hosting adventure, especially if you can limit the fan noise with a
tool like &lt;code&gt;thinkfan&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;External hard drives, such as the WD Elements or WD MyBook, are a great way to build multi-terabyte storage setups
without breaking the bank.&lt;/li&gt;
&lt;li&gt;Raspberry Pi 4 specs sound good on paper, but its limited I/O capabilities prevent it from doing too many things at
once.&lt;/li&gt;
&lt;li&gt;When setting up your system, document every command and installed package for future reference. You never know when it
may come in handy.&lt;/li&gt;
&lt;li&gt;Configure your setup for &lt;em&gt;&lt;strong&gt;when&lt;/strong&gt;&lt;/em&gt; you get hacked.&lt;/li&gt;
&lt;li&gt;Things will break at the most inconvenient time.&lt;/li&gt;
&lt;li&gt;Some computers can be very temperamental. However, it might be easier to handle the quirks of one system rather than
getting a replacement and learning about its quirks the hard way.&lt;/li&gt;
&lt;li&gt;Some workloads, such as &lt;a href=&#34;https://github.com/internetarchive/heritrix3&#34;&gt;Heritrix&lt;/a&gt;, might not run well on all platforms,
such as arm64 or armhf.&lt;/li&gt;
&lt;li&gt;The original Raspberry Pi 1 B+ is just too slow for most useful workloads in 2021, even when overclocked.&lt;/li&gt;
&lt;li&gt;Having a filesystem that can protect from data corruption is a must-have.&lt;/li&gt;
&lt;li&gt;Only use ZFS SLOG and L2ARC devices if you are absolutely sure that your workloads will benefit from them. If your
current ZFS ARC cache hit rate is already over 90+%, then it probably is not worth it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.netdata.cloud/&#34;&gt;Netdata&lt;/a&gt; is both beautiful &lt;em&gt;&lt;strong&gt;and&lt;/strong&gt;&lt;/em&gt; useful.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=CentOS-8-Ending-For-Stream&#34;&gt;OS support cycles mean nothing and can be changed on a whim.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;If you want a stable ZFS setup, use a distro that has a stable kernel version. Debian and Ubuntu are great for this
purpose.&lt;/li&gt;
&lt;li&gt;Update and restart as often as possible. It&amp;rsquo;s much easier to rule out what broke your setup if the amount of changes
that have built up is small.&lt;/li&gt;
&lt;li&gt;Automate the way you deploy configuration changes to your server.&lt;/li&gt;
&lt;/ul&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>How to fix ZFS pool not importing at boot</title>
      <link>https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/</link>
      <pubDate>Mon, 01 Feb 2021 08:45:27 +0200</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/</guid>
      <description>
        
          
          
          
        
        
        &lt;h3 id=&#34;issue-description&#34;&gt;Issue description&lt;/h3&gt;
&lt;p&gt;You are running a Linux-based machine with an install of ZFS on Linux. Everything seems to work correctly, but
after restarting your machine, the ZFS pool is not visible. You can still import your pool manually using
&lt;code&gt;zpool import poolname&lt;/code&gt; or &lt;code&gt;zpool import -a&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In my situation, this issue does not occur with Debian 10 on an x86-based machine, but it does occur on a Raspberry Pi 4
running Ubuntu Server 20.04.1 LTS.&lt;/p&gt;
&lt;p&gt;Setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Raspberry Pi 4 (4GB)&lt;/li&gt;
&lt;li&gt;Ubuntu Server 20.04.1&lt;/li&gt;
&lt;li&gt;32GB microSD card for root filesystem&lt;/li&gt;
&lt;li&gt;2x 8TB WD Elements external USB 3.0 drives (ZFS mirror)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;potential-causes-and-solutions&#34;&gt;Potential causes and solutions&lt;/h3&gt;
&lt;p&gt;When looking this issue up, there were many potential causes and solutions provided:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://unix.stackexchange.com/a/338522&#34;&gt;ensure that all ZFS related services are enabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://serverfault.com/a/915191&#34;&gt;add a startup delay in ZFS related configuration files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://serverfault.com/a/915191&#34;&gt;just import the pools (duh)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/zfs/comments/9j714p/ubuntu_1804_zpool_mount_on_boot_does_not_work/e6p6zu0/&#34;&gt;recreate the ZFS cache file&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In my specific scenario, none of these seemed to do the trick.&lt;/p&gt;
&lt;h3 id=&#34;investigation&#34;&gt;Investigation&lt;/h3&gt;
&lt;p&gt;The ZFS pools should be automatically imported on boot by a service named &lt;code&gt;zfs-import-cache.service&lt;/code&gt;. The cache file
should contain information about the imported pools.&lt;/p&gt;
&lt;p&gt;Once you have started your system and don&amp;rsquo;t see any ZFS pools available, try running &lt;code&gt;systemctl status zfs-import-cache.service&lt;/code&gt;
or &lt;code&gt;journalctl -u zfs-import-cache.service&lt;/code&gt;. This should show you if the automatic import succeeded or not.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/media/zpool-import-fail.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/media/zpool-import-fail_hu57b8f96ca375ca14ae7c43fb03b26537_67629_1280x800_fit_box_3.png&#34;
             width=&#34;963&#34;
             height=&#34;285&#34;
             alt=&#34;In my case, the failure shows up like this.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      In my case, the failure shows up like this.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The pool &lt;code&gt;tanker&lt;/code&gt; is a ZFS mirror that is supported by two 8TB WD Elements external hard drives. They are big, loud and
require some time to spin up the platters before you can actually read data off of them. At this point in the investigation,
a good friend recommended that I check what disks were recognized by the system at the time when this import service was
starting up.&lt;/p&gt;
&lt;p&gt;For that, you need to modify the systemd service by running &lt;code&gt;systemctl edit zfs-import-cache.service&lt;/code&gt; and put these contents
in there:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Service]
ExecStartPre=/usr/bin/lsblk
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This addition will run the &lt;code&gt;lsblk&lt;/code&gt; command before the command specified in the systemd service is actually executed.
The output of this command will be visible in the service logs. After making this addition, reboot your system and run
&lt;code&gt;journalctl -u zfs-import-cache.service&lt;/code&gt; again. You should be able to see all the connected drives on the system.&lt;/p&gt;
&lt;p&gt;In my case, the system recognized the microSD card and an SSD that was connected over USB, but not the hard drives. This
was a very clear indication that the system was not waiting until the drives had spun up before attempting to import the
ZFS pool.&lt;/p&gt;
&lt;h3 id=&#34;hacky-solution&#34;&gt;Hacky solution&lt;/h3&gt;
&lt;p&gt;To resolve this issue quickly and move on with more interesting things, you can use the same trick that we used for
troubleshooting this issue, but instead of listing the connected hard drives, we can make the systemd service delay its
execution by putting a &lt;code&gt;sleep&lt;/code&gt; statement in there.&lt;/p&gt;
&lt;p&gt;Edit the systemd service again with &lt;code&gt;systemctl edit zfs-import-cache.service&lt;/code&gt; and replace the contents with this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Service]
ExecStartPre=/usr/bin/sleep 15
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will make the service sleep for 15 seconds before importing the ZFS pool(s). It could be 10, or 30, or whatever value
works for you, 15 seconds was chosen here because it is more than enough time for the disks to spin up.&lt;/p&gt;
&lt;h3 id=&#34;proper-solution-probably&#34;&gt;Proper solution (probably)&lt;/h3&gt;
&lt;p&gt;There are probably better solutions, such as messing around with udev rules or enforcing the delay somewhere else in the
ZFS pool import chain of operations, but I have not investigated them at this point. Feel free to contact me with a better
solution, and I will update the post accordingly.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Quest towards energy efficiency part 1: the water heater</title>
      <link>https://ounapuu.ee/posts/2021/01/25/quest-towards-energy-efficiency-part-1/</link>
      <pubDate>Mon, 25 Jan 2021 15:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2021/01/25/quest-towards-energy-efficiency-part-1/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;While listening to the &lt;a href=&#34;https://selfhosted.show/&#34;&gt;SelfHosted podcast&lt;/a&gt;, one of the hosts brought up their peculiar living
arrangement multiple times. Essentially, he and his family are living in an RV that runs off of batteries, has solar
panels, utilizes Home Assistant for automation, supports multiple mobile networking providers and also has some
Raspberry Pi-s running in a homelab. In such an environment, low power usage is critical.&lt;/p&gt;
&lt;p&gt;That got me thinking: how much electricity am I currently using and how low can I go?&lt;/p&gt;
&lt;p&gt;Could lowering my overall power usage help transition to an off-grid setup in the future?&lt;/p&gt;
&lt;h3 id=&#34;initial-measurements&#34;&gt;Initial measurements&lt;/h3&gt;
&lt;p&gt;Before making any changes, it is important to make some measurements. After all, if you don&amp;rsquo;t get an overview of the
current situation, then how are you going to do comparisons? Your local power company is measuring the total power usage
for you, so you might as well utilize that to get an overview of daily and monthly power usage.&lt;/p&gt;
&lt;p&gt;In my situation, the monthly power use would be between 200-250 kWh and daily power usage would jump between 6 kWh and
13 kWh, depending on the day. I am not sure if that is normal power usage or not, but at least it&amp;rsquo;s a starting point.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/01/25/quest-towards-energy-efficiency-part-1/media/2021-01-25-19-24-35.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/01/25/quest-towards-energy-efficiency-part-1/media/2021-01-25-19-24-35_huadbffd8059c196a079ce6d8d457674ad_8386_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;326&#34;
             alt=&#34;Example daily power usage graph. Blue parts indicate nighttime pricing (cheaper).&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Example daily power usage graph. Blue parts indicate nighttime pricing (cheaper).
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;whats-using-all-this-power&#34;&gt;What&amp;rsquo;s using all this power?&lt;/h3&gt;
&lt;p&gt;There are many candidates for appliances that use the most power: water heater, refrigerator, electrical oven,
electrical kettle etc. With some of them, it&amp;rsquo;s quite easy to reduce the power usage: just use it less! With others, it
might not be as straightforward.&lt;/p&gt;
&lt;p&gt;For example, with a refrigerator, you cannot really use it less. Sure, you can try to open the door fewer times so that
it has to do less work, but you really shouldn&amp;rsquo;t try to limit its operating window, as that can result in food going
bad. It will probably help if you got yourself a refrigerator that has a better efficiency rating, but that&amp;rsquo;s it.&lt;/p&gt;
&lt;p&gt;However, with a water heater, you are free to limit its use significantly. After all, the worst thing that can happen is
that you might run out of hot water while showering or washing the dishes. Today we will thus focus on an old water
heater and try to see how low we can go.&lt;/p&gt;
&lt;h3 id=&#34;reducing-the-total-power-usage-of-a-water-heater&#34;&gt;Reducing the total power usage of a water heater&lt;/h3&gt;
&lt;p&gt;The way that a water heater works is quite simple: if the water temperature is below a threshold, heat it. This is
usually controlled with a dial on the water heater itself. After you have used hot water for a while, you will notice
the water heater kicking in and doing its thing.&lt;/p&gt;
&lt;p&gt;A water heater can use quite a lot of power. In my case, it uses 2000W while heating the water. This result was measured
by using an electronic power usage meter that you plug between the appliance and the wall socket. From the data provided
by the power company, the days with showers or other activities that used hot water spiked up to 13 kWh, which is quite
a lot when compared to the daily average of 8 kWh.&lt;/p&gt;
&lt;p&gt;Water heaters also have an insulation layer to prevent the water from losing heat. Once the water is heated up to the
desired temperature, it should be able to keep it at that temperature for quite some time without having to heat it up
again.&lt;/p&gt;
&lt;p&gt;With that in mind, I tried a simple approach: buy a mechanical timer, set it to run at certain times throughout the day,
test out the results and find the sweet spot. After all, why would I want it to run during the night, when nobody is
using hot water anyway?&lt;/p&gt;
&lt;h3 id=&#34;initial-testing&#34;&gt;Initial testing&lt;/h3&gt;
&lt;p&gt;I picked a sensible starting point: run for about 1-2 hours in the morning and again some time in the afternoon (16-18).
By starting with that, I should be able to avoid situations where I run out of hot water at the most inconvenient time.
This worked well, but due to the water heater potentially running for up to 4 hours, it would still mean a maximum of 8
kWh power use for the water heater alone.&lt;/p&gt;
&lt;p&gt;During the next week, I experimented with shorter values. I limited the evening heat cycle to 30 minutes and went as low
as 45 minutes in the morning heat cycle. At that point the water didn&amp;rsquo;t heat up enough in the mornings and the boost in
the afternoon didn&amp;rsquo;t really resolve the problem, either, which meant that I found the low point.&lt;/p&gt;
&lt;p&gt;With more recent tests, I have found that for our use case it is perfectly viable to set the timer to run for 90 minutes
in the morning and have hot (or warm) water for the rest of the day, while also allowing for comfortable showers in the
morning and afternoon. Just make sure to set the temperature setting to the highest value so that it does not stop
heating the water while the water heater is allowed to run.&lt;/p&gt;
&lt;h3 id=&#34;results&#34;&gt;Results&lt;/h3&gt;
&lt;p&gt;While looking at daily power reports, a couple of things become clear:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the spikes have now been replaced with a more stable usage&lt;/li&gt;
&lt;li&gt;it is possible to limit the water heater usage down to 3 kWh per day without giving up too much convenience&lt;/li&gt;
&lt;li&gt;a mechanical timer allows me to use power while it is cheap (nighttime)&lt;/li&gt;
&lt;li&gt;with water heater use concentrated on one specific time slot, it is easier to identify other appliances with high
power usage&lt;/li&gt;
&lt;li&gt;you will suddenly find motivation to shower as fast as possible, because who knows how much hot water you have left?&lt;/li&gt;
&lt;/ul&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2021/01/25/quest-towards-energy-efficiency-part-1/media/2021-01-25-19-25-14.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2021/01/25/quest-towards-energy-efficiency-part-1/media/2021-01-25-19-25-14_hu4b25a8c03d51e18a7237972d05cbb791_7925_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;331&#34;
             alt=&#34;Not very hard to guess when the water heater is doing its job.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Not very hard to guess when the water heater is doing its job.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;is-it-worth-it&#34;&gt;Is it worth it?&lt;/h3&gt;
&lt;p&gt;Not from a financial standpoint, definitely. However, it does give a good feeling when you are living in a country that
is relying on one of the most polluting energy sources.&lt;/p&gt;
&lt;p&gt;To be quite fair, at this point it has become more of a game for me than anything else. It&amp;rsquo;s fun to find out the limits
and try to push them as far as you can go.&lt;/p&gt;
&lt;h3 id=&#34;are-there-better-solutions&#34;&gt;Are there better solutions?&lt;/h3&gt;
&lt;p&gt;Probably. My solution here is cheap (the mechanical timer only cost 4 euros), but there could be smarter solutions that
learned your daily habits and tried to optimize the water heating process using that. However, predicting when you need
the hot water becomes much more difficult if you deviate from your usual routine. Your children found the wonders of
playing in a puddle and they need to shower at an unusual time? Well, there goes all that data collection and machine
learning effort.&lt;/p&gt;
&lt;p&gt;Alternatively, you could risk getting electrocuted and get an attachment that will heat up water on-demand. The downside
with that option is the hassle and upfront investment of having your kitchen sink and shower set up like that.&lt;/p&gt;
&lt;h3 id=&#34;what-next&#34;&gt;What next?&lt;/h3&gt;
&lt;p&gt;Now that one of the big ticket items is handled, I can shift focus to my computing setup.&lt;/p&gt;
&lt;p&gt;What can you do to have a more efficient homelab?&lt;/p&gt;
&lt;p&gt;Do you need to sacrifice anything in your attempt to balance data hoarding and low power use cravings?&lt;/p&gt;
&lt;p&gt;How much power is your desktop PC using while doing nothing?&lt;/p&gt;
&lt;p&gt;Stay tuned for future installments of my quest towards energy efficiency!&lt;/p&gt;
&lt;h3 id=&#34;2022-01-18-update&#34;&gt;2022-01-18 update&lt;/h3&gt;
&lt;p&gt;At some point I stopped using this trick because while I was paying a bit less
on my electricity bills, I still consumed a lot of power. On a 35 EUR power bill,
that would have meant about a 5 EUR reduction in cost. You still pay to have
those electrons moved to your home. Using the water heater on a lower temperature
setting throughout the day used less power in total due to having less water to
heat up and the hot water usage being a bit unpredictable.&lt;/p&gt;
&lt;p&gt;However, with the current state of the energy market, the prices have been
multiplied. I&amp;rsquo;ve gone back to this setup to take advantage of lower rates
during nighttime, which tend to be 2-4x cheaper. At these prices, there&amp;rsquo;s a
real benefit to trying to use the off-peak hours. Let&amp;rsquo;s see how well this works
out.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>How to make digital copies of your old video tapes</title>
      <link>https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/</link>
      <pubDate>Sun, 27 Dec 2020 18:00:00 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/</guid>
      <description>
        
          
          
          
        
        
        &lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;This is a short overview of one way to take your old video tapes and make digital copies of their contents.&lt;/p&gt;
&lt;p&gt;To get started, you will need the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;old video tapes that you want to make copies of (VHS and its variants)&lt;/li&gt;
&lt;li&gt;a device that can read analog AV signals and convert them to digital signals&lt;/li&gt;
&lt;li&gt;a device that can play back the tapes (VHS player, camcorder etc.)
&lt;ul&gt;
&lt;li&gt;in this example, we will be using a camcorder that has video playback capabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a computer with enough free space to store the digital copies
&lt;ul&gt;
&lt;li&gt;for VHS and H.264+MP3, this means roughly 1.5GB of space for 1 hour of footage&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.videolan.org/vlc/index.html&#34;&gt;VLC media player&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;time and patience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this example, we will be using the &lt;a href=&#34;https://nedis.com/en-us/product/computer/imaging/media-converters/550670251/video-grabber-av-cable-scart-software-included-usb-20&#34;&gt;Nedis VGRRU100BK&lt;/a&gt;.
Not because it is any good, it was just something we had access to.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-20-00-44-47-1997.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-20-00-44-47-1997_hud6ef239472b746067546c8ccaa0f02af_105148_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;Nedis VGRRU100BK - front.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Nedis VGRRU100BK - front.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-20-00-44-57-1998.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-20-00-44-57-1998_hu963963d781ee2f632bce9e19f070cef3_114093_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;Nedis VGRRU100BK - back.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Nedis VGRRU100BK - back.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;the-process&#34;&gt;The process&lt;/h3&gt;
&lt;h4 id=&#34;step-1-setting-up-the-physical-devices&#34;&gt;Step 1: setting up the physical devices&lt;/h4&gt;
&lt;p&gt;Set up your video playback device so that it can play the cassettes that you are planning to record.&lt;/p&gt;
&lt;p&gt;Connect the AV output cables (composite or S-video) to the input of the USB device. For this specific device,
it means connecting the appropriate composite AV cables together and connecting them to the USB stick using a
proprietary connector.&lt;/p&gt;
&lt;p&gt;The end result might look something like this:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-12-06-1986.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-12-06-1986_hu55e635429b8d0582e91ac35ab6470bc1_170442_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;Overview of the setup used in this example.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Overview of the setup used in this example.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-12-22-1988.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-12-22-1988_hu9fab19490a7646e5a7cf1142fb8ef040_296370_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;The USB capture device connected to the PC.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The USB capture device connected to the PC.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-13-58-1994.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-13-58-1994_hu731122a026766b71f5d922f0613ad477_405457_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;We are using a camcorder to play back the video in this case.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      We are using a camcorder to play back the video in this case.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-14-34-1995.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-14-34-1995_hu165d0360fdef86e8a65326b370f4cdec_279159_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Video outputs on the camcorder. Yes, that is mono sound.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Video outputs on the camcorder. Yes, that is mono sound.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-14-40-1996.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/20-12-19-18-14-40-1996_hu6f07ac0e49f8edf5ad1076e8cdad807a_265744_1280x800_fit_q75_box.jpg&#34;
             width=&#34;600&#34;
             height=&#34;800&#34;
             alt=&#34;Video output -&amp;gt; USB capture card input.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Video output -&amp;gt; USB capture card input.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h4 id=&#34;step-2-testing-the-initial-display-output&#34;&gt;Step 2: testing the initial display output&lt;/h4&gt;
&lt;p&gt;In this example, we will be using VLC to play and record the videos. We are using Linux here, but
the process should be very similar on Windows.&lt;/p&gt;
&lt;p&gt;Open up VLC.&lt;/p&gt;
&lt;p&gt;In the top-left corner, click on &lt;code&gt;Media&lt;/code&gt; and select &lt;code&gt;Open Capture device...&lt;/code&gt;.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-14-14.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-14-14_hu5870c3a0d38ee70bb14494587f7b5475_51398_1280x800_fit_box_3.png&#34;
             width=&#34;559&#34;
             height=&#34;456&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;You should see a screen similar to this one:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-16-40.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-16-40_hu2e76dc25d01f665c99784cd8753d823e_43772_1280x800_fit_box_3.png&#34;
             width=&#34;703&#34;
             height=&#34;539&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Your computer probably has multiple options for selecting audio and video devices, since microphones
and webcams will likely show up here. If you are unsure which one is the correct one, go through each one-by-one
until you find the options that work.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-16-47.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-16-47_hu7eb43c66464be22f92a09bf2b61a50b4_47781_1280x800_fit_box_3.png&#34;
             width=&#34;704&#34;
             height=&#34;534&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-16-55.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-16-55_hu344e21b8e15c1147cbdc07ae39ad681f_48423_1280x800_fit_box_3.png&#34;
             width=&#34;711&#34;
             height=&#34;547&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;In this example, our video capture device is named &lt;code&gt;/dev/video2&lt;/code&gt; and the audio feed for the capture device
is &lt;code&gt;hw:4,0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In the bottom-left corner, you have the option to play back the video signal directly in VLC. You can use this to check
which video and audio device is the correct one.&lt;/p&gt;
&lt;p&gt;If all goes well, you should be able to see the output in VLC:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-17-48.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-17-48_hu45b94e19eb671634a5f1f385907b38ea_1254292_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;Camcorder output being streamed to VLC using the USB capture device.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Camcorder output being streamed to VLC using the USB capture device.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h4 id=&#34;step-3-recording&#34;&gt;Step 3: recording&lt;/h4&gt;
&lt;p&gt;Once you have found the correct configuration, you can click on the arrow next to the &lt;code&gt;Play&lt;/code&gt; button and
select the &lt;code&gt;Convert&lt;/code&gt; option.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-17-03.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-17-03_hub3d0af5aae82803e38584c2125388637_52531_1280x800_fit_box_3.png&#34;
             width=&#34;723&#34;
             height=&#34;686&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;In this view, you can configure &lt;a href=&#34;https://en.wikipedia.org/wiki/Deinterlacing&#34;&gt;deinterlacing&lt;/a&gt;,
select the video profile, and set where the resulting video file will be saved.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-19-19.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-19-19_hu548f8a3f793e11123cff1f4f5bfa6fb3_43678_1280x800_fit_box_3.png&#34;
             width=&#34;589&#34;
             height=&#34;564&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;For our purposes, we have chosen to deinterlace the video, since it provided a higher quality output,
and we have stuck with MP4 as the output format because it is an acceptable default option for us.&lt;/p&gt;
&lt;p&gt;Displaying the output while converting the video did not work for us and that might be related to
how VLC accesses the video feed in Linux (only one program can read the stream at a time, it seems).&lt;/p&gt;
&lt;p&gt;You can now click &lt;code&gt;Start&lt;/code&gt; in VLC to start recording the video. You will also need to hit &lt;code&gt;Play&lt;/code&gt; on your video playback
device.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-19-53.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/12/27/how-to-make-digital-copies-of-your-old-video-tapes/media/2020-12-19-18-19-53_hua8fe6f817c7946738fbb3042a5b79b32_97512_1280x800_fit_box_3.png&#34;
             width=&#34;1280&#34;
             height=&#34;720&#34;
             alt=&#34;image&#34;
        &gt;
    &lt;/a&gt;
	
&lt;/figure&gt;

&lt;p&gt;Wait until the VHS tape has finished playing and then hit the stop button in VLC.&lt;/p&gt;
&lt;h4 id=&#34;step-4-verify-results&#34;&gt;Step 4: verify results&lt;/h4&gt;
&lt;p&gt;You can now open the resulting video file and check the results.&lt;/p&gt;
&lt;p&gt;If you have additional VHS tapes to record, then repeat step 3.&lt;/p&gt;
&lt;h3 id=&#34;troubleshooting-notes&#34;&gt;Troubleshooting notes&lt;/h3&gt;
&lt;p&gt;There were some challenges to get this setup working.&lt;/p&gt;
&lt;h4 id=&#34;not-able-to-read-the-output-from-the-usb-capture-device&#34;&gt;Not able to read the output from the USB capture device&lt;/h4&gt;
&lt;p&gt;Being able to read the video signal from the USB capture device turned out to be a headache.
The software that comes with the USB capture device (Arcsoft ShowBiz) had issues displaying the video signal
and was generally unreliable and crashing.&lt;/p&gt;
&lt;p&gt;Other software, like OpenShot and Kdenlive video editors, could not recognize the video capture device.&lt;/p&gt;
&lt;p&gt;Since we found that this USB capture device emulates an USB webcam, we tried viewing its signal using
a browser or a camera app in the OS (Cheese in Linux, Camera in Windows), but that did not work out either.&lt;/p&gt;
&lt;p&gt;We eventually found success with VLC and then chose it for performing our video recording effort. It has multiple advantages
over the software shipped with the capture device itself:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it just works&lt;/li&gt;
&lt;li&gt;free and open source, meaning that you can do your recording on different platforms&lt;/li&gt;
&lt;li&gt;no need for a license key&lt;/li&gt;
&lt;li&gt;up to date (Arcsoft ShowBiz installation files were unchanged since 2012)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;VLC truly is a Swiss army knife for media playback and recording.&lt;/p&gt;
&lt;h4 id=&#34;vhs-playback-troubles&#34;&gt;VHS playback troubles&lt;/h4&gt;
&lt;p&gt;We initially tried the recording process with a proper VHS player, but while recording the footage
and reviewing it later, we noticed that at random points the VHS player had fast-forwarded
over portions of the video.&lt;/p&gt;
&lt;p&gt;The camcorder did not exhibit this behaviour, so we went with that. However, with the camcorder we could only
output mono sound, which means that the resulting video file will only have one sound channel present. This will
be especially noticeable when listening to the recorded footage using headphones. To fix this, we
used &lt;a href=&#34;https://handbrake.fr/&#34;&gt;HandBrake&lt;/a&gt; to copy the single audio channel to both channels, which resolved that issue for us.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>What running out of SATA ports looks like</title>
      <link>https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/</link>
      <pubDate>Sat, 29 Aug 2020 17:21:21 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;One day I stumbled upon a &lt;a href=&#34;https://www.youtube.com/watch?v=nQiWP8T9R60&#34;&gt;Craft Computing video&lt;/a&gt;
about his new server build, and on the parts list was a Sedna PCI Express 2x SATA adapter card:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/image1.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/image1_hu7724df6710981e8273e74bf478665301_23093_1280x800_fit_q75_box.jpg&#34;
             width=&#34;500&#34;
             height=&#34;500&#34;
             alt=&#34;The card in question.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The card in question.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;There are different designs out there, including a 4x SATA card, which is bonkers.&lt;/p&gt;
&lt;p&gt;Anyway, I thought that I might as well give this a shot, since I have two 4TB 2.5&amp;quot; 15mm Seagate hard drives running,
&lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok&#34;&gt;with one of them being in the process of accumulating bad sectors&lt;/a&gt;.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-48-37-1942.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-48-37-1942_hu4ad4cd40306f00a26b388fab458dd966_284670_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;Adapter card with two drives installed (front).&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Adapter card with two drives installed (front).
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-48-58-1944.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-48-58-1944_hu227b19115cb25dced4112ebb2b415a03_263607_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;Adapter card with two drives installed (back).&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Adapter card with two drives installed (back).
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;The installation procedure itself is simple, just take your drives, screw them in and
plug this into a PCIe slot.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-55-14-1945.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-55-14-1945_huc5754322f01dbb7e0f170f611b07a635_134728_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;This is what it looks like installed into my server.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      This is what it looks like installed into my server.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-55-19-1946.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-55-19-1946_hu2d21170ed16157b7bbbd452b7f4ae930_169815_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;Alternate angle.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Alternate angle.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-55-30-1947.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-19-55-30-1947_hu3269dffbc1c885336cae65f69c314f4c_130746_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;Alternate angle.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Alternate angle.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-21-15-02-1948.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/29/what-running-out-of-sata-ports-looks-like/media/20-08-26-21-15-02-1948_hu3446b1a6431b7246b47f303e6f064082_142738_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;As you can see, it did not kill the system.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      As you can see, it did not kill the system.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;so-how-well-does-it-work&#34;&gt;So, how well does it work?&lt;/h3&gt;
&lt;p&gt;Quite well, actually.&lt;/p&gt;
&lt;p&gt;The PCIe 2.0 x1 link does mean that your speeds will be capped at around 500MB/s, but
with current hard drives you are unlikely to reach this limit. SSD-s, on the other hand,
will be bottlenecked in sequential read/write workloads.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lspci -nnk&lt;/code&gt; output:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;01:00.0 SATA controller [0106]: ASMedia Technology Inc. ASM1062 Serial ATA Controller [1b21:0612] (rev 01)
        Subsystem: ASMedia Technology Inc. Device [1b21:1060]
        Kernel driver in use: ahci
        Kernel modules: ahci
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The drives are individually addressable and show up as normal drives (like &lt;code&gt;/dev/sda&lt;/code&gt;).
S.M.A.R.T info is functional and readable.&lt;/p&gt;
&lt;p&gt;This adapter has been running in my system for over half a week now and so far
there haven&amp;rsquo;t been any stability issues whatsoever.&lt;/p&gt;
&lt;h3 id=&#34;should-i-get-this&#34;&gt;Should I get this?&lt;/h3&gt;
&lt;p&gt;This adapter is a good fit for the following use cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;there are no more HDD/SSD drive mounts in your system left and you do not want
to use double-sided tape as one&lt;/li&gt;
&lt;li&gt;you have run out of SATA ports and don&amp;rsquo;t mind using up a PCIe slot&lt;/li&gt;
&lt;li&gt;you want to install additional SATA drives in your system, but also would prefer
to keep the amount of cabling in your system at a minimum&lt;/li&gt;
&lt;li&gt;flexing on your friends with your fancy new 8/10 TB storage card&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I would recommend looking into alternative solutions if your use case matches one of these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;using this adapter with SSD-s on sequential read/write workloads that exceed 500+MB/s&lt;/li&gt;
&lt;li&gt;adding more than two SATA drives into your system (get a simple PCIe -&amp;gt; SATA adapter
that only provides the data connectors instead)&lt;/li&gt;
&lt;/ul&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Running on fumes</title>
      <link>https://ounapuu.ee/posts/2020/08/29/running-on-fumes/</link>
      <pubDate>Sat, 29 Aug 2020 16:42:19 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2020/08/29/running-on-fumes/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;After a run-of-the-mill Windows BSOD, I was redirected to the UEFI
settings and was presented with this fun little bug:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/29/running-on-fumes/media/20-08-28-21-55-32-1970.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/29/running-on-fumes/media/20-08-28-21-55-32-1970_hu0690f8367f84c8b8e70c941b53027ef8_196744_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1024&#34;
             height=&#34;768&#34;
             alt=&#34;0GB ought to be enough for anybody.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      0GB ought to be enough for anybody.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;


        
        </description>
    </item>
    
    
    
    <item>
      <title>Stupid project ideas: the War Machine</title>
      <link>https://ounapuu.ee/posts/2020/08/22/stupid-project-ideas-1/</link>
      <pubDate>Sat, 22 Aug 2020 21:24:08 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2020/08/22/stupid-project-ideas-1/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;&lt;a href=&#34;https://www.youtube.com/user/LinusTechTips&#34;&gt;LinusTechTips&lt;/a&gt; has some pretty great videos about building
insane PC and server setups, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/EtZXMj_gUjU&#34;&gt;unboxing and deploying &lt;em&gt;petabytes&lt;/em&gt; of storage&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/LXOaCkbt4lI&#34;&gt;7 gamers, 1 CPU&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/R_h63IsmvSQ&#34;&gt;building sleeper PC-s&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/uWtU8pGspj0&#34;&gt;testing sketchy CPU-s&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/ZFLiKClKKhs&#34;&gt;opening up a 100TB SSD&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have the ideas, but not the budget of LinusTechTips, so writing them down and hoping that one day I can test this out
is the best I can do for now.&lt;/p&gt;
&lt;h3 id=&#34;the-project-itself&#34;&gt;The project itself&lt;/h3&gt;
&lt;p&gt;The main idea is to have a laptop that has ridiculous amounts of storage and the performance to back it up.
The idea started gaining traction in my head after I realized that my Lenovo ThinkPad T430 can house up to 3 SSD-s, which
makes it a perfect candidate for a system with a ZFS mirror configuration. It also helps that it is powered by a quad-core
CPU and 16GB of RAM.&lt;/p&gt;
&lt;p&gt;Additional points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;low power, should stay below 60-90W even under the worst case scenarios&lt;/li&gt;
&lt;li&gt;portable, just plug in the power and an ethernet cable and you are good to go&lt;/li&gt;
&lt;li&gt;built-in UPS in the form of the laptop battery&lt;/li&gt;
&lt;li&gt;well built, can survive a fall or two (already has done so, but that&amp;rsquo;s a story for another time)&lt;/li&gt;
&lt;li&gt;includes a screen and a keyboard for those times where you really screwed something up and need to fix it fast&lt;/li&gt;
&lt;li&gt;supports 1x mSATA SSD (great for / partition) and 2x SATA HDD/SSD (one in the usual drive bay, the other in the HDD caddy that
is replacing the optical drive)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;storage&#34;&gt;Storage&lt;/h3&gt;
&lt;p&gt;With SSD prices having dropped quite low and capacities increasing with time, it might not be completely unreasonable
to get SSD-s with capacities reaching multiple terabytes. At the time of writing, Samsung, for example, is shipping
&lt;a href=&#34;https://www.samsung.com/au/memory-storage/870-qvo-sata-3-2-5-ssd/MZ-77Q1T0BW/&#34;&gt;SATA SSD-s with capacities up to 8TB&lt;/a&gt;,
which is the same size as the main hard drives in my server right now.&lt;/p&gt;
&lt;p&gt;However, these SSD-s are also ridiculously expensive, with the 4 TB model costing ~400 euros and the 8 TB costing almost
800 euros.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/stupid-project-ideas-1/media/2020-08-22-21-49-00.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/22/stupid-project-ideas-1/media/2020-08-22-21-49-00_hu548a833223da2b343c25925e8a6c26fa_137154_1280x800_fit_box_3.png&#34;
             width=&#34;731&#34;
             height=&#34;509&#34;
             alt=&#34;The capacity isn&amp;#39;t the only thing that is big about this SSD.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The capacity isn&amp;#39;t the only thing that is big about this SSD.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Hard drives are generally cheaper per TB, but in this case we don&amp;rsquo;t actually have much better options. 2.5&amp;quot; 9mm hard drives
seem to go up to 2TB at most. You will also have to take into account the fact that hard drives do not like impacts,
such as falls, and they are much slower than SSD-s in most workloads.&lt;/p&gt;
&lt;h3 id=&#34;cooling&#34;&gt;Cooling&lt;/h3&gt;
&lt;p&gt;Since I have fitted this T430 with an &lt;a href=&#34;https://ark.intel.com/content/www/us/en/ark/products/64889/intel-core-i7-3820qm-processor-8m-cache-up-to-3-70-ghz.html&#34;&gt;Intel i7 3820QM&lt;/a&gt;
CPU with a 45 watt TDP, cooling is an issue. Liquid metal, beefier heatsinks, fresh thermal paste, I have tried it all, but
the only solution that has actually worked is disabling the turbo boost feature. There is also this other solution I created
that automatically throttles the CPU at a chosen temperature limit using Intel p-state driver, but that solution requires
a rewrite.&lt;/p&gt;
&lt;p&gt;With poor cooling comes great noise, so ideally this server should run in a place that does not bother anyone with its
high-pitched fan noise.&lt;/p&gt;
&lt;h3 id=&#34;performance&#34;&gt;Performance&lt;/h3&gt;
&lt;p&gt;With a quad core CPU, this system can do quite a lot. Running Nextcloud, PostgreSQL, Jellyfin or any other service should
be a breeze, especially since the main storage is SSD based. The amount of RAM is also perfectly suitable for doing quite
a lot. Run a couple of VM-s, transcode your media, it can do it all (with reasonable expectations, though).&lt;/p&gt;
&lt;h3 id=&#34;portability&#34;&gt;Portability&lt;/h3&gt;
&lt;p&gt;One of the best features of this setup is that you can just grab it and go, should the need arise. Its low power requirement
makes it a much more suitable candidate for powering it in situations where the electrical grid is down and all you have
is a generator or some form of renewable energy. In addition to that, everything you need to work with the machine is already
there, just open up the laptop and start working using the built-in keyboard and screen.&lt;/p&gt;
&lt;p&gt;The good build quality of the laptop also means that you do not need to worry much about putting it in your backpack and
throwing it around. Sure, the plastic might break in some places, and if the impact is strong enough then it can still
break, but it is less likely to break when compared to alternative &lt;em&gt;thin and light&lt;/em&gt; types of laptops.&lt;/p&gt;
&lt;h3 id=&#34;practicality&#34;&gt;Practicality&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s not all fun and games, though. This setup does have quite a few downsides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;no way to upgrade CPU and RAM any further. What you have is what you will have to live with.&lt;/li&gt;
&lt;li&gt;it&amp;rsquo;s expensive simply due to the fact that the SSD-s get very pricy if you require high capacities, hard drives
are still more economical for storing huge amounts of data&lt;/li&gt;
&lt;li&gt;the cooling issue will remain unsolveable, unless you invest time and resources into designing a custom solution&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Do I still want to build this?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Yes.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Can I build this?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Not unless a delivery truck full of 8TB SSD-s happens to crash in front of me.&lt;/p&gt;
&lt;p&gt;Or someone sponsors me. &lt;em&gt;Take a hint, WD/Seagate&lt;/em&gt;.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>Disk is OK</title>
      <link>https://ounapuu.ee/posts/2020/08/22/disk-is-ok/</link>
      <pubDate>Sat, 22 Aug 2020 07:29:19 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2020/08/22/disk-is-ok/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Maybe I am unlucky with computer hardware.&lt;/p&gt;
&lt;p&gt;Maybe I have the opposite of &lt;a href=&#34;https://en.wikipedia.org/wiki/Midas#Golden_Touch&#34;&gt;the golden touch of Midas&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Or maybe it&amp;rsquo;s just the fact that I use my hardware for things they were never meant to be used for.&lt;/p&gt;
&lt;p&gt;Anyway, I have acquired two Seagate 4TB external hard drives for doing some testing with ZFS.
I shucked them (took them out of their enclosure) and started using them as internal drives in many different
configurations.&lt;/p&gt;
&lt;p&gt;Funnily enough, even though the two external drives had different branding (Backup Plus, Expansion)
and enclosure design, the hard drives in them were identical.&lt;/p&gt;
&lt;p&gt;Some info about the drives:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Model: ST4000LM024-2AN17V&lt;/li&gt;
&lt;li&gt;Recording type: &lt;a href=&#34;https://en.wikipedia.org/wiki/Shingled_magnetic_recording&#34;&gt;SMR (shingled magnetic recording)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Form factor: 2.5&amp;quot;&lt;/li&gt;
&lt;li&gt;Interface: SATA&lt;/li&gt;
&lt;li&gt;Thickness: &lt;strong&gt;15 mm&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before I get to the stupid stuff, I would like to mention what these drives are good for, and where they suffer heavily.&lt;/p&gt;
&lt;p&gt;Good:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WORM (write once, read many) type of workloads, such as a Steam library, your media collection etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;random read/write workloads (performance is absolutely rubbish and makes the system unusable)&lt;/li&gt;
&lt;li&gt;write heavy workloads (SMR requires some clean-up activities that are managed by the drive, and you cannot do anything while
those take place)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;the-stupid-stuff&#34;&gt;The stupid stuff&lt;/h3&gt;
&lt;p&gt;I have done some pretty dumb things with these, such as using them in an &lt;a href=&#34;https://www.in-win.com/en/gaming-chassis/Chopin&#34;&gt;InWin Chopin computer case&lt;/a&gt;
and letting them hit 60C under load. Fun fact: these drives actually fit almost perfectly in the case, as long as you
bend one small metal section for one of the drive cages. Not so fun fact: they will overheat if you have a high CPU load
and you cannot do much about that.&lt;/p&gt;
&lt;p&gt;Currently these drives are sitting in my main desktop. Initially I tried using them in a mirrored configuration under
Windows, because having your whole Steam library downloaded with disk space to spare is pretty cool. Unfortunately, one
of the disks started having issues and it got kicked out of the mirror. It kept doing this every time it accumulated bad
sectors.&lt;/p&gt;
&lt;p&gt;Now these two sit in a ZFS mirror configuration inside a VM, acting as some sort of a temporary scratch disk. Another
free fun fact: &lt;code&gt;kvm&lt;/code&gt; (or qemu, or libvirt, one of those) will pause the VM if it detects that one of your disks has
encountered I/O errors, and seems that the only &amp;ldquo;fix&amp;rdquo; is to force a restart of the VM (could not unpause the VM).&lt;/p&gt;
&lt;p&gt;It has become some sort of a fun pastime for me to keep an eye on one of the failing drives and the status of the ZFS mirror.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Will ZFS detect some errors?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;How large can the bad sector count get before the drive dies?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;When will it actually die?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Why is &lt;a href=&#34;https://en.wikipedia.org/wiki/S.M.A.R.T.&#34;&gt;S.M.A.R.T&lt;/a&gt; &lt;em&gt;still&lt;/em&gt; reporting that the disk is OK?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So far, so good.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-08-17-07-45-51.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-08-17-07-45-51_hu17c9652ff73667c614279695d8da7f20_19343_1280x800_fit_box_3.png&#34;
             width=&#34;414&#34;
             height=&#34;151&#34;
             alt=&#34;2020-08-17. Nope, not OK.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      2020-08-17. Nope, not OK.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-08-20-23-21-28.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-08-20-23-21-28_hu27238ea416996446462b6574f039c4fe_19126_1280x800_fit_box_3.png&#34;
             width=&#34;425&#34;
             height=&#34;157&#34;
             alt=&#34;2020-08-20. Still not OK.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      2020-08-20. Still not OK.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-08-22-20-49-21.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-08-22-20-49-21_huf8bc27a30185c94b8be00ac07ada14c5_19153_1280x800_fit_box_3.png&#34;
             width=&#34;423&#34;
             height=&#34;153&#34;
             alt=&#34;2020-08-22. OK, that&amp;#39;s pretty bad.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      2020-08-22. OK, that&amp;#39;s pretty bad.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-08-29-17-10-38.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-08-29-17-10-38_hu535be16f2827a9e7635ca0ef716e08dd_36023_1280x800_fit_box_3.png&#34;
             width=&#34;837&#34;
             height=&#34;173&#34;
             alt=&#34;2020-08-29. Moved this to a proper server box.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      2020-08-29. Moved this to a proper server box.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-09-11-07-44-31.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-09-11-07-44-31_hu5c4fa3fc32757e6bbac080fb9d9cab08_51925_1280x800_fit_box_3.png&#34;
             width=&#34;1174&#34;
             height=&#34;397&#34;
             alt=&#34;2020-09-09. He&amp;#39;s dead, Jim.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      2020-09-09. He&amp;#39;s dead, Jim.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-09-12-11-49-21.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-09-12-11-49-21_hu1e7d095575afc93362fa09b938c90874_38097_1280x800_fit_box_3.png&#34;
             width=&#34;835&#34;
             height=&#34;182&#34;
             alt=&#34;2020-09-12. One restart later: it&amp;#39;s back!&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      2020-09-12. One restart later: it&amp;#39;s back!
    &lt;/figcaption&gt;
    
&lt;/figure&gt;








  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-09-22-08-22-22.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/22/disk-is-ok/media/2020-09-22-08-22-22_hu8dba3dec988ffc0794c6814f005ff571_36291_1280x800_fit_box_3.png&#34;
             width=&#34;836&#34;
             height=&#34;169&#34;
             alt=&#34;2020-09-22. More errors, more work for ZFS.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      2020-09-22. More errors, more work for ZFS.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Expect this list to grow with time.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>How I fixed one hardware issue with another one</title>
      <link>https://ounapuu.ee/posts/2020/08/11/how-i-fixed-one-hardware-issue-with-another-one/</link>
      <pubDate>Tue, 11 Aug 2020 19:08:14 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2020/08/11/how-i-fixed-one-hardware-issue-with-another-one/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I happen to run on an &lt;a href=&#34;https://www.asrock.com/mb/AMD/Fatal1ty%20B450%20Gaming-ITXac/&#34;&gt;ASRock Fatal1ty B450 Gaming-ITX/ac&lt;/a&gt;
motherboard that used to run fine, but ever since I installed one UEFI update, it has had this one annoying issue:
whenever you reboot, it gets stuck at POST. Cold boots work fine and the &lt;em&gt;shutdown-and-push-the-power-button&lt;/em&gt; cycle also
does the trick, but it&amp;rsquo;s not something I want to do all the time, especially when the machine is out of reach.&lt;/p&gt;
&lt;p&gt;Before you say it: no, warranty service was not an option here, especially since this motherboard has suffered a fall once
and it has this slight curvature in it. No, this separate incident was &lt;em&gt;after&lt;/em&gt; this freezing issue started occurring.&lt;/p&gt;
&lt;h3 id=&#34;initial-troubleshooting&#34;&gt;Initial troubleshooting&lt;/h3&gt;
&lt;p&gt;I went through most of the standard hardware troubleshooting procedures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;clear CMOS&lt;/li&gt;
&lt;li&gt;re-seat RAM&lt;/li&gt;
&lt;li&gt;try a different CPU&lt;/li&gt;
&lt;li&gt;disable features in UEFI, reduce PCIe speeds&lt;/li&gt;
&lt;li&gt;disconnect storage devices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No luck, issue was still there. The POST code was stuck at &lt;code&gt;A0&lt;/code&gt;. When taking a look at the &lt;a href=&#34;https://www.asrock.com/support/faq.asp?id=334&#34;&gt;ASRock Dr. Debug POST codes
list&lt;/a&gt;, I saw that &lt;code&gt;A0&lt;/code&gt; falls under&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Problem related to IDE or SATA devices. Please re-install IDE and SATA devices.
If the problem still exists, please clear CMOS and try removing all SATA devices.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Since I had just done that procedure, and the issue was still there, I was stumped.&lt;/p&gt;
&lt;h3 id=&#34;wake-on-lan&#34;&gt;Wake-on-LAN&lt;/h3&gt;
&lt;p&gt;I had tried wake-on-LAN many years ago and was successful with it, so I thought that perhaps this could be an option.
After all, I really did not want to get a new motherboard if I could just work around this issue.&lt;/p&gt;
&lt;p&gt;I checked the ASRock UEFI for various wake-on-LAN related settings and found a couple of them. Oddly enough, the &lt;code&gt;Wake on LAN&lt;/code&gt;
setting itself only became available after I enabled booting from LAN in a completely unrelated UEFI section. In addition
to the &lt;code&gt;Wake on LAN&lt;/code&gt; setting, I also made sure to enable waking up from PS2 and PCIe devices, just in case.&lt;/p&gt;
&lt;p&gt;After a quick Google search I found &lt;a href=&#34;https://wiki.archlinux.org/index.php/Wake-on-LAN&#34;&gt;the Arch Linux Wiki page&lt;/a&gt; on this
topic and saw that I needed to make sure that my network adapter was configured properly for wake-on-LAN to work.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@my-machine]# ethtool enp9s0 | grep Wake-on
	Supports Wake-on: pumbg
	Wake-on: g
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Super, everything should work then!&lt;/p&gt;
&lt;p&gt;I set up an always-on machine to send the wake-on-lan magic packets using &lt;code&gt;wol&lt;/code&gt; every minute so that the machine
eventually wakes up again. It&amp;rsquo;s configured, I shut down the problematic machine and wait.&lt;/p&gt;
&lt;p&gt;Nothing happens.&lt;/p&gt;
&lt;p&gt;Huh, perhaps I missed something.&lt;/p&gt;
&lt;p&gt;No, everything was configured properly and the magic packet setting &lt;code&gt;g&lt;/code&gt; was on by default.&lt;/p&gt;
&lt;p&gt;I checked the wiki page again and two things caught my eye:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: Setting one of u, m or b along with g might also be necessary to enable the feature.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;It is known that some motherboards are affected by a bug that can cause immediate or random wake-up after a shutdown
whenever the BIOS WoL feature is enabled&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, that&amp;rsquo;s interesting.&lt;/p&gt;
&lt;p&gt;I added &lt;code&gt;* * * * * ethtool -s enp9s0 wol pumbg&lt;/code&gt; to my crontab and shut my machine down.&lt;/p&gt;
&lt;p&gt;Power supply does a click. Silence. Another click, ethernet port LED-s light up and my machine is powered on again. &lt;strong&gt;Success!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As it turns out, I did not even need to enable sending wake-on-LAN magic packets from another machine, the two motherboard
issues managed to cancel each other out.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>This page looks better in the app</title>
      <link>https://ounapuu.ee/posts/2020/08/02/this-page-looks-better-in-the-app/</link>
      <pubDate>Sun, 02 Aug 2020 09:33:41 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2020/08/02/this-page-looks-better-in-the-app/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;You&amp;rsquo;re a web developer at a social media company that has recently made a big push for
modernizing their frontend for the mobile-first era. It has taken a lot of time and effort from many people.
Countless challenges, arguments, testing.&lt;/p&gt;
&lt;p&gt;The release is near. You&amp;rsquo;re probably a bit anxious. After all, the site is visited by millions of users every day.
What if something breaks? Will the users like the redesign?&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s live.&lt;/p&gt;
&lt;p&gt;You navigate to the site on your phone.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/02/this-page-looks-better-in-the-app/media/image1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/02/this-page-looks-better-in-the-app/media/image1_hubee2c51d41ae9b3010e724e830b7e85b_169089_1280x800_fit_box_3.png&#34;
             width=&#34;466&#34;
             height=&#34;800&#34;
             alt=&#34;Huh.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      Huh.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Okay, it&amp;rsquo;s recommending the app. That&amp;rsquo;s fine though, you still have the option of using reddit in the browser.&lt;/p&gt;
&lt;p&gt;You refresh the page.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/02/this-page-looks-better-in-the-app/media/image2.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/02/this-page-looks-better-in-the-app/media/image2_hude21775c64b3c9e1774c366becbc8bc7_280212_1280x800_fit_box_3.png&#34;
             width=&#34;464&#34;
             height=&#34;800&#34;
             alt=&#34;I think it looks fine.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I think it looks fine.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;I can&amp;rsquo;t imagine what the web developer who had to implement this was feeling.&lt;/p&gt;
&lt;p&gt;To add insult to injury, this is what happens when you try to navigate to a subreddit
on the mobile site:&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/08/02/this-page-looks-better-in-the-app/media/image3.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/08/02/this-page-looks-better-in-the-app/media/image3_hu04604f5331d012d80044380b7cbd7117_146795_1280x800_fit_box_3.png&#34;
             width=&#34;464&#34;
             height=&#34;800&#34;
             alt=&#34;I think they&amp;#39;re trying to tell me something.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I think they&amp;#39;re trying to tell me something.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;There is a workaround to this: navigate to the subreddit from Google and you will be fine, as long as you don&amp;rsquo;t
navigate elsewhere.&lt;/p&gt;
&lt;p&gt;Why even bother with developing the website if all it does is advertise the app everywhere?&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    <item>
      <title>The little Wi-Fi AP that could</title>
      <link>https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/</link>
      <pubDate>Thu, 23 Jul 2020 01:17:30 +0300</pubDate>
      <author>ihavesomethoughtsonyourblog@ounapuu.ee (Herman Õunapuu)</author>
      <guid>https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;I have a bad habit of testing things whenever a &amp;ldquo;good&amp;rdquo; idea pops into my head. This is a short overview of one of them.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;http://linux-sunxi.org/Xunlong_Orange_Pi_Zero&#34;&gt;Orange Pi Zero&lt;/a&gt; is a SBC (single board computer) that has a slow 32-bit ARM 4 core CPU, 512MB of RAM and no display output.
It&amp;rsquo;s actually quite OK for many tasks, such as reverse proxy (assuming 100Mbit/s is enough for you), low-performance
NAS (assuming you are fine with 10-12MB/s file transfer speeds) or a Syncthing relay. Oh, and you can also turn it into
a Wi-Fi access point.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/media/wifi-ap.jpg&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/media/wifi-ap_huf5268d00f1ef6ae2f902d487429f4fec_329398_1280x800_fit_q75_box.jpg&#34;
             width=&#34;1067&#34;
             height=&#34;800&#34;
             alt=&#34;The Wi-Fi access point in its natural habitat.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      The Wi-Fi access point in its natural habitat.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;h3 id=&#34;why&#34;&gt;Why?&lt;/h3&gt;
&lt;p&gt;Because &lt;a href=&#34;https://www.armbian.com/&#34;&gt;Armbian&lt;/a&gt; made it really easy to test out and I was interested in seeing what kind of
performance an old USB Wi-Fi dongle could offer. This cheap AP could also come into handy in situations where my main
access point dies for some reason.&lt;/p&gt;
&lt;h3 id=&#34;how&#34;&gt;How?&lt;/h3&gt;
&lt;p&gt;Go to the &lt;a href=&#34;https://www.armbian.com/orange-pi-zero/&#34;&gt;Armbian device page for your SBC&lt;/a&gt; and download the latest image, then
write it to your microSD card using the tool of your choice, start your SBC and finish the initial setup.&lt;/p&gt;
&lt;p&gt;After all that is done, start &lt;code&gt;armbian-config&lt;/code&gt; as root. This tool allows you to do many things over a terminal UI, including
a no-hassle method of setting up an Wi-Fi AP.&lt;/p&gt;
&lt;p&gt;The option you are looking for is under &lt;code&gt;Network -&amp;gt; Hotspot&lt;/code&gt;.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/media/armbian-config-1.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/media/armbian-config-1_hufc69e7d06b25ee44c17e4a2c5dab0b84_35238_1280x800_fit_box_3.png&#34;
             width=&#34;710&#34;
             height=&#34;403&#34;
             alt=&#34;This image will likely be way out of date in a couple of years.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      This image will likely be way out of date in a couple of years.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;Follow the on-screen instructions to set everything up. After the initial setup is done, make sure to navigate to the same
menu again to change the SSID and the Wi-Fi password because the defaults are horribly insecure.&lt;/p&gt;
&lt;p&gt;After all this you should be good to go!&lt;/p&gt;
&lt;h3 id=&#34;issues-and-troubleshooting-tips&#34;&gt;Issues and troubleshooting tips&lt;/h3&gt;
&lt;p&gt;It would not be a proper project if something didn&amp;rsquo;t go wrong in the process.&lt;/p&gt;
&lt;p&gt;Before starting this configuration, run &lt;code&gt;ip a&lt;/code&gt; to see if your Wi-Fi device is present. In my case the Orange Pi Zero also
has onboard Wi-Fi, but that particular one has poor support, so I use an USB Wi-Fi dongle instead.&lt;/p&gt;
&lt;p&gt;If your Wi-Fi device is not showing up, make sure that the correct firmware is present. In my case I had to install
&lt;code&gt;firmware-atheros&lt;/code&gt; package so that my &lt;code&gt;ath9k_htc&lt;/code&gt; based Wi-Fi adapter would start working. &lt;code&gt;dmesg&lt;/code&gt; and &lt;code&gt;lsusb -v&lt;/code&gt; can help determine
what chip your Wi-Fi adapter is using and what driver it needs.&lt;/p&gt;
&lt;p&gt;The Orange Pi Zero that I have could set everything up, but it would crash hard with the logs not really showing much.
After testing the USB Wi-Fi adapter in all the different USB ports with no success, I opted to use &lt;code&gt;armbian-config&lt;/code&gt; menu &lt;code&gt;System -&amp;gt; CPU&lt;/code&gt;
to limit the CPU clock speed to 480MHz and set the CPU governor to &lt;code&gt;performance&lt;/code&gt; to rule out power delivery issues that might be caused by
variations in CPU power usage. That seems to have done the trick, because after that change the Wi-Fi AP has been rock solid.&lt;/p&gt;
&lt;h3 id=&#34;testing-and-conclusions&#34;&gt;Testing and conclusions&lt;/h3&gt;
&lt;p&gt;After setting it up and tweaking it a bit I started testing this thing out. The AP had no major issues
throughout the day and did not crash.&lt;/p&gt;
&lt;p&gt;The performance, however, isn&amp;rsquo;t anything to write home about. Speed maxes out at 30Mbit/s and is generally lower than that,
especially when more than one client is connected. You can do things like Steam Remote Play (stream your game over your home network),
but the quality will suffer. It was still quite fun to mess around in GTA V regardless of the image quality and during ~1h
of play time there were only 4-5 stutters that were caused by the network.&lt;/p&gt;







  




&lt;figure class=&#34;center&#34; &gt;
    
    &lt;a href=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/media/i-am-speed.png&#34;&gt;
        &lt;img style=&#34;max-width: 100%; width: auto; height: auto; border-radius: 8px;&#34;
             src=&#34;https://ounapuu.ee/posts/2020/07/23/the-little-wifi-ap-that-could/media/i-am-speed_hu80316490e74dcff7bd98a95134a3ceaa_7761_1280x800_fit_box_3.png&#34;
             width=&#34;223&#34;
             height=&#34;185&#34;
             alt=&#34;I am speed.&#34;
        &gt;
    &lt;/a&gt;
    &lt;figcaption class=&#34;center&#34;&gt;
      I am speed.
    &lt;/figcaption&gt;
    
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Would I use this as my main Wi-Fi access point?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Definitely not. Any half-decent router will out-perform this setup.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can it still be useful?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Definitely. A crappy Wi-Fi AP is better than no AP.&lt;/p&gt;
&lt;h3 id=&#34;parts-list&#34;&gt;Parts list&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Orange Pi Zero SBC (512MB RAM)&lt;/li&gt;
&lt;li&gt;Orange Pi Zero expansion board (adds two USB 2.0 ports)&lt;/li&gt;
&lt;li&gt;Cheap case for the Orange Pi Zero&lt;/li&gt;
&lt;li&gt;32GB Sandisk microSD card&lt;/li&gt;
&lt;li&gt;TP-Link WN-722N USB Wi-Fi adapter&lt;/li&gt;
&lt;li&gt;Official Raspberry Pi microUSB power adapter&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;update-2020-08-22&#34;&gt;Update (2020-08-22)&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s still working and is happily serving as a &lt;em&gt;temporary&lt;/em&gt; Wi-Fi access point.&lt;/p&gt;
&lt;p&gt;During additional testing I could also hit 40 Mbps speeds when testing in an environment with
far fewer competing Wi-Fi access points nearby.&lt;/p&gt;
&lt;h3 id=&#34;update-2020-08-30&#34;&gt;Update (2020-08-30)&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s still running well and it seems that it won&amp;rsquo;t be a simple temporary
solution after all.&lt;/p&gt;
&lt;h3 id=&#34;update-2020-11-30-approximately&#34;&gt;Update (2020-11-30, approximately)&lt;/h3&gt;
&lt;p&gt;This setup has now been retired. It had 0 issues throughout its lifespan as a Wi-Fi access point, but I replaced
it with a more standard Wi-Fi access point so that this board can be used somewhere else.&lt;/p&gt;
&lt;p&gt;The setup did surprisingly well and even survived nightly automated updates and restarts, which can be attributed to the good
work that &lt;a href=&#34;https://www.armbian.com/&#34;&gt;the Armbian project&lt;/a&gt; has done.&lt;/p&gt;

        
        </description>
    </item>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  </channel>
</rss>