Skip to content
ndm.devnandomoreira.devAvailablePT

~/blog

My open notebook

I have been writing here since 2015. These days it is mostly about AI agents, Linux and the tools I build myself, what worked and what broke along the way. At heart I write about my own studies and experiments for myself; if you are reading, that is a bonus :)

23 articles
RSS FEED
  • 11 min readPi-hole blocking 1 in 5 DNS queries in the house

    My homelab on a 2018 Mac mini: disks, DNS and Tailscale

    A Mac mini on Ubuntu and CasaOS, drawing 5.5 W, holds the laptop backups, my music, this site's staging and Pi-hole, which blocks one in five DNS queries in the house. Installing the apps was the easy part; the work was deciding where the data lives and how each device reaches it.

    • #homelab
    • #linux
    • #networks
  • 8 min read309-line script with the cgroup v2 freezer

    game-mode: I freeze work to play, without closing any window

    A Niri shortcut freezes Chrome, Slack and the terminals with the cgroup v2 freezer, blanks the leftover monitors and turns on quiet mode. Steam and music keep going. Getting there cost a Steam painted black and a game mode that not even its own command could turn off.

    • #linux
    • #shell
    • #niri
  • 7 min read7 shortcuts, 1 script, 15 BATS tests

    Scratchpad on Niri: windows that vanish and return with a shortcut

    Niri cannot minimize a window. A 199-line script and a hidden workspace make WhatsApp, Obsidian and YouTube appear and disappear with one key, and Discord, Spotify and LocalSend return to the tray.

    • #niri
    • #wayland
    • #shell
  • 7 min read41 iPhone shortcuts migrated to YAML

    espanso: iPhone text replacement, now on my Linux

    I used macOS Text Replacement for years and still use it on the iPhone every day. On CachyOS with Niri, espanso does the same in any text field, after three tweaks the docs never mention.

    • #linux
    • #tips
    • #productivity
  • 7 min read5 days → 30 min per dataset

    From five days to thirty minutes: AI in an ETL pipeline

    How preparing a dataset went from nearly a week of manual work to half an hour: API automation, AI where it helps, tests where it can go wrong and the deadline as a product rule.

    • #etl
    • #data
    • #ai
  • 6 min read7 sources, 0 dependencies, 328 tests

    job-radar: I stopped scrolling job lists and let Python discard for me

    Seven job sources, filters that discard before the score, the résumé as a qualifications list and a Discord channel that only gets what survived. Zero runtime dependencies, and the code is open.

    • #python
    • #automation
    • #open source
  • 8 min read0 browser scripts, 1 pixel at 1×1

    No JavaScript in the browser: I built analytics for my site and follow it from the terminal, in Rust

    I only wanted the basics of analytics, without injecting a script into the site and without sending visitor data to anyone. It became a middleware, a 1×1 pixel, a cookie named __session and a Rust TUI.

    • #analytics
    • #privacy
    • #terminal
  • 10 min read10 days capturing Xbox traffic

    My study of Red Dead Online sessions: P2P, Rockstar relays and the double NAT I built myself

    I spent ten days looking at my Xbox traffic to understand how a Red Dead Online session forms. I learned to tell a player from a relay in a capture, found that my gateway had dropped the NAT type to Moderate, and that hiding the home IP costs an MTU tweak.

    • #networks
    • #linux
    • #homelab

Drafts in progress

  • AEO vs SEO: is SEO dead?
  • The AI designer put the business rule in the copy: my prompt told it to
  • Blog comments without page weight: Giscus only loads when you reach the end
  • From Noctalia v4 to v5: I ported the plugins with both shells running
  • Screen recording to GIF with a shortcut, with a counter on the bar

Updates in the terminal

Subscribe to the technical article feed

Zero marketing. Just new articles when they go live.

By subscribing, you agree to the privacy policy.

Ready to share.