<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on almost done</title><link>https://nietaki.com/posts/</link><description>Recent content in Posts on almost done</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>hello@nietaki.com (nietaki)</managingEditor><webMaster>hello@nietaki.com (nietaki)</webMaster><lastBuildDate>Fri, 27 Mar 2026 12:00:00 +0000</lastBuildDate><atom:link href="https://nietaki.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Owning your music (collection) without losing your mind, part 2</title><link>https://nietaki.com/2026/03/27/owning-your-music-part-2/</link><pubDate>Fri, 27 Mar 2026 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2026/03/27/owning-your-music-part-2/</guid><description>&lt;p&gt;(&lt;a href="https://nietaki.com/2026/01/15/owning-your-music-without-losing-your-mind" &gt;part 1 here&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Now that we have a way to get our music and our player(s) picked out, let&amp;rsquo;s come up with
an easy to use workflow and an organisatonial structure that works for us. It&amp;rsquo;s going to be a lengthy one, so let&amp;rsquo;s just get started.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the gist of the workflow:&lt;/p&gt;
&lt;pre class="not-prose mermaid"&gt;
flowchart TD


cd((CDs))
cd-- dBPoweramp CD Ripper --&gt;flac

bandcamp@{ shape: cloud }
bandcamp--&gt;flac

subgraph TrueNas
 direction TD
 flac@{ shape: documents, label: "/flac_music" }
 opus@{ shape: documents, label: "/opus_music" }
 mp3@{ shape: documents, label: "/mp3_music" }
 plex@{ shape: "lin-rect", label: "PLEX server" }
 flac-. lossifier-opus .-&gt;opus
 flac-. lossifier-mp3 .-&gt;mp3
 flac===plex
end

rb@{ shape: card, label: "rockbox DAP"}
android@{ shape: card, label: "Android DAP"}
snow@{ shape: card, label: "snowsky DAP"}
laptop@{ shape: card, label: "laptop"}

opus-- rclone --&gt;rb
mp3-- rclone --&gt;snow
opus-. autosync .-&gt;android
plex--&gt;laptop
plex--&gt;android
&lt;/pre&gt;

&lt;pre class="not-prose mermaid"&gt;
flowchart TD

subgraph legend [Legend]
 direction TD
 style legend fill:none
 smb@{ shape: documents, label: "SMB share" }
 docker@{ shape: "lin-rect", label: "docker service" }
 dap@{ shape: card, label: "player hardware"}
 Com@{ shape: braces, label: "dotted arrows run\n on a schedule" }
end
&lt;/pre&gt;

&lt;p&gt;As you can see the centerpiece of the system is a &lt;a href="https://www.truenas.com/truenas-community-edition/" target="_blank" rel="noreferrer"&gt;TrueNas&lt;/a&gt; NAS.&lt;/p&gt;</description></item><item><title>Srcery cheat sheet - This should already be up somewhere</title><link>https://nietaki.com/2026/03/24/srcery-cheat-sheet/</link><pubDate>Tue, 24 Mar 2026 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2026/03/24/srcery-cheat-sheet/</guid><description>&lt;p&gt;&lt;a href="https://srcery.sh/" target="_blank" rel="noreferrer"&gt;Srcery color scheme&lt;/a&gt; is awesome, but it&amp;rsquo;s not nearly as popular as some of the other ones.
So if you adopted it as your main color scheme, you sometimes gotta do some legwork to make your devenv consistent.&lt;/p&gt;
&lt;p&gt;So since I&amp;rsquo;m adopting Zellij, I sort of had to make this cheat sheet:&lt;/p&gt;
&lt;table&gt;
 &lt;tbody&gt;&lt;tr&gt;
 &lt;th&gt;type&lt;/th&gt;
 &lt;th&gt;name&lt;/th&gt;
 &lt;th&gt;full name&lt;/th&gt;
 &lt;th&gt;color&lt;/th&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;black&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-black&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-black)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;red&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-red&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-red)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;green&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-green&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-green)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;yellow&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-yellow&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-yellow)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;blue&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-blue&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-blue)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;magenta&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-magenta&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-magenta)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;cyan&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-cyan&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-cyan)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;white&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-white&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-white)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;bright-black&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-bright-black&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-bright-black)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;bright-red&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-bright-red&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-bright-red)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;bright-green&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-bright-green&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-bright-green)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;bright-yellow&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-bright-yellow&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-bright-yellow)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;bright-blue&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-bright-blue&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-bright-blue)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;bright-magenta&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-bright-magenta&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-bright-magenta)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;bright-cyan&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-bright-cyan&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-bright-cyan)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;b&gt;primary&lt;/b&gt;&lt;/td&gt;
 &lt;td&gt;bright-white&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-primary-bright-white&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-primary-bright-white)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;orange&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-orange&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-orange)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;bright-orange&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-bright-orange&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-bright-orange)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;hard-black&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-hard-black&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-hard-black)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;teal&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-teal&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-teal)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray1&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray1&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray1)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray2&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray2&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray2)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray3&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray3&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray3)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray4&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray4&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray4)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray5&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray5&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray5)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray6&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray6&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray6)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray7&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray7&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray7)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray8&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray8&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray8)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray9&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray9&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray9)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray10&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray10&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray10)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray11&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray11&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray11)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;secondary&lt;/td&gt;
 &lt;td&gt;xgray12&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;srcery-palette-secondary-xgray12&lt;/code&gt;&lt;/td&gt;
 &lt;td style="background-color: var(--srcery-palette-secondary-xgray12)"&gt;&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</description></item><item><title>Fixing Cloudflare 523 errors</title><link>https://nietaki.com/2026/02/25/fixing-523-errors-with-cloudflare-tunnels/</link><pubDate>Wed, 25 Feb 2026 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2026/02/25/fixing-523-errors-with-cloudflare-tunnels/</guid><description>&lt;p&gt;For some context: Recently I&amp;rsquo;ve been sharpening my Kubernetes skills by setting up
a small &lt;a href="https://botland.store/raspberry-pi-cm4/25347-deskpi-super6c-raspberry-pi-cm4-cluster-board-mini-itx-motherboard-for-6-raspberry-pi-cm4-modules-seeedstudio-114110107.html" target="_blank" rel="noreferrer"&gt;6 node k3s cluster&lt;/a&gt; at home. The place I currently live doesn&amp;rsquo;t have a public IP address, so I chose to set up
a &lt;a href="https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/" target="_blank" rel="noreferrer"&gt;Cloudflare Tunnel&lt;/a&gt; to expose services to the internet.&lt;/p&gt;
&lt;p&gt;I chose to have the &lt;code&gt;cloudflared&lt;/code&gt; daemon running on the host machines and the overall setup quick and pain-free. The whole thing seemed to work well, but I noticed that over time (within hours) the tunneled
services would start responding more slowly and eventually Cloudflare would display 523 errors.&lt;/p&gt;</description></item><item><title>Owning your music (collection) without losing your mind, part 1</title><link>https://nietaki.com/2026/01/15/owning-your-music-without-losing-your-mind/</link><pubDate>Thu, 15 Jan 2026 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2026/01/15/owning-your-music-without-losing-your-mind/</guid><description>&lt;p&gt;Recently, after learning &lt;a href="https://www.youtube.com/watch?v=LQRtKD4gx1k" target="_blank" rel="noreferrer"&gt;how bad spotify is for its artists&lt;/a&gt; I made a deliberate effort to move my family to &lt;a href="https://tidal.com/" target="_blank" rel="noreferrer"&gt;Tidal&lt;/a&gt; - 8/10 decision, would recommend.&lt;/p&gt;
&lt;p&gt;But to take step further I decided to slowly move towards &amp;ldquo;owning my music&amp;rdquo; - maintaining my own digital collection of music and making sure I have a convenient way of listening to it.&lt;/p&gt;
&lt;p&gt;There were a number of reasons for it&lt;/p&gt;</description></item><item><title>Elixir string operations seem slow (and why it's a good thing)</title><link>https://nietaki.com/2023/04/21/elixir-string-operations-seem-slow-and-why-its-a-good-thing/</link><pubDate>Fri, 21 Apr 2023 13:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2023/04/21/elixir-string-operations-seem-slow-and-why-its-a-good-thing/</guid><description>&lt;p&gt;I personally hate it when people post clickbait titles and take their sweet time getting to the point, so let&amp;rsquo;s do this first:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Some Elixir string operations, most notably &lt;a href="https://hexdocs.pm/elixir/String.html#at/2" target="_blank" rel="noreferrer"&gt;&lt;code&gt;String.at/2&lt;/code&gt;&lt;/a&gt; work in &lt;a href="https://en.wikipedia.org/wiki/Time_complexity#Linear_time" target="_blank" rel="noreferrer"&gt;linear time&lt;/a&gt;,
as opposed to &lt;a href="https://en.wikipedia.org/wiki/Time_complexity#Linear_time" target="_blank" rel="noreferrer"&gt;constant time&lt;/a&gt;, like the intuition might suggest. This is because the &lt;code&gt;String&lt;/code&gt; module is UTF-8 aware.
UTF-8 encodes characters outside of ASCII with more than one byte, so in order to find the n-th character in a string you need to process it from the beginning, you can&amp;rsquo;t just use an offset in memory.&lt;/p&gt;</description></item><item><title>Notion Buttons and what they need to be truly useful</title><link>https://nietaki.com/2023/04/12/notion-buttons-and-what-they-need-to-be-truly-useful/</link><pubDate>Wed, 12 Apr 2023 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2023/04/12/notion-buttons-and-what-they-need-to-be-truly-useful/</guid><description>&lt;p&gt;I&amp;rsquo;m a long time power-user of &lt;a href="https://notion.so/" target="_blank" rel="noreferrer"&gt;Notion&lt;/a&gt;. For the last couple of years I&amp;rsquo;ve been using it for all of my note-taking, work organisation and tracking, online documentation, storing cooking recipes and much more. Recently they introduced a new &lt;a href="https://www.notion.so/help/template-buttons" target="_blank" rel="noreferrer"&gt;Buttons&lt;/a&gt; feature and it excited many people who thought it would be the missing piece in their workflow organisation.&lt;/p&gt;
&lt;p&gt;I played around with it for a while and I can see the current functionality is a great starting point, but it needs a bit more to actually be useful (to me)&amp;hellip;&lt;/p&gt;</description></item><item><title>How to use data spanning multiple data sources in Elixir</title><link>https://nietaki.com/2020/02/02/how-to-use-data-spanning-multiple-data-sources-in-elixir/</link><pubDate>Sun, 02 Feb 2020 15:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2020/02/02/how-to-use-data-spanning-multiple-data-sources-in-elixir/</guid><description>&lt;p&gt;&lt;em&gt;Below is a reprint of the &lt;a href="https://medium.com/rekkiapp/how-to-use-data-spanning-multiple-data-sources-in-elixir-50f39c87d8fc" target="_blank" rel="noreferrer"&gt;article&lt;/a&gt; I wrote for the &lt;a href="https://rekki.com/" target="_blank" rel="noreferrer"&gt;Rekki&lt;/a&gt; Medium page.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="http://www.rekki.com/" target="_blank" rel="noreferrer"&gt;REKKI&lt;/a&gt; builds tools that help people along the restaurant supply chain do their jobs better.&lt;/p&gt;
&lt;p&gt;We have a free mobile app that lets restaurants order and chat with suppliers, and a web-based tool for suppliers that helps them process orders, manage product codes and catalogues, and communicate more easily with their customers. The majority of REKKI’s backend is written in Elixir, working hand in hand with services written in Go and Node. The Elixir services handle most of what the user sees in the app like the real-time communication with the supplier and the status of the orders.&lt;/p&gt;</description></item><item><title>Trust issues: trouble in package paradise - Code BEAM STO 2019 talk</title><link>https://nietaki.com/2019/09/01/trust-issues-code-beam-sto-talk/</link><pubDate>Sun, 01 Sep 2019 15:21:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2019/09/01/trust-issues-code-beam-sto-talk/</guid><description>&lt;p&gt;Earlier this year I gave a talk at &lt;a href="https://codesync.global/conferences/code-beam-sto-2019/" target="_blank" rel="noreferrer"&gt;Code BEAM STO&lt;/a&gt; about a proposed solution to the ever more real risk of hidden malicious code in our library dependencies. You can watch the whole thing here:&lt;/p&gt;
&lt;iframe width="640" height="360" src="//www.youtube.com/embed/ejAY6yWXZSc" frameborder="0" allowfullscreen&gt; &lt;/iframe&gt;
&lt;p&gt;UPDATE: I have since dropped active development of the Hoplon project, but I hope something like it will become reality when the tech community is ready for it :)&lt;/p&gt;</description></item><item><title>String&amp;#x200B;.to_existing_atom&amp;#x200B;/1 is a double-edged sword</title><link>https://nietaki.com/2018/12/04/string-to-existing-atom-is-a-double-edged-sword/</link><pubDate>Tue, 04 Dec 2018 13:21:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2018/12/04/string-to-existing-atom-is-a-double-edged-sword/</guid><description>&lt;p&gt;I&amp;rsquo;d argue Elixir has relatively few gotchas. It&amp;rsquo;s a simple and consistent language
and when you first learn it there&amp;rsquo;s only a few things that are genuinely counter-intuitive
and catch you by surprise.&lt;/p&gt;
&lt;p&gt;One of the examples could be the difference between
&lt;a href="https://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html" target="_blank" rel="noreferrer"&gt;binaries and charlists&lt;/a&gt;
and why iex sometimes seems to do weird things to your lists:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-elixir" data-lang="elixir"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;119&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;116&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;119&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;116&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;Enum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;119&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;116&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;Enum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;119&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;116&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;Enum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;&amp;#39;wat&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;One of the other ones comes when you start working with atoms and get a
little too trigger-happy with them. What you could hear from your more experienced
teammates is something like this:&lt;/p&gt;</description></item><item><title>I'm stealing API keys from your site</title><link>https://nietaki.com/2018/12/02/i-am-stealing-api-keys-from-your-site/</link><pubDate>Sun, 02 Dec 2018 18:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2018/12/02/i-am-stealing-api-keys-from-your-site/</guid><description>&lt;p&gt;Earlier this year I presented my latest project - Hoplon - at the London
Elixir meetup. I&amp;rsquo;m thinking of putting some more work into it over Christmas,
so I figured I might gather the materials about it in one place:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/nietaki/hoplon" target="_blank" rel="noreferrer"&gt;Hoplon&lt;/a&gt; is an Elixir developer tool that helps
you validate your dependencies contain no
hidden malicious code. Motivated by horror stories from the JavaScript community
such as &lt;a href="https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5" target="_blank" rel="noreferrer"&gt;this hypothetical one&lt;/a&gt;
and &lt;a href="https://github.com/dominictarr/event-stream/issues/116" target="_blank" rel="noreferrer"&gt;this very real one&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Introducing Rexbug - tracing on the shoulders of giants</title><link>https://nietaki.com/2018/01/10/introducing-rexbug/</link><pubDate>Wed, 10 Jan 2018 02:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2018/01/10/introducing-rexbug/</guid><description>&lt;p&gt;Towards the end of November I gave a flash talk at the
&lt;a href="https://www.meetup.com/Elixir-London/" target="_blank" rel="noreferrer"&gt;London Elixir Meetup&lt;/a&gt;.
This time I was talking about the journey from &lt;code&gt;println&lt;/code&gt; debugging to
proper tracing and bringing Erlang tools to Elixir programmers.&lt;/p&gt;
&lt;p&gt;You can watch the talk here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://skillsmatter.com/skillscasts/11258-tracing-on-the-shoulders-of-giants" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt="talk thumbnail"
 width="2140"
 height="1202"
 src="https://nietaki.com/img/rexbug-talk_hu_8d9043aa447ac3d6.png"
 srcset="https://nietaki.com/img/rexbug-talk_hu_8d9043aa447ac3d6.png 800w, https://nietaki.com/img/rexbug-talk_hu_3789ffd09fe5f2fd.png 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://nietaki.com/img/rexbug-talk.png"&gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;hellip;and here are &lt;a href="http://slides.com/nietaki/tracing-on-the-shoulders-of-giants" target="_blank" rel="noreferrer"&gt;the slides&lt;/a&gt;:&lt;/p&gt;
&lt;iframe src="//slides.com/nietaki/tracing-on-the-shoulders-of-giants/embed?style=light" width="576" height="420" scrolling="no" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;
&lt;p&gt;The resulting &lt;a href="https://github.com/nietaki/rexbug" target="_blank" rel="noreferrer"&gt;Rexbug&lt;/a&gt; project is ready to
be used but there&amp;rsquo;s still some &lt;a href="https://github.com/nietaki/rexbug/issues" target="_blank" rel="noreferrer"&gt;issues&lt;/a&gt;
I could use some help on - some should even be suitable for Elixir beginners.&lt;/p&gt;</description></item><item><title>Crawlie - Elixir London Meetup presentation</title><link>https://nietaki.com/2017/07/09/crawlie-lessons-learned-about-gen-stage-and-flow/</link><pubDate>Sun, 09 Jul 2017 02:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2017/07/09/crawlie-lessons-learned-about-gen-stage-and-flow/</guid><description>&lt;p&gt;Last year, I saw José Valim give his keynote at the &lt;a href="http://www.elixirlive.com/" target="_blank" rel="noreferrer"&gt;ElixirLive conference&lt;/a&gt; in Warsaw, where he talked about
the motivation for his new Elixir libraries: &lt;a href="https://github.com/elixir-lang/gen_stage" target="_blank" rel="noreferrer"&gt;GenStage&lt;/a&gt; and &lt;a href="https://github.com/elixir-lang/flow" target="_blank" rel="noreferrer"&gt;Flow&lt;/a&gt;.
Even though I heard about those before, it was the keynote when I &amp;ldquo;got&amp;rdquo; what the libraries were good for
and why they were neat - and I decided to play around with them.&lt;/p&gt;</description></item><item><title>Atom as an elixir IDE</title><link>https://nietaki.com/2016/11/14/atom-as-an-elixir-ide/</link><pubDate>Mon, 14 Nov 2016 20:58:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2016/11/14/atom-as-an-elixir-ide/</guid><description>&lt;h5 class="relative group"&gt;July 2019 update:
 &lt;div id="july-2019-update" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#july-2019-update" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h5&gt;
&lt;p&gt;I have since moved to &lt;a href="https://neovim.io/" target="_blank" rel="noreferrer"&gt;neovim&lt;/a&gt; for all my Linux/OSX work, and I&amp;rsquo;m very happy with it. The information here is probably very outdated, but I&amp;rsquo;m leaving it here for posterity&lt;/p&gt;
&lt;p&gt;You can see my neovim configuration &lt;a href="https://github.com/nietaki/dotfiles/blob/master/home/.config/nvim/" target="_blank" rel="noreferrer"&gt;in my dotfiles&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Earlier this year I joined &lt;a href="https://mainframe.com/" target="_blank" rel="noreferrer"&gt;Mainframe&lt;/a&gt; as a backend engineer. I didn&amp;rsquo;t do any real
development in &lt;a href="http://elixir-lang.org/" target="_blank" rel="noreferrer"&gt;elixir&lt;/a&gt; before and I wanted to become
productive with it ASAP. When it comes to elixir there were
&lt;a href="http://amzn.to/2fr9dRw" target="_blank" rel="noreferrer"&gt;some&lt;/a&gt;
&lt;a href="http://amzn.to/2fr6lUq" target="_blank" rel="noreferrer"&gt;good&lt;/a&gt;
&lt;a href="http://amzn.to/2fr9ML1" target="_blank" rel="noreferrer"&gt;books&lt;/a&gt; to help me understand it better, but I also needed an
editor or and IDE that would give me the necessary tools without getting in my way.&lt;/p&gt;</description></item><item><title>Liar's dice (common hand) - best rules variation</title><link>https://nietaki.com/2015/12/12/liars-dice-best-rules-variation/</link><pubDate>Sat, 12 Dec 2015 22:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2015/12/12/liars-dice-best-rules-variation/</guid><description>&lt;p&gt;I&amp;rsquo;ve been a semi-active board game nerd for quite a while now and I find myself playing a wide variety of games, ranging from &lt;a href="https://boardgamegeek.com/boardgame/8098/jungle-speed" target="_blank" rel="noreferrer"&gt;Jungle Speed&lt;/a&gt; to &lt;a href="https://boardgamegeek.com/boardgame/37111/battlestar-galactica" target="_blank" rel="noreferrer"&gt;Battlestar Galactica&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Go_%28game%29" target="_blank" rel="noreferrer"&gt;go&lt;/a&gt;. Board games are a huge universe to explore, but there&amp;rsquo;s been one game that me and my friends have been playing for years now and it&amp;rsquo;s still a crowd favourite. It can accommodate virtually any number of players, it&amp;rsquo;s cheap (all you need is some dice), simple to explain, and - last but not least, drunk-people-friendly. If you can still count, you can still play and even if the table is all covered in beer, the dice couldn&amp;rsquo;t care less.&lt;/p&gt;</description></item><item><title>Intern's guide to Dublin</title><link>https://nietaki.com/2012/10/19/interns-guide-to-dublin/</link><pubDate>Fri, 19 Oct 2012 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2012/10/19/interns-guide-to-dublin/</guid><description>&lt;p&gt;I spent the last three months in Dublin, on an internship with Microsoft. The experience was great and I could recommend it to anybody, but that’s not what I wanted to talk about this time. Whenever you move from one place to another there’s a certain amount of know-how that makes your new life easier/better/more predictable and that knowledge usually comes with time. By the end of my internship I felt at home in Dublin and now I’d like to share some tips with you.&lt;/p&gt;</description></item><item><title>ML-class.org course</title><link>https://nietaki.com/2012/02/10/ml-class-org-coursera-machine-learning-course/</link><pubDate>Fri, 10 Feb 2012 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2012/02/10/ml-class-org-coursera-machine-learning-course/</guid><description>&lt;p&gt;In the last three months of the last year I had the pleasure of taking part in an online machine learning course, taught by prof. Andrew Ng of the Stanford University. The course is already over, so it might seem old news, but next edition should start any time now. If the topic of machine learning seems interesting to you in any way I can really recommend it.&lt;/p&gt;</description></item><item><title>TDD in C++ (screencast in Polish)</title><link>https://nietaki.com/2012/02/09/tdd-in-cpp/</link><pubDate>Thu, 09 Feb 2012 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2012/02/09/tdd-in-cpp/</guid><description>&lt;p&gt;For my classes I recorded screencasts about &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank" rel="noreferrer"&gt;TDD&lt;/a&gt;, and, because lately I’m focused mostly on c++, I decided to dive into
&lt;a href="https://code.google.com/p/googletest/" target="_blank" rel="noreferrer"&gt;google test&lt;/a&gt;
instead of the regular jMock and Mockito. Initially I wanted to make it a tutorial showcasing all the tools
within the library, but it ended up being a TDD Kata solving example with a short introduction about how to set up the
development environment.&lt;/p&gt;</description></item><item><title>Google engineers meetup</title><link>https://nietaki.com/2011/10/18/google-engineers-meetup/</link><pubDate>Tue, 18 Oct 2011 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2011/10/18/google-engineers-meetup/</guid><description>&lt;p&gt;This thursday, in the lecture hall of the Biology Departament of University of Warsaw, Google organized a meetup with their engineers, celebrating the official launch of their new office in Warsaw. The event started with &lt;a href="http://pl.wikipedia.org/wiki/Joshua_Bloch" target="_blank" rel="noreferrer"&gt;Joshua Bloch&lt;/a&gt;’s, lecture, which was a treat for the attendees, most of whom were &lt;a href="http://www.mimuw.edu.pl/" target="_blank" rel="noreferrer"&gt;MIM UW&lt;/a&gt; students, almost filling the room.&lt;/p&gt;
&lt;p&gt;Joshua presented code snippets that don’t do what you might expect them to, by invoking constructs that may lead to unforseen behavior. Majority of those constructs weren’t Java-exclusive and could have been presented in C++ or even python. The well known issues were covered, e.g. String comparison, operator precedence, working with floating-point variables, implicit conversion. But there also were topics I haven’t ever thought about, like regular expressions that match same patterns but differ hugely in their efficiency.&lt;/p&gt;</description></item><item><title>laptop monitoring - the aftermath</title><link>https://nietaki.com/2011/10/04/laptop-monitoring-the-aftermath/</link><pubDate>Tue, 04 Oct 2011 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2011/10/04/laptop-monitoring-the-aftermath/</guid><description>&lt;p&gt;Some time ago &lt;a href="https://nietaki.com/2011/04/24/defensive-photobooth/" &gt;I described&lt;/a&gt; a script you could use to see who’s using your laptop when you’re not around. I sadly (?) didn’t catch any robbers using it, but the whole setup already took nearly 4000 photos, some of which might be a little interesting:&lt;/p&gt;


 
 
 
 
 
 
 
 
 
 
 &lt;div class="width-patch"&gt;&lt;/div&gt;
&lt;div id="gallery-584c1928aae5056de960eb6a6c3116d5" class="gallery"&gt;
 
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_04_14-10_13_37.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_04_14-12_38_21.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_05_17-15_17_40.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_08_02-11_57_07.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_08_02-11_58_41.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_08_02-12_31_30.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_08_04-12_49_09.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_08_04-12_52_16.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_08_04-21_29_49.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_08_11-10_16_46.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/photobooth/photos/ss2011_08_11-10_55_37.jpg" class="grid-w33" /&gt;
&lt;/div&gt;

&lt;p&gt;I’ve got a series or two of one person sitting in front of the computer for quite some time and I could use it to create a timelapse similar to those I made using my &lt;a href="http://www.youtube.com/watch?v=AlOeIpLpXkE" target="_blank" rel="noreferrer"&gt;crude blackberry app&lt;/a&gt;, but on the other hand maybe I shouldn’t be picking on my friends…&lt;/p&gt;</description></item><item><title>Next Top Coder wallpapers</title><link>https://nietaki.com/2011/09/21/next-top-coder-wallpaper/</link><pubDate>Wed, 21 Sep 2011 23:24:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2011/09/21/next-top-coder-wallpaper/</guid><description>&lt;p&gt;I was talking to a friend of mine and we came up with the idea of “America’s next top model” and Top Coder crossover. The “top model” shows are slowly losing their popularity, but our idea is still scary on the wallpaper of my desktop, motivating me to hard work:&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt="Sample post image"
 width="1440"
 height="900"
 src="https://nietaki.com/img/wallpapers/topcodr1440_hu_6eb1b2a617e52a80.jpg"
 srcset="https://nietaki.com/img/wallpapers/topcodr1440_hu_6eb1b2a617e52a80.jpg 800w, https://nietaki.com/img/wallpapers/topcodr1440_hu_d3727bdf9e0d13b7.jpg 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://nietaki.com/img/wallpapers/topcodr1440.jpg"&gt;&lt;/figure&gt;
&lt;p&gt;Half of the idea and the whole design is courtesy of &lt;a href="http://behance.net/rostek" target="_blank" rel="noreferrer"&gt;Jakub Rostkowski&lt;/a&gt;, and the wallpaper comes in three different sizes:
&lt;a href="https://nietaki.com/img/wallpapers/topcodr1440.jpg" &gt;1440×900&lt;/a&gt;,
&lt;a href="https://nietaki.com/img/wallpapers/topcodr1600r.jpg" &gt;1600×1200&lt;/a&gt;,
&lt;a href="https://nietaki.com/img/wallpapers/topcodr1920.jpg" &gt;1900x1200&lt;/a&gt;,&lt;/p&gt;</description></item><item><title>defensive photobooth a.k.a Do Not Fuck With a Hacker's Machine</title><link>https://nietaki.com/2011/04/24/defensive-photobooth/</link><pubDate>Sun, 24 Apr 2011 12:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/2011/04/24/defensive-photobooth/</guid><description>&lt;p&gt;Some time ago, inspired by…&lt;/p&gt;
&lt;iframe width="640" height="360" src="//www.youtube.com/embed/Jwpg-AwJ0Jc" frameborder="0" allowfullscreen&gt; &lt;/iframe&gt;
&lt;p&gt;…also known as the “Do not fuck with a hacker’s machine” clip, and the fact I started using Debian exclusively on my netbook, I decided to make preparations in advance for a dire situation in which my laptop is stolen/captured by insurgents, and retrieve it easier or even play a prank on them. These were my postulates:&lt;/p&gt;</description></item></channel></rss>