Advertisement · 728 × 90

Posts by Tom

Photo showing a bit of shame on a team meeting

Photo showing a bit of shame on a team meeting

There was a team, which I joined to help with “DevOps’ stuff”. 5 or 6 people, good engineers, focused and busy. They had their habbits, processes and rituals. All more or less working fine… Except the review process. They were producing a lot of […] https://gagor.pro/2026/04/the-wall-of-shame/

13 hours ago 0 0 0 0
An Ubuntu logo and a quote about amd64 architecture optimization.

An Ubuntu logo and a quote about amd64 architecture optimization.

Explore how to enable and use the x86-64-v3 optimized Ubuntu variant for better performance on modern hardware without sacrificing stability.
#blog #Linux #Ubuntu (gagor.pro/2026/04/ubuntu-variant-o...

2 weeks ago 0 0 0 0
Prek project logo from GitHub

Prek project logo from GitHub

Prek is a Rust-based pre-commit alternative that maintains full config compatibility while delivering significantly faster hook execution.
#blog #Bash #BestPractices #Linux #MacOS (gagor.pro/2026/02/prek-a-pre-commi...

1 month ago 0 0 0 0
Preview
My IndieWeb Journey: A Guide to POSSE on a Hugo Static Site My journey of integrating IndieWeb principles into my Hugo blog-from microformats to Brid.gy syndication and building a custom Webmention renderer.

Just published my journey: gagor.pro/2026/01/my-i...

2 months ago 3 1 0 0
IndieWeb logo borrowed from Wordpress plugin site

IndieWeb logo borrowed from Wordpress plugin site

My journey of integrating IndieWeb principles into my Hugo blog-from microformats to Brid.gy syndication and building a custom Webmention renderer.
#blog #Hugo #IndieWeb (gagor.pro/2026/01/my-indieweb-jour...

2 months ago 0 0 0 0
Preview
Bridgy Connects your web site to social media. Likes, reposts, mentions, cross-posting, and more...

Interesting. I did something similar based on Brid.gy and webmention.io. Thanks to that my site tracks both Bluesky and Mastodon.
I'll write about it soon.

2 months ago 1 0 1 0
Preview
Digital Gardening Treating your personal website like a garden you tend continuously, not as a finished construction, but rather cultivated, authentic fragmented of web. #blog #Hugo #IndieWeb

Treating your personal website like a garden you tend continuously, not as a finished construction, but rather cultivated, authentic fragmented of web. #blog #Hugo #IndieWeb (https://gagor.pro/2026/01/digital-gardening/

2 months ago 0 0 0 0
Preview
Disable the pager for apt search I’m not sure when it happened, but for some time now, `apt search` has been using a pager (probably `less`) to display results. Whatever the reasoning behind this change, it just irritates me. After some digging, I found a few ways to deal with it. ## Don’t use `apt search`# A suboptimal solution is to rely on the older `apt-cache` command for searching, as it doesn’t use a pager. So, instead of calling: ~/2026/01/disable-the-pager-for-apt-search/ apt search kitty I could do this: ~/2026/01/disable-the-pager-for-apt-search/ apt-cache search kitty It works, but it requires a few more characters to type. I write enough time over the day writing, to waste time on typing extra characters, so that’s a no for me 😉 ## Disable with an environment variable# Another option I found was to use an environment variable: ~/2026/01/disable-the-pager-for-apt-search/ PAGER=cat apt search kitty But come on! It’s even more to write. ## Reconfigure `apt` to disable the pager permanently# This one took me a while to find, as it’s not easy to find docs for that. You can create a configuration file to disable the pager for `apt` entirely. This is the best way to do it, as it disables the pager without affecting other features like colorized output. ~/2026/01/disable-the-pager-for-apt-search/ sudo tee /etc/apt/apt.conf.d/99-no-pager > /dev/null << EOF Binary::apt::Pager "false"; EOF Now, `apt search` will print directly to the terminal, just like it used to (and in color!). * * * Enjoyed this post?

Disable the pager for apt search (gagor.pro/2026/01/disable-the-page...

3 months ago 0 0 0 0

A developer's journey of building a recursive descent parser in Go, from basic concepts to tackling left recursion with Packrat memoization.
https://gagor.pro/2026/0

#blog #Go #Programming

3 months ago 0 0 0 0
Advertisement

Transmission on Ubuntu may be denied access to localized Downloads directories due to AppArmor profiles expecting English folder names. Here’s how to fix it.
https://gagor.pro/2025/1

#blog #Security #Ubuntu

3 months ago 1 0 0 0

Learn how to squash Docker images using Buildx to create smaller, more efficient images by consolidating layers.
https://gagor.pro/2025/1

#blog #Best Practices #DevOps #Docker #Linux

3 months ago 3 0 0 0

Responding in anger undermines leadership. Learn how managing emotions leads to better decisions and healthier team dynamics.
https://gagor.pro/2025/1

#blog #Best Practices #Leadership #People

3 months ago 0 0 0 0
Preview
Zsh 'illegal modifier' with Git Conventional Commits Fix ZSH ‘illegal modifier’ errors with Git Conventional Commits by disabling the NO_BANG_HIST option.

Fix ZSH 'illegal modifier' errors with Git Conventional Commits by disabling the `NO_BANG_HIST` option.
gagor.pro/2025/12/zsh-...

#blog #linux #macos #zsh #git

3 months ago 0 0 0 0
Preview
I made Windows use UTC with Linux dual boot Configure Windows to use UTC for the hardware clock when dual-booting with Linux, avoiding time synchronization issues and maintaining Linux defaults.

I bend Windows to knees, so it use UTC in dual boot setup with Linux.
gagor.pro/2025/12/i-ma...

#blog #bestpractices #linux #windows

4 months ago 1 0 0 0
Preview
Snakes in Suits Snakes in SuitsUnderstanding and Surviving the Psychopaths in Your Office Authors: Paul Babiak, Robert D. Hare I read the Polish translation titled “Psychopaci w pracy: Jak ich rozpoznać i jak sobie z...

Just stopped reading: gagor.pro/book/2025/sn...

4 months ago 0 0 0 0

A detailed guide on shucking WD Elements 20TB drives, including testing, performance benchmarks, and stress testing.
https://gagor.pro/2025/1

#blog

4 months ago 0 0 0 0

A story of how I bought a digital photo frame, and how I created a tool to generate miniatures of my photo collection to fit them all on the device.
gagor.pro/2025/11/gene...

#blog #frameo #photos #go

4 months ago 0 0 0 0
Preview
20 years of Getting Things Done Reflections and practical tips from 20 years using Getting Things Done, plus a short workshop plan for leaders who want actionable routines.

Reflections and practical tips from 20 years using Getting Things Done, plus a short workshop plan for leaders who want actionable routines
gagor.pro/2025/11/20-y...

#blog #gtd #workshop

4 months ago 0 0 0 0

Learn how to create beautiful slide decks with Markdown and Marp, a simple and powerful tool for presentations.
https://gagor.pro/2025/1

#blog

5 months ago 0 0 0 0
Advertisement

New post on how I use Gemini CLI on my rules:

gagor.pro/2025/10/runn...

#blog #Gemini #ai

5 months ago 2 0 0 0
Preview
How to add llms.txt to a Hugo Blog Learn how to add an llms.txt file to your Hugo blog to make it more visible to AI agents and improve Generative Engine Optimization (GEO).

Learn how to add an `llms.txt` file to your Hugo blog to make it more visible to AI agents and improve Generative Engine Optimization (GEO).
gagor.pro/2025/10/how-...

#blog #ai #llm #hugo

6 months ago 0 0 0 0

Just drop
```
- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
```
In your dependabot.yml and it will happen.

6 months ago 0 0 0 0

Thanks

6 months ago 0 0 0 0

Just finished a book, check my review: https://gagor.pro/book/2

#blog #books

6 months ago 0 0 1 0

Just finished a book: https://gagor.pro/book/2
#blog #books

6 months ago 0 0 0 0

New blog post: https://gagor.pro/2025/0
#blog

6 months ago 0 0 0 0

New blog post: https://gagor.pro/2025/0
#blog

6 months ago 0 0 0 0
Advertisement
Preview
Backup from broken NVMe drive with ddrescue I was preparing to move data from my old PC to the new one. Just wanted to backup one of my NVMe drives but when I tried standard `dd`, it failed: Calling standard dd root@box:~# dd if=/dev/nvme1n1 of=/storage/backup/disk.img obs=1M dd: error reading '/dev/nvme1n1': Input/output error ... It was my second drive, which I do not care that much but still wanted to make a backup so I could restore what’s possible on new system. I started looking for option to force `dd` to skip problematic bytes/blocks - whatever possible - and that’s how I found `ddrescue`1. I heard about it, but I didn’t had occasion to use it before. Calling ddrescue root@box:~# ddrescue -f -n /dev/nvme1n1 /storage/backup/file.img /storage/backup/file.log GNU ddrescue 1.27 Press Ctrl-C to interrupt ipos: 1024 GB, non-trimmed: 233472 B, current rate: 33996 kB/s opos: 1024 GB, non-scraped: 0 B, average rate: 258 MB/s non-tried: 92602 kB, bad-sector: 0 B, error rate: 16384 B/s rescued: 1024 GB, bad areas: 0, run time: 1h 6m 4s pct rescued: 99.99%, read errors: 9, remaining time: 1s time since last successful read: 0s Copying non-tried blocks... Pass 1 (forwards) ipos: 856031 kB, non-trimmed: 385024 B, current rate: 10264 kB/s opos: 856031 kB, non-scraped: 0 B, average rate: 258 MB/s non-tried: 6619 kB, bad-sector: 0 B, error rate: 24576 B/s rescued: 1024 GB, bad areas: 0, run time: 1h 6m 6s pct rescued: 99.99%, read errors: 13, remaining time: 1s time since last successful read: 0s Copying non-tried blocks... Pass 2 (backwards) ipos: 917962 kB, non-trimmed: 471040 B, current rate: 60645 kB/s opos: 917962 kB, non-scraped: 0 B, average rate: 258 MB/s non-tried: 393216 B, bad-sector: 0 B, error rate: 106 kB/s rescued: 1024 GB, bad areas: 0, run time: 1h 6m 7s pct rescued: 99.99%, read errors: 15, remaining time: 1s time since last successful read: 0s Copying non-tried blocks... Pass 4 (backwards) ipos: 1024 GB, non-trimmed: 577536 B, current rate: 60645 kB/s opos: 1024 GB, non-scraped: 0 B, average rate: 258 MB/s non-tried: 0 B, bad-sector: 0 B, error rate: 106 kB/s rescued: 1024 GB, bad areas: 0, run time: 1h 6m 7s pct rescued: 99.99%, read errors: 19, remaining time: 1s time since last successful read: 0s Copying non-tried blocks... Pass 5 (forwards) ipos: 1024 GB, non-trimmed: 0 B, current rate: 81920 B/s opos: 1024 GB, non-scraped: 233472 B, average rate: 258 MB/s non-tried: 0 B, bad-sector: 16384 B, error rate: 5632 B/s rescued: 1024 GB, bad areas: 32, run time: 1h 6m 8s pct rescued: 99.99%, read errors: 51, remaining time: 1s time since last successful read: n/a Trimming failed blocks... (forwards) Finished Now I had image. It wasn’t fully correct because of failed reads, but at least I didn’t need to restart `dd` multiple times. I was able to fix filesystem with `fsck`, then I had to reinstall few packages to recreate broken files and that’s it. * * * Enjoyed? * * * 1. https://www.gnu.org/software/ddrescue/ external link ↩︎

Backup from broken NVMe drive with ddrescue (gagor.pro/2025/04/backup-from-brok...

11 months ago 0 0 0 0