<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacking on The Negation</title><link>https://www.thenegation.com/tags/hacking/</link><description>Recent content in Hacking on The Negation</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 29 May 2025 23:55:54 +0000</lastBuildDate><atom:link href="https://www.thenegation.com/tags/hacking/index.xml" rel="self" type="application/rss+xml"/><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>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>GitHub Projects My Way</title><link>https://www.thenegation.com/posts/github-projects-my-way/</link><pubDate>Sat, 10 May 2025 22:33:27 +0000</pubDate><guid>https://www.thenegation.com/posts/github-projects-my-way/</guid><description>&lt;p&gt;This post explains why and how I use GitHub for nearly everything. I will also
explain how I use GitHub Actions to automate the creation of issues in my GitHub
Projects.&lt;/p&gt;</description></item><item><title>Time and Truth: Lessons from Tracking My Work with Watson</title><link>https://www.thenegation.com/posts/watson-via-gh/</link><pubDate>Fri, 09 May 2025 23:15:40 +0000</pubDate><guid>https://www.thenegation.com/posts/watson-via-gh/</guid><description>&lt;p&gt;I started using Watson with low expectations. Two and a half years later, it is
still one of the few tools I have not quit. And it taught me a little bit about
how I really spend my time.&lt;/p&gt;</description></item><item><title>More Haskell Diagrams: Contribution Graph</title><link>https://www.thenegation.com/posts/haskell-diagrams-plot-calendar/</link><pubDate>Fri, 30 Aug 2024 22:39:46 +0000</pubDate><guid>https://www.thenegation.com/posts/haskell-diagrams-plot-calendar/</guid><description/></item><item><title>Shell Cacophony</title><link>https://www.thenegation.com/posts/shell-cacophony/</link><pubDate>Thu, 29 Aug 2024 20:05:47 +0000</pubDate><guid>https://www.thenegation.com/posts/shell-cacophony/</guid><description>&lt;p&gt;I am using &lt;a href="https://stedolan.github.io/jq/"&gt;&lt;code&gt;jq&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/jqnatividad/qsv"&gt;&lt;code&gt;qsv&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/red-data-tools/YouPlot"&gt;&lt;code&gt;uplot&lt;/code&gt;&lt;/a&gt; quite often. This post is
to make sure that you know and use them, too. I hope you will waste as much time
as I do, especially with &lt;a href="https://github.com/red-data-tools/YouPlot"&gt;&lt;code&gt;uplot&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Web Browser Extension Workshop - Part 5</title><link>https://www.thenegation.com/posts/browser-wext-5/</link><pubDate>Wed, 28 Aug 2024 22:12:02 +0000</pubDate><guid>https://www.thenegation.com/posts/browser-wext-5/</guid><description>&lt;p&gt;This is the last post in the series of the Web Browser Extension Workshop. In
this post, we will populate our popup using the service we created in the
previous post.&lt;/p&gt;</description></item><item><title>Web Browser Extension Workshop - Part 4</title><link>https://www.thenegation.com/posts/browser-wext-4/</link><pubDate>Tue, 27 Aug 2024 21:53:14 +0000</pubDate><guid>https://www.thenegation.com/posts/browser-wext-4/</guid><description>&lt;p&gt;This is the fourth part of the Web Browser Extension Workshop series. In this
part, we will populate a database with the OpenGraph information parsed from the
Webpage on active tabs. For this, we will implement a service that we can use
later to query the OpenGraph information as well.&lt;/p&gt;</description></item><item><title>Web Browser Extension Workshop - Part 3</title><link>https://www.thenegation.com/posts/browser-wext-3/</link><pubDate>Mon, 26 Aug 2024 21:53:14 +0000</pubDate><guid>https://www.thenegation.com/posts/browser-wext-3/</guid><description>&lt;p&gt;This is the third part of the series of blog posts about creating a Web browser.
In this part, we will change the extension icon based on the OpenGraph
information parsed from the Webpage on the active tab. We will also refactor the
code by encoding parse results in a better type.&lt;/p&gt;</description></item><item><title>Web Browser Extension Workshop - Part 2</title><link>https://www.thenegation.com/posts/browser-wext-2/</link><pubDate>Sun, 25 Aug 2024 15:42:40 +0000</pubDate><guid>https://www.thenegation.com/posts/browser-wext-2/</guid><description>&lt;p&gt;This is the second part of the series of blog posts about creating a Web browser
extension using &lt;a href="https://wxt.dev"&gt;WXT&lt;/a&gt;. In this part, we will try to read the OpenGraph tags of
the Webpage that is rendered on the active tab.&lt;/p&gt;</description></item><item><title>Web Browser Extension Workshop - Part 1</title><link>https://www.thenegation.com/posts/browser-wext-1/</link><pubDate>Sat, 24 Aug 2024 22:31:40 +0000</pubDate><guid>https://www.thenegation.com/posts/browser-wext-1/</guid><description>&lt;p&gt;I am starting a short series of blog posts about creating a Web browser
extension using &lt;a href="https://wxt.dev"&gt;WXT&lt;/a&gt;. In this first part, we will set up the development
environment and try to read the content of the navigated Webpage or Webpage on
the active tab.&lt;/p&gt;</description></item><item><title>Managing NixOS on DigitalOcean with Colmena</title><link>https://www.thenegation.com/posts/nixos-do-colmena/</link><pubDate>Fri, 23 Aug 2024 21:14:29 +0000</pubDate><guid>https://www.thenegation.com/posts/nixos-do-colmena/</guid><description>&lt;p&gt;In this post, we will prepare a &lt;a href="https://www.digitalocean.com"&gt;DigitalOcean&lt;/a&gt; image for &lt;a href="https://nixos.org"&gt;NixOS&lt;/a&gt;, launch a
droplet with it and manage it using &lt;a href="https://colmena.cli.rs"&gt;Colmena&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Plot GeoJSON on Your Blog Posts</title><link>https://www.thenegation.com/posts/cloud-map/</link><pubDate>Thu, 22 Aug 2024 21:50:38 +0000</pubDate><guid>https://www.thenegation.com/posts/cloud-map/</guid><description>&lt;p&gt;If you wonder how to plot GeoJSON data on your blog posts, here is a simple
example. In this blog post, I will show how to plot Microsoft Azure regions on a
map using the Leaflet.js JavaScript library.&lt;/p&gt;</description></item><item><title>Cross-Posting to Hashnode with API</title><link>https://www.thenegation.com/posts/crosspost-api-hashnode/</link><pubDate>Wed, 21 Aug 2024 17:42:49 +0000</pubDate><guid>https://www.thenegation.com/posts/crosspost-api-hashnode/</guid><description>&lt;p&gt;In my previous post, I showed how to cross-post to &lt;a href="https://dev.to"&gt;Dev.to&lt;/a&gt; using its API. In
this post, I will show how to cross-post to &lt;a href="https://hashnode.com"&gt;Hashnode&lt;/a&gt; using its API.&lt;/p&gt;</description></item><item><title>Cross-Posting to Dev.to with API</title><link>https://www.thenegation.com/posts/crosspost-api-devto/</link><pubDate>Tue, 20 Aug 2024 22:54:52 +0000</pubDate><guid>https://www.thenegation.com/posts/crosspost-api-devto/</guid><description>&lt;p&gt;Let&amp;rsquo;s cross-post this blog post to &lt;a href="https://dev.to"&gt;Dev.to&lt;/a&gt; using its API.&lt;/p&gt;</description></item><item><title>Easy GitHub CLI Extensions with Nix</title><link>https://www.thenegation.com/posts/custom-gh-ext/</link><pubDate>Mon, 19 Aug 2024 20:35:24 +0000</pubDate><guid>https://www.thenegation.com/posts/custom-gh-ext/</guid><description>&lt;p&gt;GitHub CLI (&lt;code&gt;gh&lt;/code&gt;) is one of my favourite tools. In addition to its built-in
commands, it allows you to write your own extensions. In this post, I will show
you how to write a simple GitHub CLI extension and how to package it with Nix,
in particular under Nix Home Manager.&lt;/p&gt;</description></item><item><title>Learning to Like Neovim</title><link>https://www.thenegation.com/posts/liking-neovim/</link><pubDate>Sun, 18 Aug 2024 21:43:13 +0000</pubDate><guid>https://www.thenegation.com/posts/liking-neovim/</guid><description>&lt;p&gt;After using Emacs for almost 20 years, usually day-in and day-out, I decided to
give Neovim a try. I have been using Neovim for two months now, and I can say
that I am starting to like it. In this article, I will share my experience of
switching from Emacs to Neovim, highlighting the differences, challenges, and
benefits I encountered along the way.&lt;/p&gt;</description></item><item><title>Hacking Watson with Haskell - Part 3</title><link>https://www.thenegation.com/posts/hacking-watson-part-3/</link><pubDate>Sat, 17 Aug 2024 21:02:23 +0000</pubDate><guid>https://www.thenegation.com/posts/hacking-watson-part-3/</guid><description>&lt;p&gt;In the previous blog posts (&lt;a href="https://www.thenegation.com/posts/hacking-watson-with-haskell-part-1/"&gt;part 1&lt;/a&gt;, &lt;a href="https://www.thenegation.com/posts/hacking-watson-with-haskell-part-2/"&gt;part 2&lt;/a&gt;), we managed to read &lt;a href="http://tailordev.github.io/Watson/"&gt;Watson&lt;/a&gt;
frames and state from its JSON files. In this blog post, we will do something
more useful: start and stop timer.&lt;/p&gt;</description></item><item><title>Hacking Watson with Haskell - Part 2</title><link>https://www.thenegation.com/posts/hacking-watson-part-2/</link><pubDate>Fri, 16 Aug 2024 22:50:46 +0000</pubDate><guid>https://www.thenegation.com/posts/hacking-watson-part-2/</guid><description>&lt;p&gt;In the &lt;a href="https://www.thenegation.com/posts/hacking-watson-with-haskell-part-1/"&gt;previous blog post&lt;/a&gt;, we read the &lt;a href="http://tailordev.github.io/Watson/"&gt;Watson&lt;/a&gt; frames from a JSON file. In
this blog post, we will read the &lt;a href="http://tailordev.github.io/Watson/"&gt;Watson&lt;/a&gt; state file and print it to the
standard output.&lt;/p&gt;</description></item><item><title>Hacking Watson with Haskell - Part 1</title><link>https://www.thenegation.com/posts/hacking-watson-part-1/</link><pubDate>Thu, 15 Aug 2024 21:33:55 +0000</pubDate><guid>https://www.thenegation.com/posts/hacking-watson-part-1/</guid><description>&lt;p&gt;&lt;a href="http://tailordev.github.io/Watson/"&gt;Watson&lt;/a&gt; is a command-line tool that helps you to track your time. It is simple
and powerful, yet it lacks some features that I would like to have. In this blog
post, I will start hacking &lt;a href="http://tailordev.github.io/Watson/"&gt;Watson&lt;/a&gt; with Haskell.&lt;/p&gt;</description></item><item><title>More Haskell Diagrams: Dynamic OpenGraph Images</title><link>https://www.thenegation.com/posts/haskell-diagrams-dynamic-og/</link><pubDate>Wed, 14 Aug 2024 20:29:55 +0000</pubDate><guid>https://www.thenegation.com/posts/haskell-diagrams-dynamic-og/</guid><description>&lt;p&gt;This blog post is a Literate Haskell program that produces its own OpenGraph
image using the infamous Haskell &lt;a href="https://diagrams.github.io"&gt;diagrams&lt;/a&gt; library.&lt;/p&gt;</description></item><item><title>More Haskell Diagrams: Wrapping Text</title><link>https://www.thenegation.com/posts/haskell-diagrams-text/</link><pubDate>Tue, 13 Aug 2024 19:14:35 +0000</pubDate><guid>https://www.thenegation.com/posts/haskell-diagrams-text/</guid><description>&lt;p&gt;Working with text, especially wrapping it, can be tricky when generating images
with Haskell&amp;rsquo;s &lt;a href="https://diagrams.github.io"&gt;diagrams&lt;/a&gt; library. In this blog post, we will write a literate
Haskell program to generate an image with text that fits in a box and wraps if
we want so.&lt;/p&gt;</description></item><item><title>More Haskell Diagrams: OpenGraph Images</title><link>https://www.thenegation.com/posts/haskell-diagrams-og/</link><pubDate>Mon, 12 Aug 2024 21:15:53 +0000</pubDate><guid>https://www.thenegation.com/posts/haskell-diagrams-og/</guid><description>&lt;p&gt;In this blog post, we are continuing to play with Haskell&amp;rsquo;s &lt;a href="https://diagrams.github.io"&gt;diagrams&lt;/a&gt; library.
We will write a literate Haskell program to generate an &lt;a href="https://ogp.me"&gt;OpenGraph&lt;/a&gt; image.&lt;/p&gt;</description></item><item><title>Executable Blog Posts: Second Take</title><link>https://www.thenegation.com/posts/executable-blog-post-pandoc-filters/</link><pubDate>Sun, 11 Aug 2024 22:35:12 +0000</pubDate><guid>https://www.thenegation.com/posts/executable-blog-post-pandoc-filters/</guid><description>&lt;p&gt;This is a second take for my previous blog post &lt;a href="https://www.thenegation.com/posts/abuse-haskell/"&gt;Abusing Haskell: Executable
Blog Posts&lt;/a&gt;. This time, I am going to improve the solution with a &lt;a href="https://www.lua.org"&gt;Lua&lt;/a&gt; filter
for &lt;a href="https://pandoc.org"&gt;pandoc&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>More Haskell Diagrams: Images</title><link>https://www.thenegation.com/posts/haskell-diagrams-images/</link><pubDate>Sat, 10 Aug 2024 11:03:50 +0000</pubDate><guid>https://www.thenegation.com/posts/haskell-diagrams-images/</guid><description>&lt;p&gt;Let&amp;rsquo;s continue exploring the Haskell &lt;a href="https://diagrams.github.io"&gt;diagrams&lt;/a&gt; library. In this post, we will
embed external images in our diagrams.&lt;/p&gt;</description></item><item><title>Introduction to Haskell Diagrams</title><link>https://www.thenegation.com/posts/haskell-diagrams-intro/</link><pubDate>Fri, 09 Aug 2024 23:20:10 +0000</pubDate><guid>https://www.thenegation.com/posts/haskell-diagrams-intro/</guid><description>&lt;p&gt;I need a solid declarative diagramming library or tool that I can invest time
in. I always wanted to learn Haskell&amp;rsquo;s &lt;code&gt;diagrams&lt;/code&gt; library. In this post, I will
give it a try.&lt;/p&gt;</description></item><item><title>Hasura CLI on NixOS: A Working Solution</title><link>https://www.thenegation.com/posts/hasura-cli-on-nixos/</link><pubDate>Wed, 07 Aug 2024 22:02:10 +0000</pubDate><guid>https://www.thenegation.com/posts/hasura-cli-on-nixos/</guid><description>&lt;p&gt;This post comes after an exciting discovery of a solution to a problem I and my
team have been facing for a while: Getting Hasura CLI work on NixOS like any
other program.&lt;/p&gt;</description></item><item><title>Using niv to Manage Haskell Dependencies</title><link>https://www.thenegation.com/posts/using-niv-with-hackage/</link><pubDate>Tue, 06 Aug 2024 20:31:10 +0000</pubDate><guid>https://www.thenegation.com/posts/using-niv-with-hackage/</guid><description>&lt;p&gt;Using Nix to manage project dependencies and development environments is a great
way to keep your projects reproducible and isolated. &lt;a href="https://github.com/nmattia/niv"&gt;niv&lt;/a&gt; can help you further
in this by pinning the versions of your dependencies outside of your Nix code as
JSON data.&lt;/p&gt;
&lt;p&gt;In this post, I will show you what using &lt;a href="https://github.com/nmattia/niv"&gt;niv&lt;/a&gt; looks like and how to override
Haskell dependencies. I will also demo a small script I wrote to add Hackage
packages to the &lt;code&gt;sources.json&lt;/code&gt; file.&lt;/p&gt;</description></item><item><title>Backup GitHub Repositories with gidek</title><link>https://www.thenegation.com/posts/backup-github-repos/</link><pubDate>Mon, 05 Aug 2024 21:24:10 +0000</pubDate><guid>https://www.thenegation.com/posts/backup-github-repos/</guid><description>&lt;p&gt;Do you backup your Git repositories? If not, you should consider doing so. I
might even have a solution for you if you are using GitHub: &lt;a href="https://github.com/vst/gidek"&gt;gidek&lt;/a&gt;. It even has
some NixOS goodies packed with it.&lt;/p&gt;</description></item><item><title>Abusing Haskell: Executable Blog Posts</title><link>https://www.thenegation.com/posts/abuse-haskell/</link><pubDate>Sun, 04 Aug 2024 12:21:10 +0000</pubDate><guid>https://www.thenegation.com/posts/abuse-haskell/</guid><description>&lt;p&gt;Why? Because I can, and it is a rainy Sunday.&lt;/p&gt;
&lt;p&gt;I post my notes on &lt;a href="https://www.thenegation.com"&gt;my blog&lt;/a&gt;, &lt;a href="https://thenegation.hashnode.dev"&gt;Hashnode&lt;/a&gt; and &lt;a href="https://dev.to/vst"&gt;dev.to&lt;/a&gt;, which require slightly
different markdown formats. I have been doing the sane thing to fix formats so
far. But it is a rainy Sunday and I am bored, so I decided to make this blog
post an executable Haskell program to do the same.&lt;/p&gt;</description></item><item><title>NixOS on Raspberry Pi 4 with Encrypted Filesystem</title><link>https://www.thenegation.com/posts/nixos-rpi4-luks/</link><pubDate>Sat, 18 Nov 2023 00:00:00 +0000</pubDate><guid>https://www.thenegation.com/posts/nixos-rpi4-luks/</guid><description>&lt;p&gt;This guide documents how to install NixOS on Raspberry Pi 4 with an encrypted
root filesystem.&lt;/p&gt;</description></item><item><title>Literate Haskell with Markdown</title><link>https://www.thenegation.com/posts/literate-haskell-markdown/</link><pubDate>Sat, 16 Oct 2021 00:00:00 +0000</pubDate><guid>https://www.thenegation.com/posts/literate-haskell-markdown/</guid><description>&lt;p&gt;This is a short guide to writing &lt;em&gt;&lt;a href="https://wiki.haskell.org/Literate_programming"&gt;Literate Haskell&lt;/a&gt;&lt;/em&gt; programs using Markdown.&lt;/p&gt;</description></item></channel></rss>