<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>thenybble.de</title>
    <link>https://thenybble.de/</link>
    <description>Recent content on thenybble.de</description>
    <generator>Hugo -- 0.151.0</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 11 Dec 2025 10:22:44 +0100</lastBuildDate>
    <atom:link href="https://thenybble.de/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Using helm-unittest with library charts</title>
      <link>https://thenybble.de/posts/helm-unittest-library-chart/</link>
      <pubDate>Thu, 11 Dec 2025 10:22:44 +0100</pubDate>
      <guid>https://thenybble.de/posts/helm-unittest-library-chart/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/helm-unittest/helm-unittest&#34;&gt;helm-unittest&lt;/a&gt; is a tool for unit-testing Helm
charts. Helm is like &lt;a href=&#34;https://www.gnu.org/software/m4/&#34;&gt;M4&lt;/a&gt; for writing Kubernetes manifests, which
are YAML files. I prefer M4, because I consider the Go templating language an abomination (mutable
data structures, unclear scoping, and so on and so forth). But it&amp;rsquo;s what&amp;rsquo;s used in the project, so I
don&amp;rsquo;t really have a choice.&lt;/p&gt;
&lt;p&gt;Getting back to unit testing: What &lt;code&gt;helm-unittest&lt;/code&gt; does is render a chart and then evaluate some
expressions on it to check that expected values are present. This works fine for Helm charts that
are &amp;ldquo;application&amp;rdquo; charts (the regular type), but not so for &amp;ldquo;library&amp;rdquo; charts, which cannot render
manifests, and only define helper templates. As I&amp;rsquo;ve written a rather inscrutable Helm library
chart&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, I wanted to unit test them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shortcut for Microsoft Teams on Linux</title>
      <link>https://thenybble.de/posts/linux-microsoft-teams/</link>
      <pubDate>Fri, 21 Nov 2025 10:10:58 +0100</pubDate>
      <guid>https://thenybble.de/posts/linux-microsoft-teams/</guid>
      <description>&lt;p&gt;Opening Chrome manually and navigating to &lt;code&gt;teams.microsoft.com&lt;/code&gt; gets old when you have to do it
multiple times. Luckily, I found out that you can just write a small script that launches Chrome
with the PWA&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; already open. I think I found it in a desktop file that was generated by Chrome
when I installed the PWA. Anyway, without further ado, here&amp;rsquo;s the script:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/dash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;google-chrome --app&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://teams.microsoft.com/?clientType=pwa&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace the shell with something else if you&amp;rsquo;re not on Debian. Potentially, you would be able to run
multiple Teams instances with different profiles by using the &lt;code&gt;--profile-directory&lt;/code&gt; switch, but I
haven&amp;rsquo;t tried that yet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pandas basics</title>
      <link>https://thenybble.de/posts/pandas-basics/</link>
      <pubDate>Mon, 12 Feb 2024 12:35:08 +0100</pubDate>
      <guid>https://thenybble.de/posts/pandas-basics/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;https://pandas.pydata.org/&#34;&gt;Pandas&lt;/a&gt; ist eine mächtige Python-Bibliothek, um mit Daten zu arbeiten. Ihre Beliebtheit erklärt sich
neben einer guten Performance&lt;sup class=&#34;footnote-reference&#34;&gt;&lt;a id=&#34;footnote-reference-1&#34; href=&#34;#footnote-1&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; auch durch eine hohe Ergonomie. Viele Aktionen, die man mit
Pandas-Daten ausführen kann, lassen sich mit Standard-Python-Operatoren ausdrücken. Leider führt
dies auch dazu, dass sich Pandas fast wie eine Mini-Sprache, welche in Python eingebettet ist,
anfühlt. Das systematische Erlernen dieser Sprache ist schwierig, zumal die &lt;a href=&#34;https://pandas.pydata.org/docs/user_guide/index.html&#34;&gt;Dokumentation&lt;/a&gt; von Pandas
zwar umfangreich, aber meiner Meinung nach eher als Referenz als als Lernmittel gestaltet ist. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Calculating TOTP with bash</title>
      <link>https://thenybble.de/posts/calculating-totp/</link>
      <pubDate>Mon, 08 Jan 2024 16:35:35 +0100</pubDate>
      <guid>https://thenybble.de/posts/calculating-totp/</guid>
      <description>&lt;p&gt;A colleague of mine has just posted a &lt;a href=&#34;https://prepitaph.org/snippets/2fa/&#34;&gt;shell script&lt;/a&gt; for calculating TOTP secrets. From my POV, using a Python virtual env is overkill, and I was pretty sure that you could  do it with bash and a few extra utilities as well. The bash script would probably even be faster (albeit not necessarily more secure, unless you&amp;rsquo;d gotten all the quotes right). There&amp;rsquo;s a &amp;ldquo;proper&amp;rdquo; shell implementation by Rich Felker on &lt;a href=&#34;https://github.com/richfelker/totp.sh/blob/master/totp.sh&#34;&gt;Github&lt;/a&gt;, which I didn&amp;rsquo;t read before implementing a bash-non-posix solution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generating Clojure Native Images with GraalVM and clj-nix</title>
      <link>https://thenybble.de/posts/clojure-nix-graalvm/</link>
      <pubDate>Tue, 05 Sep 2023 15:49:28 +0200</pubDate>
      <guid>https://thenybble.de/posts/clojure-nix-graalvm/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been building a &lt;a href=&#34;https://git.sr.ht/~jeeger/kodi-autodim&#34;&gt;little project&lt;/a&gt; with Clojure to
automatically switch my IKEA Trådfri lights when I start playing a video and restoring them when I
pause. I&amp;rsquo;m lazy, I know. I used Clojure because it&amp;rsquo;s fun, and I like to use fun languages when not writing code for money. Also, there&amp;rsquo;s a good CoAPS library available for Java, which is a big plus, as many other languages don&amp;rsquo;t have support for CoAPS, which is CoAP + TLS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Demystifying Text Generators</title>
      <link>https://thenybble.de/posts/text-generators-explained/</link>
      <pubDate>Fri, 05 May 2023 09:37:54 +0200</pubDate>
      <guid>https://thenybble.de/posts/text-generators-explained/</guid>
      <description>&lt;p&gt;In this article, I&amp;rsquo;ll try and demystify text generation via neural networks by explaining how the technology works in very basic terms. Hopefully though, my explanation will be complete enough to give the reader an understanding that&amp;rsquo;s good enough to critically examine the hype around text generators and correct some misunderstandings I&amp;rsquo;ve seen around me. There&amp;rsquo;s also some terminology in there that will probably help you understand discussions on text generation (and also make you sound smarter☺).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Analyzing multi-gigabyte JSON files locally</title>
      <link>https://thenybble.de/posts/json-analysis/</link>
      <pubDate>Thu, 09 Mar 2023 11:15:05 +0100</pubDate>
      <guid>https://thenybble.de/posts/json-analysis/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve had the pleasure of having had to analyse multi-gigabyte JSON dumps in a project context recently. &lt;a href=&#34;https://www.json.org/json-en.html&#34;&gt;JSON&lt;/a&gt; itself is actually a rather pleasant format to consume, as it&amp;rsquo;s human-readable and there is a &lt;em&gt;lot&lt;/em&gt; of tooling available for it. &lt;a href=&#34;https://stedolan.github.io/jq/&#34;&gt;JQ&lt;/a&gt; allows expressing sophisticated processing steps in a single command line, and &lt;a href=&#34;http://jupyter.org/&#34;&gt;Jupyter&lt;/a&gt; with Python and &lt;a href=&#34;https://pandas.pydata.org/&#34;&gt;Pandas&lt;/a&gt; allow easy interactive analysis to quickly find what you&amp;rsquo;re looking for.&lt;/p&gt;
&lt;p&gt;However, with multi-gigabyte files, analysis becomes quite a lot more difficult. Running a single
&lt;code&gt;jq&lt;/code&gt; command will take a long time. When you&amp;rsquo;re &lt;del&gt;trial-and-error&lt;/del&gt;iteratively building &lt;code&gt;jq&lt;/code&gt; commands
as I do, you&amp;rsquo;ll quickly grow tired of having to wait about a minute for your command to succeed,
only to find out that it didn&amp;rsquo;t in fact return what you were looking for. Interactive analysis is
similar. Reading all 20 gigabyte of JSON will take a fair amount of time. You might find out that
the data doesn&amp;rsquo;t fit into RAM (which it well might, JSON is a human-readable format after all), or
end up having to restart your Python kernel, which means you&amp;rsquo;ll have to endure the loading time
again.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recoding mixed-encoding text files</title>
      <link>https://thenybble.de/posts/recoding-mixed-encoding-files/</link>
      <pubDate>Thu, 25 Aug 2022 09:39:54 +0200</pubDate>
      <guid>https://thenybble.de/posts/recoding-mixed-encoding-files/</guid>
      <description>&lt;p&gt;Some of my colleagues are regular users of &lt;a href=&#34;https://clojure.org/&#34;&gt;Clojure&lt;/a&gt;, a JVM-based Lisp. I do like Lisp-based languages. I&amp;rsquo;ve attempted last year&amp;rsquo;s &lt;a href=&#34;https://adventofcode.com/&#34;&gt;Advent of Code&lt;/a&gt; in Racket, and it was a great experience (although I am apparently not as great a coder as I thought I was 😢). Anyway.&lt;/p&gt;
&lt;p&gt;JVM-based languages are normally not great for scripting, on account of the longish startup time of the virtual machine. The aforementioned colleagues have sung the praises of &lt;a href=&#34;https://github.com/babashka/babashka&#34;&gt;Babashka&lt;/a&gt;, which is a version of Clojure suitable for scripting &amp;ldquo;where you would use bash otherwise&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solvespace mini tutorial</title>
      <link>https://thenybble.de/posts/solvespace-mini-tutorial/</link>
      <pubDate>Wed, 06 Apr 2022 08:40:29 +0200</pubDate>
      <guid>https://thenybble.de/posts/solvespace-mini-tutorial/</guid>
      <description>&lt;p&gt;3D modelling can be fun for making purely virtual models of things. With the advent of 3D printing, however, you can now model things that don&amp;rsquo;t exist yet, and get them delivered to your home for modest fee (or even printing it yourself, if you happen to own a 3D printer).&lt;/p&gt;
&lt;p&gt;However, 3D CAD tools are often complicated, expensive or both. I&amp;rsquo;ve found and grown to like &lt;a href=&#34;https://solvespace.com/index.pl&#34;&gt;Solvespace&lt;/a&gt;. It&amp;rsquo;s a parametric CAD program that looks like old DOS software. But a) that&amp;rsquo;s the way I like it and b) it&amp;rsquo;s pretty well documented. I wouldn&amp;rsquo;t want to model a car with this, but for simple geometric shapes, it&amp;rsquo;s perfectly serviceable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accessing the IP management interface on a Supermicro board</title>
      <link>https://thenybble.de/posts/access-supermicro-ipkvm/</link>
      <pubDate>Tue, 08 Mar 2022 10:09:30 +0100</pubDate>
      <guid>https://thenybble.de/posts/access-supermicro-ipkvm/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently recently built a new storage server (post coming up). This being the first time I&amp;rsquo;ve had access to a server board, I had some problems accessing the IP management interface that is provided by Supermicro mainboards.&lt;/p&gt;
&lt;p&gt;This IP management interface (IPMI for short) allows you to do all sorts of nifty things, like powering the server on or off remotely, or configuring the BIOS without having to connect a screen and keyboard. There&amp;rsquo;s some old information on the internet, and I also wanted to write down the detailed instructions, so others don&amp;rsquo;t have to go to the same trouble as I did.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updating the BIOS on a Supermicro board</title>
      <link>https://thenybble.de/posts/bios-update-supermicro/</link>
      <pubDate>Tue, 08 Feb 2022 08:38:56 +0100</pubDate>
      <guid>https://thenybble.de/posts/bios-update-supermicro/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently bought hardware for a new NAS server build. Some of that is still in the throes of shipping (postal services have been pretty unreliable as of late), but most of it has arrived: A Supermicro mainboard, case, M.2 SSD and a PSU allows me to get started on the build.&lt;/p&gt;
&lt;p&gt;As I like to live dangerously, I also upgraded the BIOS on the mainboard&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. Since the process was somewhat involved, I&amp;rsquo;m documenting it here. Also note: As alluded to by the subtitle, you could always buy a license from Supermicro to install a BIOS update via the out-of-band management engine. I didn&amp;rsquo;t want to spend another 30 bucks on a license, so I did it the cheap/hard way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adventures in ELFland</title>
      <link>https://thenybble.de/posts/modifying-elf-dependency-versions/</link>
      <pubDate>Wed, 26 Jan 2022 14:22:16 +0100</pubDate>
      <guid>https://thenybble.de/posts/modifying-elf-dependency-versions/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been trying to get &lt;a href=&#34;https://www.wireguard.com/&#34;&gt;Wireguard&lt;/a&gt; to run on my oldish VServer. The kernel is either too old, or the provider hasn&amp;rsquo;t compiled it with the necessary modules. &lt;a href=&#34;https://git.zx2c4.com/wireguard-go/&#34;&gt;wireguard-go&lt;/a&gt; seemed like a solution for this problem. However, I did not want to install a Go toolchain on the server, so I built the program locally. Go places a premium on easy distribution, so this might have worked.&lt;/p&gt;
&lt;p&gt;However, it didn&amp;rsquo;t: Wireguard-go uses network functions, and so the resulting binaries aren&amp;rsquo;t statically linked by default. What&amp;rsquo;s worse is that the resulting file depends on a version of &lt;code&gt;glibc&lt;/code&gt; that isn&amp;rsquo;t on my server. I saw this as an opportunity to dive deeper into the innards of ELF files, and learn something new.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Useful utility shell scripts</title>
      <link>https://thenybble.de/posts/utility-shell-scripts/</link>
      <pubDate>Wed, 10 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://thenybble.de/posts/utility-shell-scripts/</guid>
      <description>&lt;p&gt;
I&amp;#39;ve written some useful shell scripts during my time with Linux (which is coming up on 20 years
now). I&amp;#39;m posting them here as a) a reminder to myself and b) because they might be useful for other
people. In contrast to &lt;a href=&#34;https://thenybble.de/posts/stupid-zsh-tricks/&#34;&gt;Stupid ZSH tricks&lt;/a&gt;, these are written in Bash to work more universally.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stupid ZSH tricks</title>
      <link>https://thenybble.de/posts/stupid-zsh-tricks/</link>
      <pubDate>Mon, 11 Oct 2021 09:00:00 +0200</pubDate>
      <guid>https://thenybble.de/posts/stupid-zsh-tricks/</guid>
      <description>&lt;p&gt;
ZSH is a powerful shell, and there&amp;#39;s just &lt;strong&gt;oodles&lt;/strong&gt; of ways to configure it. In this post, I&amp;#39;ve collected a number of tricks that make my life easier, and are simple to implement.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://thenybble.de/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thenybble.de/about/</guid>
      <description>&lt;p&gt;
I&amp;#39;m a consultant at &lt;a href=&#34;http://www.innoq.com&#34;&gt;INNOQ&lt;/a&gt; with a Master&amp;#39;s degree in Computer Science from the &lt;a href=&#34;https://www.tum.de/&#34;&gt;Technical University
of Munich&lt;/a&gt;. See the &lt;a href=&#34;https://thenybble.de/elsewhere/&#34;&gt;Elsewhere&lt;/a&gt; page for more on my research, or my &lt;a href=&#34;cv.pdf&#34;&gt;CV&lt;/a&gt; for more detailed information
about my work.&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m interested in networking, application security and programming languages, but I can find
interest in nearly any area of study. A non-exhaustive list of stuff I&amp;#39;ve worked with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In anger:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kotlin, Java, Python, Go, Bash&lt;/li&gt;
&lt;li&gt;Postgres, Kafka&lt;/li&gt;
&lt;li&gt;Javascript, Typescript, Angular&lt;/li&gt;
&lt;li&gt;Semantic data (OWL, TTL, RDF, Reasoning)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Messed around:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Studying abroad in China</title>
      <link>https://thenybble.de/elsewhere/abroad/china/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thenybble.de/elsewhere/abroad/china/</guid>
      <description>&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
Studying abroad in China
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;In China, I studied as a regular exchange student for a full semester. I enrolled at the &lt;a href=&#34;http://english.bit.edu.cn/index.htm&#34;&gt;Beijing
  Institute of Technology&lt;/a&gt; for the winter term 2012 from September to December. At the BIT, I
  attended an Artificial Intelligence lecture, a Computer Graphics lecture as well as an intensive
  chinese course.&lt;/p&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-2&#34;&gt;
Campus and Accomodation
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;The BIT is a campus university as well, so everything you need is is reachable with a 15-minute
   walk. In fact, the campus is rather small (Wikipedia tells me there are some satellite campuses
   further away from the city center, but I didn&amp;#39;t visit those), and a 20 minute walk takes you from
   one end to the other. In the center of the campus, there&amp;#39;s the gymnasium with lots of volleyball
   fields, football fields and the like. The gymnasium was in fact used for the 2008 summer olympics
   and the paralympics (only volleyball and goalball, but still). I however didn&amp;#39;t use the
   gymnasium, so I can&amp;#39;t provide any insight on their quality.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Studying in Singapore</title>
      <link>https://thenybble.de/elsewhere/abroad/singapore/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thenybble.de/elsewhere/abroad/singapore/</guid>
      <description>&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
Studying in Singapore
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;As I&amp;#39;ve mentioned before, my two-month stay in Singapore was not a full exchange semester, but
  only a relatively short research internship at the &lt;a href=&#34;http://sce.ntu.edu.sg/Pages/Home.aspx&#34;&gt;School of Computer Engineering&lt;/a&gt; of the Nanyang
  Technological Institute of Technology. The program I attended was the &lt;a href=&#34;http://global.ntu.edu.sg/global/SRI/Pages/SRIProgramme.aspx&#34;&gt;Summer Research Internship&lt;/a&gt;
  program (for which registrations are still open!). The program (designed to lure qualified
  students to Singapore, I think) is an internship during which you write a research paper about a
  subject that you chose when applying. Accomodation is free, and the program even gives a generous
  amount of pocket mony (3000 SGD when I was there). Sounds good, right?&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
