Posts (689)
2026 (17 posts)
2025 (415 posts)
- ★
Blog discovery
- ★
Who watches the watchmen?
- Kagi: Add LeetCode !bang
- Finicky
- Flameshot
- ★
Starship
- ★
UptimeKuma
- ctop
- Openring
- ranger → lf
- ★
nginx → caddy
- ★
vim → nvim
- atuin: limit scope to current directory
- macOS: keyboard repeat
- ★
Pi
- Kindle: KOReader dictionaries
- myrepos: chain configs
- ★
git: stash untracked files
- ★
.apk-new
- MIUI debloater
- Toggle light / dark mode
- Claude Code: block dangerous commands
- Claude Code: stash
- j,k for navigation
- Claude Code: add context window % to status line
- Miniflux: NetNewsWire integration
- Offloading iOS apps
- Reordering mobile editing icons in logseq
- ★
friendly_ping: track your stale GitHub pull requests
- ★
Claude Code: notify when needed
- Stale bot considered harmful
- jj: hello world
- ★
Try
- Snippets manager
- Atuin: delete history entries
- ★
Canary tokens
- Homebrew: bin.install: mv instead of cp
- Ghostty shaders
- Chrome -> Orion
- ★
Atuin
- ★
python-is-python3 with macOS homebrew
- CorelDRAW: disable ads on Windows
- chrome://bookmarks
- Chrome DevTools: toggle prefers-color-scheme
- ★
git: prune stale branches
- GitHub labels vs merge when ready
- ghostty: quick terminal
- ★
The almighty Blogroll
- fx
- howto
- Canary
- ★
Stow
- ★
Claude: new slash commands
- ★
Personal blogs are back
- git stash -m
- ★
help2man
- No adblocker detected
- I hope
- ★
Radio
- Logitech MX Master 2S
- Open the most recent blog post
- Stress
- realpath
- Flock
- Terraformer
- Google Gemini: read CLAUDE.md or AGENTS.md
- terraform: update outputs only
- new pre-commit hook: check-bash-shebang
- ★
new script: PDF remove password
- bash shebang #!
- ★
Shell memoization: lazy-load LLM API keys
- Money
- Banana
- You are absolutely right!
- md-toc: markdown table of contents
- Record Club
- new script: copy
- git diff interactively
- Desk
- Chrome: hide bookmarks bar
- vim: spellchecker suggestions
- Highlighting text in drafts
- Oncall workflow with iOS shortcuts
- Clipboard as backup
- Basic Badminton
- ★
New script: SSH mux restart
- Claude Code: paste in images
- Grep in PDFs
- PostgreSQL: get database size
- .terraform-version
- brew: upgrade HEAD formulas
- GitHub: the organization has enabled or enforced SAML sso
- Instagram: unfollow non-followers
- ★
The Apple Store
- ★
Backlinks
- ★
Distributing my own scripts via homebrew
- MCP: model context protocol considered harmful
- git: reset default branch
- pipx run → uvx
- Alpine Linux: usr-merge
- git: partially cherry-pick a commit
- git: list branches by recent activity
- git: commit with the wrong email
- Random word
- Gmail: send email from plus address
- git: merge two repositories
- My favorite C compiler flags during development
- IMEI
- zoxide: fine-tuning
- Comma scripts
- Anki: find all suspended flashcards
- vim: reflow current paragraph
- ★
Claude Code: adding my first MCP server
- Post-its in the laptop
- macOS homebrew: downgrade a package
- ★
claude code: custom commands
- New script: AWS China MFA login
- ★
zizmor
- .hushlogin
- ★
Claude Code: cheatsheet
- ★
New script: sd-world: perform a full system upgrade
- git blame: prior commits
- New script: pritunl login via CLI
- The get your shit together day
- Kubernetes: pod memory usage
- Responsible adult with a digital calendar
- ★
pancake: potpourri scripts
- mv: case sensitivity
- Whiteboard mark colors
- An ordinary day with Claude
- ★
homebrew: command-not-found
- go/keep-sorted
- Losing an AirTag
- Taking oncall
- Hacking comments with JSON
- GitHub autolinks
- ★
LaTeX CV
- ★
GitHub stale bot considered harmful
- nohello
- vim: remove trailing whitespace
- Bicycle: squeaky brakes
- Hugo: create and edit a post
- ★
Broot
- Slice of bread
- SCHUFA
- ★
Booking.com mobile-only rates
- RayCast: spotify in macOS menu bar
- Hello?!
- Career Leverage as a Developer
- ★
LeetCoding
- kubectl: verbose logging
- Uninstall Kyverno
- JSON pointers: escaping
- claude: compact context
- claude: ccusage
- GitHub: disable dependabot CLI notifications
- claude --resume
- Trash
- pre-commit: autoupdate
- ★
'It's never a good time'
- helm: diff manifests
- Fact-checking when blogging
- midnight commander: Fn keys
- yazi
- midnight commander: use default editor
- git: ignore changes to tracked files
- midnight commander: colorscheme
- What is a valid email address?
- ArgoCD: git index.lock issue
- ★
YAML: JSON patch: test
- /security-review
- Emoter
- Python: f-string help
- ★
Kubernetes: list all ImagePullBackOff container images
- ★
XSLT in RSS feed
- Docker: AWS ECR: list recent image tags
- Dockerfile: CMD and ENTRYPOINT: shell and exec forms
- GNU sed: follow symlinks
- Daily log
- "Fix typo"
- ★
git ll
- ★
git: --no-pager
- ArgoCD: app version notifications
- JIRA: create an issue with pre-populated fields
- docker: dive into images
- ★
Silence unknown callers
- ArgoCD: recovery when traefik is broken
- fd with xargs: filenames with spaces
- ★
GitHub: set up scheduled reminders on Slack
- terraform: bypass lock
- Dune 2000 soundtrack
- Block "Sign in to XXX with google.com"
- ArgoCD: all applications stuck on refresh
- ★
PR reviews after vacation
- direnv: automatically load .env everywhere
- Writing blog posts on the go
- Okta: enroll into 2FA
- ★
Smartwatches
- vim: add word to spellchecker
- Bicycle: replacing an inner tube
- git: developer certificate of origin (DCO) sign-off
- Reader's block
- vim: join lines without producing a space
- Ghostty: migrating config to dotfiles
- Steam Deck: 640x480 external monitor resolution
- Alpine Linux: remove broken packages
- ★
check-json-schema: pre-commit hook
- pq: could not access file "$libdir/dict_snowball": No such file or directory
- Markdown headings and git comments
- ArgoCD: deployment spec.selector: field is immutable
- Steam ratings
- Resize image to make an avatar
- M1 Macbook Air keeps disconnecting from Wi-Fi
- Helm repository with a trailing slash
- ★
Logseq template for working out
- Oh Shit, Git!?!
- Slack: reacji channeller
- Speaking to myself
- Espanso for Github PR templates
- ★
git delta
- Diffoscope: exclude directory metadata
- SSH: hash known hosts
- Kindle Paperwhite: KOReader: calibre sync
- Kindle Paperwhite: add custom fonts
- ★
ArgoCD: every application in unknown state
- ★
ArgoCD: custom health check for StatefulSet (OnDelete)
- ★
Slack: public chats first
- .gitignore .claude/settings.local.json
- Paolo the plumber
- ★
git commit: automatically add pull request template
- ArgoCD: application stuck in unknown
- JIRA Service Management search is terrible
- bad interpreter: perl: no such file or directory
- Apple App Store Geo-blocking
- Alpine Linux: Dockerfile: install package from edge
- Alpine Linux: package is gone?!
- git pull: authentication issues
- ★
Alpine Linux packaging: track new software releases
- ArgoCD: upgrade to v3, remove helm labels
- PDB: minAvailable and maxUnavailable cannot be both set
- Replace text in PDFs
- Kagi trial expires
- Limited creativity
- Golang fuzzing
- Which book should I read next?
- Our most powerful model yet
- pre-commit: add hugo build
- ★
PostgreSQL major version upgrade on Alpine Linux
- Tailspin
- watch with --color
- npx serve
- WebAssembly: hello world
- mdsh: a markdown pre-processor
- Web browser privacy tests
- bash: set a trap to log errors
- kubernetes: list pending pods in daemonset
- ack with context
- Ultrathink
- ChatGPT default settings
- Backfill your blog
- ★
fpp: facebook path picker
- ★
WinterBreak: hello world
- Blog directories
- Espanso: hello world
- Stack Overflow is almost dead
- ★
Nostalgia: The Linux Setup - Thiago Perrotta, Student
- Cursor
- Github: dependabot: group updates
- VSCode: Github Pull Requests plug-in: collapse all comments by default
- ★
How to file a great feature request
- Logseq: open page in sidebar
- Slack: Github bot: post notifications
- Kagi: Small Web
- helm-secrets + vals: string interpolation
- 1Password SSH agent error
- ByteBurst Brigade
- Slack snippets
- Do you like to live in danger?
- bkt: bypass cache
- Github: pull request template
- ★
Kagi
- Logseq: list all pages of a tag
- JIRA: stand-up mode
- Terminal autocorrection
- ★
The ack + xargs + sed pattern
- YAML: complex keys
- GitHub: create a pull request from CLI
- macOS: delete file, bypass trash
- Delete newlines in a pipe
- The LLM journey
- HashiCorp Vault from helm values
- Github PRs: do not submit
- Bracket City
- Finding the table manual
- ★
Alpine Linux: the maintainer workflow
- ★
The Smalltalk Question
- ★
Serendipity vs Gatekeeping
- GitHub: vacation mode
- Pipe to Claude
- Github Actions: ubuntu-latest tools
- Against names
- Sentimental versioning
- ★
First Alpine Linux package in Community
- ★
DEFCON radio
- AppleScript discoverability: more Amphetamine
- Experts
- llm: remove stored key
- ★
Badminton
- ★
Amphetamine: Keep awake
- Unemployment is not the problem
- pre-commit: make a hook opt-in
- ★
1Password CLI + direnv integration
- Disclosing AI in pull requests
- Festering
- Slack emojis / Slackmojis
- maccy: pin items
- It is as if you were on your phone
- Hot sauce
- pre-commit: no-commit-to-branch hook
- pre-commit: pin dependencies with --freeze
- git: prefer switch over checkout
- My packaging policy
- npm: install before test
- ★
git freeze, git thaw
- Terraform: rename resources
- Goodreads
- Friction
- Micromarriages
- Terraform: create zip files
- Terraform: generate diagrams
- ★
Filling in the gaps of the internet
- YOLO: debug only after push
- yaml: wrong new line character: expected \n
- ★
AWS IAM resources
- keep-sorted, with quotes
- commit, pre-commit, commit
- SAML Chrome Panel
- ★
Have I Been Pwned?
- How core git developers configure git
- ★
🔗
Reply to: Growth at BigTech
- ★
Using keep-sorted to keep your ~/.gitconfig tidy
- Create a git commit with multiple contributors
- SponsorBlock
- Grayjay
- Logseq: aliases
- gh pr view
- Coffee
- Google Meet: dashes
- Kill the Newsletter
- git: prune gone upstream branches
- zsh: setopt magic_equal_subst
- ★
Quick look preview YAML files on macOS
- ★
Notify search engines of new posts
- No printer, yes paper
- Ruby: string escaping
- Crawling / indexing is wild
- git: blank commit
- ArgoCD: vertical-pod-autoscaler sync loop
- ★
GitHub Distributed CODEOWNERS
- Date your whiteboard notes
- LinkedIn: chronological view
- MLC Chat: off-line LLMs in your iPhone
- ★
DuckDuckGo email protection
- Upcoming calendar meeting in macOS menu bar with Raycast
- Instagram: get rid of all posts
- Kubernetes: create a pod in pending state
- Resetting an AirTag
- How much to charge or pay for couch surfing?
- SmartTube
- ★
Raycast snippets
- Feel free to say no
- itsycal: system tray calendar on macOS
- JIRA: link issues
- Cloudflare DNS for families
- codespell: ignore words
- 🔗
Reply to: smash that subscribe button
- VSCode pets
- ★
Deutschland Ticket in 2025
- Kindle Paperwhite: take a screenshot
- FOSDEM Calendar
- Pawnbarian
- What time is it in your timezone?
- Stop trying to schedule a call with me
- ★
SSCCE
- ★
Cloudflare: Email Workers
- .gitkeep
- Anki: insert emoji on macOS
- Why self-answer questions in your own blog instead of Stack Overflow?
- ArgoCD: cache: key is missing
- Quick and dirty random password generator
- ★
YAML: enforce schema linting
- ghostty: find popular themes
- Helm: migrate chart dependencies from HTTPS to OCI
- Alpine Linux: install / pin old packages
- bash: distinguish between script invocation versus source
- Diffing two directories
- nginx: add basic auth
- Stimulation Clicker
- Your app should have been a website
- Logseq: linking and backlinking
- Linux is free if your time is worthless
- LaTeX beamer slides with notes
- Mindmaps in markdown
- 🔗
Reply to: Mistakes engineers make in large established codebases
- pre-commit + vim integration
- 🔗
Reply to: My approach to running a link blog
- iOS lockdown mode
- Unsplash: Wallpapers
- Cookiecutter: document variables
- git: update master to main
- 🔗
Reply to: 100 days to offload
- Corpspeak Bingo
- Fiction
- ★
git: configure identities for work
- ★
Scan for markdown broken links in your blog
2024 (183 posts)
- Sourcegraph
- macOS app shortcuts
- git reset --keep
- DevOps career progression
- 🔗
Reply to: Here's how to live: Be independent
- 🔗
Reply to: CoPilot having a normal one
- ★
Trains in Europe
- TIL: Today I Learned
- ★
Cookiecutter
- ★
bkt: cache command outputs
- Cooking
- AI usage
- Pin all github actions
- Amazon guardrails
- Miniflux: global blocklist
- Ghostty
- Optimize images
- iOS safari with large fonts
- ★
Ollama: Hello World
- Folderify: Generate macOS folder icons natively
- 🔗
Reply to: Douglas Adams on reactions to technology by age
- Site performance with Lighthouse
- ★
Update DNS NS servers from Porkbun to Cloudflare
- localhost under your own domain
- Advents
- Versioning schemes
- ★
Keep sorted
- Hyperfine: a CLI benchmarking tool
- git reset --hard including submodules
- Picking a monospaced code font
- Switching from Google to ChatGPT search
- Just: make Justfile self-contained
- Running multiple servers in a single bash script
- Unbuffer
- 🔗
Reply to: Introduce yourself to your remote team
- ★
Anki workflow
- ★
Online diff tool
- Stylometry
- Digital mending circle
- 🔗
Reply to: My approach to running a link blog
- MBTI
- ★
Pre-commit
- ★
Default apps 2024
- 🔗
Reply to: I Hate the News
- New theme: BearBlog
- hugo: merge two tags
- git: push --force with style
- Manage your Kindle library online
- ★
pre-commit: create hooks for unsupported tools
- ★
skopeo: operate container images and registries
- Kubernetes: tail logs from pods with stern
- Kubernetes: debugging services
- ★
Just
- Semantic versioning constraints
- ★
.gitignore without .gitignore
- Alpine Linux 3.21
- Docker build: ignore cache
- bash: glob hidden files recursively
- Finding linters
- Docker image size
- atools: unpack file archives agnostically
- IaC
- Compress a .pdf in macOS with Preview.app
- LKW mit ABS
- bash: disable pipefail
- logseq: backlog
- pre-commit: try-repo
- Rename files in bulk (cont)
- Remove the executable bit from all files with a given extension
- git: recover a snowflake commit
- pre-commit: additional dependencies in golang
- ★
zoxide: cd within the same directory
- Helm: JSON schema generation
- sort deterministically
- ★
Helm: enforce the directory name matches the chart name
- jq: remove quotes from output
- Ruby: update Gemfile dependencies
- Github Actions: multiple docker images
- VSCode: auto restart extensions
- Jellyfin Trakt plug-in
- Mermaid: rich diagrams in markdown
- Board games
- Conventional commits
- Check if docker image exists in registry
- ★
Performance reviews
- ★
prodaccess
- Makefile: path to root dir
- kubectl: list all node pods
- kubectl: force delete pods
- ★
New series: Raspberry Pi fun with DevOps
- cdg: change directory to the git root
- Convert JSON to YAML
- git misspellings
- New APKBUILD: argocd
- Exponential Idle
- bash built-in date
- ★
cdtmp: change to a temporary directory
- ★
Tracking cheap flights from Munich
- Steam Deck "downloading update" boot loop
- ★
Erratic: human-friendly google3 piper snapshots
- fd: match full path
- ack: match and return only the matched string
- helm: list recent chart upgrades
- Life without ack
- ★
Anki: custom language card (cont.)
- Slack: AI plug-in
- Chromium: Delete entry in URL bar
- less(1): scroll back one page
- Diceware passphrases
- Wi-Fi QR code generator
- End of life package info
- AWS S3: search by suffix
- git: create a throwaway branch
- YAML multiline strings
- Helm: list all installed charts in the cluster
- Browser tabs are not TODO lists
- Accomplishment
- Diffoscope: recursive diffs
- apk autoupdate on alpine linux
- JSON schema negation
- Release
- ★
Self-documented Makefiles
- Optimize PNG images
- kubectl: print all secret values in plain text
- Direnv nested
- Disallow AI scraping
- No analytics
- Docker on Alpine Linux
- Emoji appropriation
- Audiobooks read by the author
- Parallel
- Zoom
- Alpine Linux: How to install all manpages (idiomatically)
- Format dialogues in markdown
- Fans
- kubectl: get all logs from all pods
- kubectl: get secret with jsonpath and add a newline
- icdiff: side-by-side diff
- Github-flavoured Markdown: Callouts
- Pipes: RSS Manipulation
- Rejection
- t-shirt
- Terraform: perform a global update
- Explain a crontab expression
- Localhost domain
- a little
- timezones
- Copy files from laptop to Steam Deck
- Entschuldigung
- ★
XY problem (xyproblem)
- Rename files in bulk
- Sleep forever
- Bcrypt-hash a password
- ★
Github actions workflow
- Terraform: AWS deployment to random availability zones
- Adding a healthcheck to chartmuseum in AWS Fargate
- Pritunl log in via CLI
- MongoDB: find idle connections
- Be aware that your public SSH keys can reveal your identity
- Shell text substitution
- pyenv
- chrome-fresh: start a fresh instance of Google Chrome
- Set terminal language to English
- Force captive portal to open
- Organic Maps: off-line maps
- New domain
- WHOIS
- ★
Anki: custom language card
- ★
Integrating terraform with ansible
- Jumblie
- Hugo: rename a tag
- Anki: find all notes with an empty field
- sd-world: perform a full system upgrade
- ★
(Google) Chrome for Testing: reliable downloads for browser automation
- ★
Terraforming a Linode: hello world
- The fundamental right to paste
- Remove large files from your computer
- Create a family tree with graphviz
- Start an HTTP server ASAP
- Why do you need to know my last name?
- ★
Synchronized in Python
- Python: all hail to cache memoization
- Python: debugging tip with print and f-strings
2023 (6 posts)
2022 (55 posts)
- AIs galore
- Do I still remember how to blog?
- ★
Tools you should know about: moreutils
- Large prints
- Tracking packages automatically in a single place
- ★
Keychron K2 on macOS: fix Home and End keys
- Translating German to English
- macOS terminal app gripes
- Send emails straight to spam
- HTTPS Everywhere: So long and thanks for all the fish
- macOS: sudo with touch ID
- Computers are fast
- Ninite: Bootstrap a Windows installation
- Miniflux v2.0.36 is out
- Bypass news article paywalls
- Linux: US International keyboard layout
- HTTP: a few acronyms
- What is my IP?
- Website fonts: just use the system font stack
- Screenshot a web page from within chrome devtools
- ★
Wayland: from i3 to sway
- Hugo: compose or edit blog posts from the web
- Praise for blog aggregators
- ★
nix-env in a nutshell for basic usage in macOS
- ★
SSH plus tmux automatically
- Python: interactive completion
- nix-shell in a nutshell
- RSS: bridging the gap
- Thoughts on Gemini
- Doas: bridging the sudo gap
- Transfer bash history to zsh
- Google and DuckDuckGo
- Linux swap shenanigans
- ★
systemd: share environment variables with xorg
- ★
Watch files and react to changes during development
- Linux: Remount device with different options
- ChromeOS hterm: customize fonts
- Throwaway (disposable) accounts for ephemeral use cases
- Pihole: Add custom DNS mappings
- ★
Alpine Linux: New APKBUILD Workflow
- Introspect the local network for Pihole
- Git: Oops I forgot to add this thingy
- ★
Arch Linux: New PKGBUILD Workflow
- Alpine / Arch Linux: .apk-new and .pacnew files
- Debian: Enable unattended upgrades
- ★
Alpine Linux on Raspberry Pi: Diskless Mode with persistent storage
- RSS: Follow commit updates from Github
- ★
Keychron K2: Review
- Alpine Linux: apk logs with etckeeper
- ★
My First APKBUILD
- Ventoy: Automate your Distro hopping
- ★
Alpine Linux: apk command not found hook
- ★
Direnv: Automate your Environment Variables
- ★
Miniflux: Rolling my own RSS Reader
- Ephemeral Linux Shell Access in the Cloud
2021 (6 posts)
2017 (1 post)
2016 (1 post)
2015 (2 posts)
2014 (1 post)
Categories
%