<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>almost done</title><link>https://nietaki.com/</link><description>Recent content 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, 10 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://nietaki.com/index.xml" rel="self" type="application/rss+xml"/><item><title>lossifier</title><link>https://nietaki.com/projects/lossifier/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/projects/lossifier/</guid><description>&lt;p&gt;A dockerized script for converting a FLAC music library to a lossy Opus/MP3 format
making maintaining an offline music collection easy.&lt;/p&gt;
&lt;div class="github-card-wrapper"&gt;
 &lt;a id="github-7254bfb80b083842f4fd60d5e86434da" target="_blank" href="https://github.com/nietaki/lossifier" class="cursor-pointer"&gt;
 &lt;div
 class="w-full md:w-auto p-0 m-0 border border-neutral-200 dark:border-neutral-700 border rounded-md shadow-2xl"&gt;&lt;div class="w-full nozoom"&gt;
 &lt;img
 src="https://opengraph.githubassets.com/0/nietaki/lossifier"
 alt="GitHub Repository Thumbnail"
 class="nozoom mt-0 mb-0 w-full h-full object-cover"&gt;
 &lt;/div&gt;&lt;div class="w-full md:w-auto pt-3 p-5"&gt;
 &lt;div class="flex items-center"&gt;
 &lt;span class="text-2xl text-neutral-800 dark:text-neutral me-2"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"&gt;&lt;path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
 &lt;/span&gt;
 &lt;div
 id="github-7254bfb80b083842f4fd60d5e86434da-full_name"
 class="m-0 font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"&gt;
 nietaki/lossifier
 &lt;/div&gt;
 &lt;/div&gt;

 &lt;p id="github-7254bfb80b083842f4fd60d5e86434da-description" class="m-0 mt-2 text-md text-neutral-800 dark:text-neutral"&gt;
 converts your lossless .flac music collection to a mirrored .opus or .mp3 collection
 &lt;/p&gt;</description></item><item><title>Creative Coding</title><link>https://nietaki.com/projects/creative-coding/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/projects/creative-coding/</guid><description>&lt;p&gt;A while back I was looking for a creative outlet I could make something I&amp;rsquo;d like on a daily basis and (finally) got into creative coding.&lt;/p&gt;
&lt;p&gt;I chose &lt;a href="https://www.love2d.org/" target="_blank" rel="noreferrer"&gt;love2d&lt;/a&gt; as my framework and started making animations,
aiming to create a new one on a daily basis.&lt;/p&gt;













 
 
 
 
 
 
 
 
 
 
 
 
 






&lt;div class="width-patch"&gt;&lt;/div&gt;
&lt;div
 id="carousel-b0f1c8397d20783523e76825743a01ae-1775919262975773719"
 class="relative"
 data-twe-carousel-init
 data-twe-ride="carousel"
 data-twe-interval="2500"&gt;
 &lt;div
 class="absolute right-0 bottom-0 left-0 z-2 mx-[15%] mb-10 flex list-none justify-center p-0"
 data-twe-carousel-indicators&gt;
 
 
 &lt;button
 type="button"
 data-twe-target="#carousel-b0f1c8397d20783523e76825743a01ae-1775919262975773719"
 data-twe-slide-to="0"
 data-twe-carousel-active aria-current="true"
 class="mx-[3px] box-content h-[3px] w-[30px] flex-initial cursor-pointer border-0 border-y-[10px] border-solid border-transparent bg-neutral bg-clip-padding p-0 -indent-[999px] opacity-50 transition-opacity duration-[600ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"
 aria-label="Slide 0"&gt;&lt;/button&gt;
 
 
 &lt;button
 type="button"
 data-twe-target="#carousel-b0f1c8397d20783523e76825743a01ae-1775919262975773719"
 data-twe-slide-to="1"
 
 class="mx-[3px] box-content h-[3px] w-[30px] flex-initial cursor-pointer border-0 border-y-[10px] border-solid border-transparent bg-neutral bg-clip-padding p-0 -indent-[999px] opacity-50 transition-opacity duration-[600ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"
 aria-label="Slide 1"&gt;&lt;/button&gt;
 
 
 &lt;button
 type="button"
 data-twe-target="#carousel-b0f1c8397d20783523e76825743a01ae-1775919262975773719"
 data-twe-slide-to="2"
 
 class="mx-[3px] box-content h-[3px] w-[30px] flex-initial cursor-pointer border-0 border-y-[10px] border-solid border-transparent bg-neutral bg-clip-padding p-0 -indent-[999px] opacity-50 transition-opacity duration-[600ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"
 aria-label="Slide 2"&gt;&lt;/button&gt;
 
 
 &lt;button
 type="button"
 data-twe-target="#carousel-b0f1c8397d20783523e76825743a01ae-1775919262975773719"
 data-twe-slide-to="3"
 
 class="mx-[3px] box-content h-[3px] w-[30px] flex-initial cursor-pointer border-0 border-y-[10px] border-solid border-transparent bg-neutral bg-clip-padding p-0 -indent-[999px] opacity-50 transition-opacity duration-[600ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"
 aria-label="Slide 3"&gt;&lt;/button&gt;
 
 
 &lt;button
 type="button"
 data-twe-target="#carousel-b0f1c8397d20783523e76825743a01ae-1775919262975773719"
 data-twe-slide-to="4"
 
 class="mx-[3px] box-content h-[3px] w-[30px] flex-initial cursor-pointer border-0 border-y-[10px] border-solid border-transparent bg-neutral bg-clip-padding p-0 -indent-[999px] opacity-50 transition-opacity duration-[600ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"
 aria-label="Slide 4"&gt;&lt;/button&gt;
 
 
 &lt;/div&gt;

 &lt;div
 class="relative w-full after:clear-both after:block after:content-['']"
 style="overflow-x: clip; overflow-y: visible;"&gt;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 &lt;div
 class="relative float-left -mr-[100%] w-full transition-transform ease-in-out motion-reduce:transition-none"
 data-twe-carousel-item
 style="transition-duration: 2500ms;"
 data-twe-carousel-active&gt;
 &lt;div class="single_hero_background relative overflow-hidden" style="aspect-ratio: 16 / 9;"&gt;
 &lt;img
 src="https://nietaki.com/projects/creative-coding/love2plot_gallery/10-torus.jpg"
 class="block absolute top-0 object-cover w-full h-full not-prose nozoom"
 alt="carousel image 1"&gt;
 &lt;/div&gt;
 
 &lt;/div&gt;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 &lt;div
 class="relative float-left -mr-[100%] hidden w-full transition-transform ease-in-out motion-reduce:transition-none"
 data-twe-carousel-item
 style="transition-duration: 2500ms;"
 &gt;
 &lt;div class="single_hero_background relative overflow-hidden" style="aspect-ratio: 16 / 9;"&gt;
 &lt;img
 src="https://nietaki.com/projects/creative-coding/love2plot_gallery/debug.jpg"
 class="block absolute top-0 object-cover w-full h-full not-prose nozoom"
 alt="carousel image 2"&gt;
 &lt;/div&gt;
 
 &lt;/div&gt;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 &lt;div
 class="relative float-left -mr-[100%] hidden w-full transition-transform ease-in-out motion-reduce:transition-none"
 data-twe-carousel-item
 style="transition-duration: 2500ms;"
 &gt;
 &lt;div class="single_hero_background relative overflow-hidden" style="aspect-ratio: 16 / 9;"&gt;
 &lt;img
 src="https://nietaki.com/projects/creative-coding/love2plot_gallery/kaleidoscope.jpg"
 class="block absolute top-0 object-cover w-full h-full not-prose nozoom"
 alt="carousel image 3"&gt;
 &lt;/div&gt;
 
 &lt;/div&gt;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 &lt;div
 class="relative float-left -mr-[100%] hidden w-full transition-transform ease-in-out motion-reduce:transition-none"
 data-twe-carousel-item
 style="transition-duration: 2500ms;"
 &gt;
 &lt;div class="single_hero_background relative overflow-hidden" style="aspect-ratio: 16 / 9;"&gt;
 &lt;img
 src="https://nietaki.com/projects/creative-coding/love2plot_gallery/pills.jpg"
 class="block absolute top-0 object-cover w-full h-full not-prose nozoom"
 alt="carousel image 4"&gt;
 &lt;/div&gt;
 
 &lt;/div&gt;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 &lt;div
 class="relative float-left -mr-[100%] hidden w-full transition-transform ease-in-out motion-reduce:transition-none"
 data-twe-carousel-item
 style="transition-duration: 2500ms;"
 &gt;
 &lt;div class="single_hero_background relative overflow-hidden" style="aspect-ratio: 16 / 9;"&gt;
 &lt;img
 src="https://nietaki.com/projects/creative-coding/love2plot_gallery/solitaire.jpg"
 class="block absolute top-0 object-cover w-full h-full not-prose nozoom"
 alt="carousel image 5"&gt;
 &lt;/div&gt;
 
 &lt;/div&gt;
 
 &lt;/div&gt;

 &lt;button
 class="absolute top-0 bottom-0 left-0 z-2 flex w-[15%] items-center justify-center border-0 bg-none p-0 text-center opacity-50 transition-opacity duration-150 ease-[cubic-bezier(0.25,0.1,0.25,1.0)] hover:no-underline hover:opacity-90 hover:outline-none focus:no-underline focus:opacity-90 focus:outline-none motion-reduce:transition-none"
 type="button"
 data-twe-target="#carousel-b0f1c8397d20783523e76825743a01ae-1775919262975773719"
 data-twe-slide="prev"&gt;
 &lt;span class="inline-block h-8 w-8"&gt;
 &lt;svg
 xmlns="http://www.w3.org/2000/svg"
 fill="none"
 viewBox="0 0 24 24"
 stroke-width="4.5"
 stroke="currentColor"
 class="h-6 w-6"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5L8.25 12l7.5-7.5" /&gt;
 &lt;/svg&gt;
 &lt;/span&gt;
 &lt;span
 class="!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]"
 &gt;Previous&lt;/span
 &gt;
 &lt;/button&gt;

 &lt;button
 class="absolute top-0 bottom-0 right-0 z-[1] flex w-[15%] items-center justify-center border-0 bg-none p-0 text-center opacity-50 transition-opacity duration-150 ease-[cubic-bezier(0.25,0.1,0.25,1.0)] hover:no-underline hover:opacity-90 hover:outline-none focus:no-underline focus:opacity-90 focus:outline-none motion-reduce:transition-none"
 type="button"
 data-twe-target="#carousel-b0f1c8397d20783523e76825743a01ae-1775919262975773719"
 data-twe-slide="next"&gt;
 &lt;span class="inline-block h-8 w-8"&gt;
 &lt;svg
 xmlns="http://www.w3.org/2000/svg"
 fill="none"
 viewBox="0 0 24 24"
 stroke-width="4.5"
 stroke="currentColor"
 class="h-6 w-6"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" /&gt;
 &lt;/svg&gt;
 &lt;/span&gt;
 &lt;span
 class="!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]"
 &gt;Next&lt;/span
 &gt;
 &lt;/button&gt;
&lt;/div&gt;

&lt;p&gt;As I built up my lua toolkit the creations got more complex over time, with 3d rendering,
a custom GLSL pre-processor and tracing profiler.&lt;/p&gt;</description></item><item><title>Revolt keyboard</title><link>https://nietaki.com/projects/revolt-keyboard/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/projects/revolt-keyboard/</guid><description>&lt;p&gt;After using ergonomic keyboards for over a decade I designed one that&amp;rsquo;s close to
perfect - not for most, but definitely for me.&lt;/p&gt;
&lt;div class="github-card-wrapper"&gt;
 &lt;a id="github-0f4c2356297a4093409ca17d2e356af2" target="_blank" href="https://github.com/nietaki/revolt-keyboard" class="cursor-pointer"&gt;
 &lt;div
 class="w-full md:w-auto p-0 m-0 border border-neutral-200 dark:border-neutral-700 border rounded-md shadow-2xl"&gt;&lt;div class="w-full md:w-auto pt-3 p-5"&gt;
 &lt;div class="flex items-center"&gt;
 &lt;span class="text-2xl text-neutral-800 dark:text-neutral me-2"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"&gt;&lt;path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
 &lt;/span&gt;
 &lt;div
 id="github-0f4c2356297a4093409ca17d2e356af2-full_name"
 class="m-0 font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"&gt;
 nietaki/revolt-keyboard
 &lt;/div&gt;
 &lt;/div&gt;

 &lt;p id="github-0f4c2356297a4093409ca17d2e356af2-description" class="m-0 mt-2 text-md text-neutral-800 dark:text-neutral"&gt;
 
 &lt;/p&gt;</description></item><item><title>Epstein Roulette</title><link>https://nietaki.com/projects/epstein-roulette/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/projects/epstein-roulette/</guid><description>&lt;p&gt;Examine a random Epstein file from the millions that have been released.
You can narrow the pool down by file type or text contents.&lt;/p&gt;
&lt;p&gt;Another small project I wrote while teaching myself golang. It uses the
&lt;a href="https://echo.labstack.com/" target="_blank" rel="noreferrer"&gt;Echo web framework&lt;/a&gt; and sqlite as the database.&lt;/p&gt;
&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Note
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;The logo was (obviously) AI generated, but the code was written by hand as a learning
exercise, not vibe-coded.&lt;/p&gt;</description></item><item><title>Split Keyboard Gallery</title><link>https://nietaki.com/projects/split-keyboard-gallery/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/projects/split-keyboard-gallery/</guid><description>&lt;article class="article-link--shortcode flex flex-col md:flex-row relative overflow-hidden rounded-lg border border-neutral-300 dark:border-neutral-600"&gt;
	
 
 &lt;div class="flex-none relative overflow-hidden thumbnail"&gt;
 &lt;img
 src="https://nietaki.com/img/projects/split-keyboard-gallery.png"
 role="presentation"
 loading="lazy"
 decoding="async"
 class="not-prose absolute inset-0 w-full h-full object-cover"&gt;
 &lt;/div&gt;
 
 &lt;div class="p-4 pt-2"&gt;
 &lt;header class="items-center text-start text-xl font-semibold"&gt;
 &lt;a
 
 href="https://splitkeyboard.gallery/" target="_blank" rel="external"
 
 class="not-prose before:absolute before:inset-0 decoration-primary-500 dark:text-neutral text-xl font-bold text-neutral-800 hover:underline hover:underline-offset-2"&gt;
 &lt;h2&gt;
 (not just) Split Keyboard Gallery
 
 &lt;span class="cursor-default align-top text-xs text-neutral-400 dark:text-neutral-500"&gt;
 &lt;/span&gt;
 
 &lt;/h2&gt;
 &lt;/a&gt;
 &lt;/header&gt;
 &lt;div class="text-sm text-neutral-500 dark:text-neutral-400"&gt;
			https://splitkeyboard.gallery/
 
 &lt;/div&gt;
 &lt;div
 class="article-link__summary prose dark:prose-invert max-w-fit mt-1 line-clamp-3"&gt;
 

Split Keyboard Gallery - tool for browsing over 100 keyboards and filtering them by properties


 &lt;/div&gt;
 &lt;/div&gt;
&lt;/article&gt;


&lt;p&gt;A weekend project to teach myself myself &lt;a href="https://alpinejs.dev/" target="_blank" rel="noreferrer"&gt;Alpine.js&lt;/a&gt; and &lt;a href="https://gohugo.io/" target="_blank" rel="noreferrer"&gt;hugo&lt;/a&gt;.
And to get the word about my &lt;a href="https://ntkstudio.net/products/revolt-keyboard/" target="_blank" rel="noreferrer"&gt;Revolt keyboard&lt;/a&gt; out there.&lt;/p&gt;</description></item><item><title>Rexbug</title><link>https://nietaki.com/projects/rexbug/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/projects/rexbug/</guid><description>&lt;p&gt;A thin Elixir wrapper for &lt;code&gt;:redbug&lt;/code&gt; production-friendly Erlang interactive tracing debugger.
It tries to preserve &lt;code&gt;:redbug&lt;/code&gt;&amp;rsquo;s simple and intuitive interface while making it
more convenient to use by Elixir developers.&lt;/p&gt;
&lt;div class="github-card-wrapper"&gt;
 &lt;a id="github-60cbffd9f98f11b4aeb80e09c07352d9" target="_blank" href="https://github.com/nietaki/rexbug" class="cursor-pointer"&gt;
 &lt;div
 class="w-full md:w-auto p-0 m-0 border border-neutral-200 dark:border-neutral-700 border rounded-md shadow-2xl"&gt;&lt;div class="w-full nozoom"&gt;
 &lt;img
 src="https://opengraph.githubassets.com/0/nietaki/rexbug"
 alt="GitHub Repository Thumbnail"
 class="nozoom mt-0 mb-0 w-full h-full object-cover"&gt;
 &lt;/div&gt;&lt;div class="w-full md:w-auto pt-3 p-5"&gt;
 &lt;div class="flex items-center"&gt;
 &lt;span class="text-2xl text-neutral-800 dark:text-neutral me-2"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"&gt;&lt;path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
 &lt;/span&gt;
 &lt;div
 id="github-60cbffd9f98f11b4aeb80e09c07352d9-full_name"
 class="m-0 font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"&gt;
 nietaki/rexbug
 &lt;/div&gt;
 &lt;/div&gt;

 &lt;p id="github-60cbffd9f98f11b4aeb80e09c07352d9-description" class="m-0 mt-2 text-md text-neutral-800 dark:text-neutral"&gt;
 A thin Elixir wrapper for the redbug Erlang tracing debugger.
 &lt;/p&gt;</description></item><item><title>markdown-resume</title><link>https://nietaki.com/projects/markdown-resume/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/projects/markdown-resume/</guid><description>&lt;div class="github-card-wrapper"&gt;
 &lt;a id="github-7d8d13a5f4615ef3bbfe9f85e971a78e" target="_blank" href="https://github.com/nietaki/markdown-resume" class="cursor-pointer"&gt;
 &lt;div
 class="w-full md:w-auto p-0 m-0 border border-neutral-200 dark:border-neutral-700 border rounded-md shadow-2xl"&gt;&lt;div class="w-full nozoom"&gt;
 &lt;img
 src="https://opengraph.githubassets.com/0/nietaki/markdown-resume"
 alt="GitHub Repository Thumbnail"
 class="nozoom mt-0 mb-0 w-full h-full object-cover"&gt;
 &lt;/div&gt;&lt;div class="w-full md:w-auto pt-3 p-5"&gt;
 &lt;div class="flex items-center"&gt;
 &lt;span class="text-2xl text-neutral-800 dark:text-neutral me-2"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"&gt;&lt;path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
 &lt;/span&gt;
 &lt;div
 id="github-7d8d13a5f4615ef3bbfe9f85e971a78e-full_name"
 class="m-0 font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"&gt;
 nietaki/markdown-resume
 &lt;/div&gt;
 &lt;/div&gt;

 &lt;p id="github-7d8d13a5f4615ef3bbfe9f85e971a78e-description" class="m-0 mt-2 text-md text-neutral-800 dark:text-neutral"&gt;
 A simple tool for generating good looking CV pdfs from vanilla markdown files
 &lt;/p&gt;</description></item><item><title>Ampersand Table</title><link>https://nietaki.com/projects/ampersand-table/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/projects/ampersand-table/</guid><description>&lt;div class="width-patch"&gt;&lt;/div&gt;
&lt;div id="gallery-35b8f989c30c062d8ebc81854afa2b9c" class="gallery"&gt;
 
 &lt;img src="https://nietaki.com/img/projects/ampersand_gallery/20220820_AMPERSAND-703.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/projects/ampersand_gallery/20220820_AMPERSAND-439.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/projects/ampersand_gallery/20220820_AMPERSAND-776.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/projects/ampersand_gallery/DSCF3343.JPG" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/projects/ampersand_gallery/DSCF3569.JPG" class="grid-w33" /&gt;
&lt;/div&gt;

&lt;p&gt;A kinetic sculpture in the form of an interactive coffee table. While it might not end up being commercially available, the tech side of things was a success, especially considering the bootstrapping approach in a small team. From the aluminum and 3d printed plastic mechanism I designed from scratch, through the electronics, microcontroller &amp;ldquo;brain&amp;rdquo; with some clever C++ code on it and the Flutter app that controlled it all - it all works pretty damn well and looks good in the wood and concrete package.&lt;/p&gt;</description></item><item><title>Raxx/Ace/Raxx.Kit</title><link>https://nietaki.com/projects/raxx-ace/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/projects/raxx-ace/</guid><description>&lt;div class="github-card-wrapper"&gt;
 &lt;a id="github-30bc2ed1eb0828ccdbce73158fa5e686" target="_blank" href="https://github.com/CrowdHailer/raxx" class="cursor-pointer"&gt;
 &lt;div
 class="w-full md:w-auto p-0 m-0 border border-neutral-200 dark:border-neutral-700 border rounded-md shadow-2xl"&gt;&lt;div class="w-full nozoom"&gt;
 &lt;img
 src="https://opengraph.githubassets.com/0/crowdhailer/raxx"
 alt="GitHub Repository Thumbnail"
 class="nozoom mt-0 mb-0 w-full h-full object-cover"&gt;
 &lt;/div&gt;&lt;div class="w-full md:w-auto pt-3 p-5"&gt;
 &lt;div class="flex items-center"&gt;
 &lt;span class="text-2xl text-neutral-800 dark:text-neutral me-2"&gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"&gt;&lt;path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
 &lt;/span&gt;
 &lt;div
 id="github-30bc2ed1eb0828ccdbce73158fa5e686-full_name"
 class="m-0 font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"&gt;
 CrowdHailer/raxx
 &lt;/div&gt;
 &lt;/div&gt;

 &lt;p id="github-30bc2ed1eb0828ccdbce73158fa5e686-description" class="m-0 mt-2 text-md text-neutral-800 dark:text-neutral"&gt;
 Interface for HTTP webservers, frameworks and clients
 &lt;/p&gt;</description></item><item><title>My small collection of awesome</title><link>https://nietaki.com/awesome/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/awesome/</guid><description>&lt;p&gt;There&amp;rsquo;s a bunch of projects that make my life a whole lot better. I can only
preach about them to my friends so much, so here&amp;rsquo;s some links to spread the word
otherwise.&lt;/p&gt;

&lt;h3 class="relative group"&gt;&lt;a href="https://blowfish.page/" target="_blank" rel="noreferrer"&gt;Blowfish&lt;/a&gt;
 &lt;div id="blowfish" 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="#blowfish" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The Hugo template I used for the latest incarnation of this blog.&lt;/p&gt;
&lt;p&gt;I knew it was good as soon as I saw it, but the fact that it took me less than a day
to move from the old jekyll blog to hugo, add some customizations without slowing down
and be very happy with the results makes it just exceptional.&lt;/p&gt;</description></item><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>About</title><link>https://nietaki.com/about/</link><pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/about/</guid><description>&lt;p&gt;My name is Jacek Królikowski, I studied Computer Science at the University of Warsaw and worked as a software engineer at Microsoft and a number of startups (including my own) in London and Warsaw.&lt;/p&gt;
&lt;!-- , and now live in London where I went from working in Microsoft to doing [Elixir](https://elixir-lang.org/) in startups. --&gt;


 
 
 &lt;div class="width-patch"&gt;&lt;/div&gt;
&lt;div id="gallery-2bc053111729a74bce2ff033e7cdfe90" class="gallery"&gt;
 
 &lt;img src="https://nietaki.com/img/whoami/avatar-canon.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/whoami/with_ampersand.jpg" class="grid-w33" /&gt;
 &lt;img src="https://nietaki.com/img/whoami/rocznicowe.jpg" class="grid-w33" /&gt;
&lt;/div&gt;

&lt;p&gt;I enjoy having a broad understanding of engineering (software and otherwise), but I specialise in the back end side of things, especially using Erlang/Elixir. I&amp;rsquo;m passionate about functional programming, resilient system design, and using the right tool for the job at hand.&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>Today I Learned</title><link>https://nietaki.com/til/</link><pubDate>Mon, 10 Apr 2017 00:00:00 +0000</pubDate><author>hello@nietaki.com (nietaki)</author><guid>https://nietaki.com/til/</guid><description>&lt;div
 
 class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
 
 &gt;
 &lt;span
 
 class="text-primary-400 pe-3 flex items-center"
 
 &gt;
 &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
 &lt;/span&gt;

 &lt;span
 
 class="dark:text-neutral-300"
 
 &gt;There used to be dates next to each of items - without them the &amp;ldquo;Today&amp;rdquo; makes a bit less sense 😀&lt;/span&gt;
&lt;/div&gt;


&lt;h3 class="relative group"&gt;pico.css
 &lt;div id="picocss" 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="#picocss" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;TIL about &lt;a href="https://picocss.com/" target="_blank" rel="noreferrer"&gt;pico.css&lt;/a&gt; - the minimalistic and zero-friction CSS framework for semantic HTML.&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>