<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Technical Notes on The Negation</title><link>https://www.thenegation.com/tags/technical-notes/</link><description>Recent content in Technical Notes on The Negation</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 31 May 2025 22:06:31 +0000</lastBuildDate><atom:link href="https://www.thenegation.com/tags/technical-notes/index.xml" rel="self" type="application/rss+xml"/><item><title>I Blogged Every Day for a Month – Again</title><link>https://www.thenegation.com/posts/blog-challenge-take-two/</link><pubDate>Sat, 31 May 2025 22:06:31 +0000</pubDate><guid>https://www.thenegation.com/posts/blog-challenge-take-two/</guid><description>&lt;p&gt;Today marks the final day of my second month-long blogging challenge. The first
was in &lt;a href="https://www.thenegation.com/posts/blogging-challenge/"&gt;August&lt;/a&gt; last year. This one, in May, felt different &amp;ndash; but just as
transformative.&lt;/p&gt;</description></item><item><title>Daily Z Reports and Weekly Reviews</title><link>https://www.thenegation.com/posts/daily-z-report-weekly-review/</link><pubDate>Fri, 30 May 2025 23:30:13 +0000</pubDate><guid>https://www.thenegation.com/posts/daily-z-report-weekly-review/</guid><description>&lt;p&gt;This is not about improving productivity, but rather a simple but bottom-up hack
to improve personal awareness and accountability and extend it to the team.
Productivity should be a natural byproduct of that.&lt;/p&gt;</description></item><item><title>Cross-Compiling Haskell under NixOS with Docker</title><link>https://www.thenegation.com/posts/cross-compile-haskell/</link><pubDate>Thu, 29 May 2025 23:55:54 +0000</pubDate><guid>https://www.thenegation.com/posts/cross-compile-haskell/</guid><description>&lt;p&gt;I learned how to cross-compile Haskell projects under NixOS using Docker images
for ARM architectures, and how to run them under emulation on &lt;code&gt;x86_64&lt;/code&gt; hosts.&lt;/p&gt;</description></item><item><title>The Terminal State of Mind</title><link>https://www.thenegation.com/posts/the-terminal-state-of-mind/</link><pubDate>Wed, 28 May 2025 21:24:28 +0000</pubDate><guid>https://www.thenegation.com/posts/the-terminal-state-of-mind/</guid><description>&lt;p&gt;I use the terminal. Not because I am a command-line wizard or particularly
efficient with it, but because the GUI has never given me the rhythm and flow I
need.&lt;/p&gt;</description></item><item><title>NixOS Rebuilds, Upgrades and Generation Diffs</title><link>https://www.thenegation.com/posts/nixos-rebuilds-and-upgrades/</link><pubDate>Tue, 27 May 2025 21:20:42 +0000</pubDate><guid>https://www.thenegation.com/posts/nixos-rebuilds-and-upgrades/</guid><description>&lt;p&gt;Today, I upgraded my NixOS system to the latest version, v25.05. It went
smoothly. I just want to report my experience here.&lt;/p&gt;</description></item><item><title>Boring on Purpose: Bold Moves in Internal Tooling</title><link>https://www.thenegation.com/posts/boring-and-bold/</link><pubDate>Mon, 26 May 2025 23:56:04 +0000</pubDate><guid>https://www.thenegation.com/posts/boring-and-bold/</guid><description>&lt;p&gt;Boring work is often the most effective work. It is the kind of work that might
lead us to understand patterns and solve problems that we did not even know we
had.&lt;/p&gt;</description></item><item><title>A Glimpse into My Shell</title><link>https://www.thenegation.com/posts/shell-history/</link><pubDate>Sun, 25 May 2025 23:20:42 +0000</pubDate><guid>https://www.thenegation.com/posts/shell-history/</guid><description>&lt;p&gt;A glimpse into my shell history reveals the tools I rely on daily. These are not
curated &amp;ndash; just raw, frequent commands logged over time.&lt;/p&gt;</description></item><item><title>Data Definitions, Not Flowcharts</title><link>https://www.thenegation.com/posts/flowcharts-vs-tables/</link><pubDate>Sat, 24 May 2025 23:43:58 +0000</pubDate><guid>https://www.thenegation.com/posts/flowcharts-vs-tables/</guid><description>&lt;p&gt;Computer programs are best understood in terms of the data they consume, process
and produce. Flowcharts are useful for visualizing control flow, but not for
understanding complexity.&lt;/p&gt;</description></item><item><title>Magic JSON in Haskell</title><link>https://www.thenegation.com/posts/magic-json-haskell/</link><pubDate>Fri, 23 May 2025 21:19:46 +0000</pubDate><guid>https://www.thenegation.com/posts/magic-json-haskell/</guid><description>&lt;p&gt;Among all Haskell libraries I have used, the one I reach for the most is
&lt;a href="https://hackage.haskell.org/package/autodocodec"&gt;autodocodec&lt;/a&gt;. I will explain what it is and what freebies it gives you.&lt;/p&gt;</description></item><item><title>Hacking Haskell with Nix: Two Tricks</title><link>https://www.thenegation.com/posts/quick-haskell-dev-setup/</link><pubDate>Thu, 22 May 2025 22:10:37 +0000</pubDate><guid>https://www.thenegation.com/posts/quick-haskell-dev-setup/</guid><description>&lt;p&gt;I have mentioned a few times in my posts that &lt;a href="https://www.haskell.org/"&gt;Haskell&lt;/a&gt; is my go-to language.
This is true even for small applications which go beyond a simple shell script.&lt;/p&gt;
&lt;p&gt;Hacking Haskell with Nix is an easy and fun way to quickly prototype. I want to
share two tricks that I use.&lt;/p&gt;</description></item><item><title>Hacking with mdBook</title><link>https://www.thenegation.com/posts/mdbook-preprocessing/</link><pubDate>Wed, 21 May 2025 20:35:08 +0000</pubDate><guid>https://www.thenegation.com/posts/mdbook-preprocessing/</guid><description>&lt;p&gt;This post explores how to hack an &lt;a href="https://rust-lang.github.io/mdBook/"&gt;mdBook&lt;/a&gt; project with scripts.&lt;/p&gt;</description></item><item><title>Haskell Project Template with Nix Flakes</title><link>https://www.thenegation.com/posts/haskell-template-flakes/</link><pubDate>Tue, 20 May 2025 21:43:46 +0000</pubDate><guid>https://www.thenegation.com/posts/haskell-template-flakes/</guid><description>&lt;p&gt;This post introduces my Haskell project template powered by Nix Flakes &amp;ndash; a
simple setup I use to quickly spin up new Haskell applications.&lt;/p&gt;</description></item><item><title>Deadman Checks in Grafana</title><link>https://www.thenegation.com/posts/grafana-deadman-checks/</link><pubDate>Mon, 19 May 2025 22:17:05 +0000</pubDate><guid>https://www.thenegation.com/posts/grafana-deadman-checks/</guid><description>&lt;p&gt;This post is a quick, technical note on how to set up deadman checks in Grafana
with InfluxDB as the data source, and how to deal with a peculiar case when the
host is not reporting and the alert enters the &lt;em&gt;resolved&lt;/em&gt; state.&lt;/p&gt;</description></item><item><title>Stop Feeling Intimidated by Complexity</title><link>https://www.thenegation.com/posts/embrace-complexity/</link><pubDate>Sun, 18 May 2025 21:19:54 +0000</pubDate><guid>https://www.thenegation.com/posts/embrace-complexity/</guid><description>&lt;p&gt;Let me tell you the conclusion up-front: &lt;em&gt;Complexity is not inherently bad. The
complications are the real enemy.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Choosing A Template Engine: The More Powerful Problem</title><link>https://www.thenegation.com/posts/choosing-template-engine/</link><pubDate>Sat, 17 May 2025 21:49:05 +0000</pubDate><guid>https://www.thenegation.com/posts/choosing-template-engine/</guid><description>&lt;p&gt;Continuing on the topic of template engines, I would like to share my thoughts
on the &lt;em&gt;power&lt;/em&gt; of template engines, and how it relates to the &lt;em&gt;power&lt;/em&gt; of
abstractions in programming.&lt;/p&gt;</description></item><item><title>Thinking in Templates</title><link>https://www.thenegation.com/posts/thinking-in-templates/</link><pubDate>Fri, 16 May 2025 22:30:13 +0000</pubDate><guid>https://www.thenegation.com/posts/thinking-in-templates/</guid><description>&lt;p&gt;I believe that there is value in thinking in templates when it comes to
programming. I will try to explore the concept of templating in general, how it
reveals important patterns in programming, and how it appears in the wild often
in the form of &lt;em&gt;template engines&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>SDK-Driven Development: A Litmus Test for Good Software Design</title><link>https://www.thenegation.com/posts/sdk-driven-development/</link><pubDate>Thu, 15 May 2025 18:23:55 +0000</pubDate><guid>https://www.thenegation.com/posts/sdk-driven-development/</guid><description>&lt;p&gt;This-driven development, that-driven development, and now you should bother with
this other thing?&lt;/p&gt;</description></item><item><title>Why I am Migrating From Zola Back to Hugo</title><link>https://www.thenegation.com/posts/migrate-from-zola-to-hugo/</link><pubDate>Wed, 14 May 2025 23:45:57 +0000</pubDate><guid>https://www.thenegation.com/posts/migrate-from-zola-to-hugo/</guid><description>&lt;p&gt;This post is a summary of my recent decision to go back to &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; after using
&lt;a href="https://www.getzola.org/"&gt;Zola&lt;/a&gt;. I also report on how LLM assistants with Web access can aid in such
decisions, not as an authority but as a research assistant.&lt;/p&gt;</description></item><item><title>Code is Liability</title><link>https://www.thenegation.com/posts/code-is-liability/</link><pubDate>Tue, 13 May 2025 23:55:27 +0000</pubDate><guid>https://www.thenegation.com/posts/code-is-liability/</guid><description>&lt;p&gt;While programming, we often aim to avoid repetition. Repetition is boring, and
ironically, much of programming exists to automate boring tasks in the first
place. But repetition is just one symptom of a much deeper problem: Code itself
is a liability.&lt;/p&gt;</description></item><item><title>Build a CLI Emoji Picker with fzf and Nix</title><link>https://www.thenegation.com/posts/nix-fzf-script-tutorial/</link><pubDate>Mon, 12 May 2025 21:10:27 +0000</pubDate><guid>https://www.thenegation.com/posts/nix-fzf-script-tutorial/</guid><description>&lt;p&gt;In my blog post &lt;a href="https://www.thenegation.com/posts/wayland-app-launchers-rofi/"&gt;yesterday&lt;/a&gt;, I mentioned &lt;a href="https://github.com/junegunn/fzf"&gt;fzf&lt;/a&gt;. Its simplicity and power make it
a good tool for many scripting tasks. In this post, we will see a practical
example of how to use it in a CLI program and package it with Nix.&lt;/p&gt;</description></item><item><title>Wayland Application Launchers: Stick with Rofi</title><link>https://www.thenegation.com/posts/wayland-app-launchers-rofi/</link><pubDate>Sun, 11 May 2025 23:55:27 +0000</pubDate><guid>https://www.thenegation.com/posts/wayland-app-launchers-rofi/</guid><description>&lt;p&gt;Today is a lazy Sunday, and I did what nobody should do on a Sunday: Spend time
trying to replace something that already works. This time, my victim was &lt;a href="https://github.com/davatorium/rofi"&gt;rofi&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Why and How to Patch a Python Package in Nix</title><link>https://www.thenegation.com/posts/patch-python-package-on-nix/</link><pubDate>Thu, 08 May 2025 17:24:26 +0000</pubDate><guid>https://www.thenegation.com/posts/patch-python-package-on-nix/</guid><description>&lt;p&gt;I bumped into an annoying issue today while upgrading my Python dependencies in
a codebase. And I thought it would be a good idea to share the solution with
you. Thanks to &lt;a href="https://nixos.org/"&gt;Nix&lt;/a&gt; for making this kind of fix so straightforward.&lt;/p&gt;</description></item><item><title>Nix-Powered Python Development</title><link>https://www.thenegation.com/posts/nix-powered-python-dev/</link><pubDate>Wed, 07 May 2025 19:11:06 +0000</pubDate><guid>https://www.thenegation.com/posts/nix-powered-python-dev/</guid><description>&lt;p&gt;After a few years of floating from one hack to another, this is my practical
guide to setting up a reasonable Python development environment using Nix flakes
with support for testing, linting, formatting, and LSP-based editor integration.&lt;/p&gt;</description></item><item><title>Nix Flake Templates</title><link>https://www.thenegation.com/posts/nix-flake-templates/</link><pubDate>Tue, 06 May 2025 11:36:39 +0000</pubDate><guid>https://www.thenegation.com/posts/nix-flake-templates/</guid><description>&lt;p&gt;Nix is now central to how I structure my workstation setups and manage
development and production environments across my projects. Over time, I found
myself repeating certain setups. This post is a short note on how I started
working with Nix Flake templates to avoid or reduce this repetition.&lt;/p&gt;</description></item><item><title>Working with OpenTelemetry Metrics</title><link>https://www.thenegation.com/posts/opentelemetry-metrics/</link><pubDate>Mon, 05 May 2025 21:17:22 +0000</pubDate><guid>https://www.thenegation.com/posts/opentelemetry-metrics/</guid><description>&lt;p&gt;I have started adopting &lt;a href="https://opentelemetry.io/"&gt;OpenTelemetry&lt;/a&gt; in my workshop to unify metrics, logs,
and traces. This post explains why &amp;ndash;and how&amp;ndash; I took the first step.&lt;/p&gt;</description></item><item><title>Hold My Data</title><link>https://www.thenegation.com/posts/hold-my-data/</link><pubDate>Sun, 04 May 2025 20:20:29 +0000</pubDate><guid>https://www.thenegation.com/posts/hold-my-data/</guid><description>&lt;p&gt;This post is about data snapshots, backups and archives, why we create and keep
them, and how this entire exercise can be seen from top-down and bottom-up in a
business setting.&lt;/p&gt;</description></item><item><title>Vectorized Data Pipelines</title><link>https://www.thenegation.com/posts/vectorized/</link><pubDate>Sat, 03 May 2025 23:04:29 +0000</pubDate><guid>https://www.thenegation.com/posts/vectorized/</guid><description>&lt;p&gt;This post shows how to use Vector to capture and persist webhook events &amp;ndash; like
those from SendGrid &amp;ndash; into a PostgreSQL database with minimal setup.&lt;/p&gt;</description></item><item><title>Ruff and Ready: Linting Before the Party</title><link>https://www.thenegation.com/posts/migrate-to-ruff/</link><pubDate>Fri, 02 May 2025 14:32:07 +0000</pubDate><guid>https://www.thenegation.com/posts/migrate-to-ruff/</guid><description>&lt;p&gt;In this post, I share why I value linters and formatters, and how I migrate from
traditional Python tools to &lt;a href="https://docs.astral.sh/ruff/"&gt;ruff&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Grafana Webhook Integration with ntfy</title><link>https://www.thenegation.com/posts/grafana-ntfy/</link><pubDate>Thu, 01 May 2025 11:16:05 +0000</pubDate><guid>https://www.thenegation.com/posts/grafana-ntfy/</guid><description>&lt;p&gt;This post explains how to integrate Grafana alerts with the &lt;code&gt;ntfy&lt;/code&gt; notification
service using Grafana&amp;rsquo;s Webhook integration, notification templates, and
&lt;code&gt;ntfy&lt;/code&gt;&amp;rsquo;s templating capabilities.&lt;/p&gt;</description></item><item><title>OpenResty on NixOS for an API Gateway</title><link>https://www.thenegation.com/posts/nixos-openresty-api-gateway/</link><pubDate>Thu, 01 Aug 2024 11:45:40 +0000</pubDate><guid>https://www.thenegation.com/posts/nixos-openresty-api-gateway/</guid><description>&lt;p&gt;Are you using an API gateway? Do you really need one? If you are using &lt;a href="https://nixos.org"&gt;NixOS&lt;/a&gt;
and feel comfortable with some &lt;a href="https://www.lua.org"&gt;Lua&lt;/a&gt;, you may want to consider &lt;a href="https://openresty.org"&gt;OpenResty&lt;/a&gt; on
NixOS as an API gateway.&lt;/p&gt;</description></item><item><title>Running NixOS Guests on QEMU</title><link>https://www.thenegation.com/posts/nixos-on-qemu/</link><pubDate>Wed, 31 Jul 2024 14:41:19 +0000</pubDate><guid>https://www.thenegation.com/posts/nixos-on-qemu/</guid><description>&lt;p&gt;Once in a while, I want to test some NixOS configuration without affecting my
main system or launching new hosts on the cloud.&lt;/p&gt;
&lt;p&gt;Running NixOS on a virtual machine (VM) is a safe and reproducible way to test
such configurations. As for VMs, I have used &lt;a href="https://www.virtualbox.org"&gt;VirtualBox&lt;/a&gt;, &lt;a href="https://www.vagrantup.com"&gt;Vagrant&lt;/a&gt; and &lt;a href="https://canonical.com/lxd"&gt;lxd&lt;/a&gt;
in the past. However, I have found QEMU to be the simplest and most flexible
solution for my needs.&lt;/p&gt;
&lt;p&gt;This guide is a quick reference to create and run NixOS guests on QEMU.&lt;/p&gt;</description></item><item><title>Archiving PostgreSQL Backups on NixOS</title><link>https://www.thenegation.com/posts/nixos-pg-archives/</link><pubDate>Tue, 30 Jul 2024 09:18:10 +0000</pubDate><guid>https://www.thenegation.com/posts/nixos-pg-archives/</guid><description>&lt;p&gt;This is a technical note on how to archive PostgreSQL backups on &lt;a href="https://nixos.org"&gt;NixOS&lt;/a&gt; to one
or more targets using &lt;a href="https://rclone.org"&gt;rclone&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>