summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--about/resources.gmi192
-rw-r--r--about/showcase.gmi1818
-rw-r--r--about/showcase.gmi.tpl1730
-rw-r--r--about/showcase/debroid/image-1.png56
-rw-r--r--index.gmi2
-rw-r--r--stats/20250531.gmi108
-rw-r--r--stats/20250601.gmi105
-rw-r--r--stats/20250602.gmi103
-rw-r--r--stats/20250603.gmi109
-rw-r--r--stats/20250604.gmi106
-rw-r--r--stats/20250605.gmi110
-rw-r--r--stats/20250606.gmi111
-rw-r--r--stats/20250607.gmi109
-rw-r--r--stats/20250608.gmi106
-rw-r--r--stats/20250609.gmi106
-rw-r--r--stats/20250610.gmi107
-rw-r--r--stats/20250611.gmi113
-rw-r--r--stats/20250612.gmi107
-rw-r--r--stats/20250613.gmi106
-rw-r--r--stats/20250614.gmi105
-rw-r--r--stats/20250615.gmi104
-rw-r--r--stats/20250616.gmi103
-rw-r--r--stats/20250617.gmi112
-rw-r--r--stats/20250618.gmi111
-rw-r--r--stats/20250619.gmi104
-rw-r--r--stats/20250620.gmi108
-rw-r--r--stats/20250621.gmi106
-rw-r--r--stats/20250622.gmi102
-rw-r--r--stats/20250623.gmi103
-rw-r--r--stats/20250624.gmi107
-rw-r--r--stats/20250625.gmi111
-rw-r--r--stats/20250626.gmi106
-rw-r--r--stats/20250627.gmi109
-rw-r--r--stats/20250628.gmi106
-rw-r--r--stats/20250629.gmi105
-rw-r--r--stats/20250630.gmi101
-rw-r--r--stats/30day_summary_20250630.gmi202
-rw-r--r--uptime-stats.gmi58
38 files changed, 2749 insertions, 4618 deletions
diff --git a/about/resources.gmi b/about/resources.gmi
index 7ab7ee49..bc724817 100644
--- a/about/resources.gmi
+++ b/about/resources.gmi
@@ -35,105 +35,105 @@ You won't find any links on this site because, over time, the links will break.
In random order:
-* Site Reliability Engineering; How Google runs production systems; O'Reilly
+* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner
* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional
-* Leanring eBPF; Liz Rice; O'Reilly
-* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly
+* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers
+* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly
+* Raku Recipes; J.J. Merelo; Apress
+* Raku Fundamentals; Moritz Lenz; Apress
+* Pro Puppet; James Turnbull, Jeffrey McCune; Apress
+* The Pragmatic Programmer; David Thomas; Addison-Wesley
+* Concurrency in Go; Katherine Cox-Buday; O'Reilly
+* Polished Ruby Programming; Jeremy Evans; Packt Publishing
* Java ist auch eine Insel; Christian Ullenboom;
+* Effective Java; Joshua Bloch; Addison-Wesley Professional
+* The Docker Book; James Turnbull; Kindle
+* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson
+* Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications
* DNS and BIND; Cricket Liu; O'Reilly
-* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications
* Funktionale Programmierung; Peter Pepper; Springer
-* The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton
-* Perl New Features; Joshua McAdams, brian d foy; Perl School
-* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook
-* Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers
-* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson
-* Effective Java; Joshua Bloch; Addison-Wesley Professional
-* Concurrency in Go; Katherine Cox-Buday; O'Reilly
-* Polished Ruby Programming; Jeremy Evans; Packt Publishing
* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press
-* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly
-* Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly
-* Raku Recipes; J.J. Merelo; Apress
-* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible
-* The Pragmatic Programmer; David Thomas; Addison-Wesley
+* Developing Games in Java; David Brackeen and others...; New Riders
* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly
-* Pro Puppet; James Turnbull, Jeffrey McCune; Apress
-* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly
-* Systemprogrammierung in Go; Frank Müller; dpunkt
+* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible
+* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt
+* Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers
* Ultimate Go Notebook; Bill Kennedy
-* Raku Fundamentals; Moritz Lenz; Apress
-* The Docker Book; James Turnbull; Kindle
+* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook
+* Leanring eBPF; Liz Rice; O'Reilly
+* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly
+* Terraform Cookbook; Mikael Krief; Packt Publishing
+* Systemprogrammierung in Go; Frank Müller; dpunkt
+* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press
+* Data Science at the Command Line; Jeroen Janssens; O'Reilly
* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly
-* Modern Perl; Chromatic ; Onyx Neon Press
-* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt
-* Effective awk programming; Arnold Robbins; O'Reilly
-* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner
+* Perl New Features; Joshua McAdams, brian d foy; Perl School
* C++ Programming Language; Bjarne Stroustrup;
-* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press
+* Site Reliability Engineering; How Google runs production systems; O'Reilly
+* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly
+* Effective awk programming; Arnold Robbins; O'Reilly
* Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf
+* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly
+* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications
+* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible
* Higher Order Perl; Mark Dominus; Morgan Kaufmann
-* Developing Games in Java; David Brackeen and others...; New Riders
-* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers
+* Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly
+* Modern Perl; Chromatic ; Onyx Neon Press
* The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress
-* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly
-* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible
-* Data Science at the Command Line; Jeroen Janssens; O'Reilly
-* Terraform Cookbook; Mikael Krief; Packt Publishing
-* Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications
+* The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton
## Technical references
I didn't read them from the beginning to the end, but I am using them to look up things. The books are in random order:
* BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley
-* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly
* Go: Design Patterns for Real-World Projects; Mat Ryer; Packt
-* The Linux Programming Interface; Michael Kerrisk; No Starch Press
-* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly
-* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly
* Relayd and Httpd Mastery; Michael W Lucas
+* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly
+* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly
+* The Linux Programming Interface; Michael Kerrisk; No Starch Press
* Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley
+* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly
## Self-development and soft-skills books
In random order:
+* Ultralearning; Anna Laurent; Self-published via Amazon
+* So Good They Can't Ignore You; Cal Newport; Business Plus
+* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion
+* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly
+* Deep Work; Cal Newport; Piatkus
+* Ultralearning; Scott Young; Thorsons
+* Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)
* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business
+* The Bullet Journal Method; Ryder Carroll; Fourth Estate
+* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books
+* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)
* Eat That Frog!; Brian Tracy; Hodder Paperbacks
+* Stop starting, start finishing; Arne Roock; Lean-Kanban University
+* The Joy of Missing Out; Christina Crook; New Society Publishers
+* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select
+* Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook
+* Soft Skills; John Sommez; Manning Publications
+* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook
* Slow Productivity; Cal Newport; Penguin Random House
+* 101 Essays that change the way you think; Brianna Wiest; Audiobook
+* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook
+* Influence without Authority; A. Cohen, D. Bradford; Wiley
* The Good Enough Job; Simone Stolzoff; Ebury Edge
+* Atomic Habits; James Clear; Random House Business
+* The Power of Now; Eckhard Tolle; Yellow Kite
* Eat That Frog; Brian Tracy
-* Getting Things Done; David Allen
-* Soft Skills; John Sommez; Manning Publications
-* Psycho-Cybernetics; Maxwell Maltz; Perigee Books
* Digital Minimalism; Cal Newport; Portofolio Penguin
-* The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd
-* Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook
-* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook
-* Deep Work; Cal Newport; Piatkus
+* Psycho-Cybernetics; Maxwell Maltz; Perigee Books
* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing
-* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly
-* The Joy of Missing Out; Christina Crook; New Society Publishers
-* The Power of Now; Eckhard Tolle; Yellow Kite
-* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press
-* Ultralearning; Scott Young; Thorsons
-* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne
-* Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)
-* So Good They Can't Ignore You; Cal Newport; Business Plus
-* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)
* Meditation for Mortals, Oliver Burkeman, Audiobook
-* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books
-* Ultralearning; Anna Laurent; Self-published via Amazon
-* Atomic Habits; James Clear; Random House Business
-* Influence without Authority; A. Cohen, D. Bradford; Wiley
-* The Bullet Journal Method; Ryder Carroll; Fourth Estate
+* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press
* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK
-* Stop starting, start finishing; Arne Roock; Lean-Kanban University
-* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook
-* 101 Essays that change the way you think; Brianna Wiest; Audiobook
-* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion
-* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select
+* Getting Things Done; David Allen
+* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne
+* The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd
=> ../notes/index.gmi Here are notes of mine for some of the books
@@ -141,30 +141,30 @@ In random order:
Some of these were in-person with exams; others were online learning lectures only. In random order:
-* AWS Immersion Day; Amazon; 1-day interactive online training
-* F5 Loadbalancers Training; 2-day on-site training; F5, Inc.
* Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon
-* Functional programming lecture; Remote University of Hagen
-* MySQL Deep Dive Workshop; 2-day on-site training
+* Ultimate Go Programming; Bill Kennedy; O'Reilly Online
+* Structure and Interpretation of Computer Programs; Harold Abelson and more...;
+* AWS Immersion Day; Amazon; 1-day interactive online training
* Apache Tomcat Best Practises; 3-day on-site training
-* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online
+* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online
* Scripting Vim; Damian Conway; O'Reilly Online
-* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online
-* Developing IaC with Terraform (with Live Lessons); O'Reilly Online
+* F5 Loadbalancers Training; 2-day on-site training; F5, Inc.
* Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training
-* Structure and Interpretation of Computer Programs; Harold Abelson and more...;
-* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online
-* Ultimate Go Programming; Bill Kennedy; O'Reilly Online
-* Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)
* Protocol buffers; O'Reilly Online
+* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online
+* Functional programming lecture; Remote University of Hagen
+* Developing IaC with Terraform (with Live Lessons); O'Reilly Online
+* Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)
+* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online
+* MySQL Deep Dive Workshop; 2-day on-site training
## Technical guides
These are not whole books, but guides (smaller or larger) which I found very useful. in random order:
+* Raku Guide at https://raku.guide
* How CPUs work at https://cpu.land
* Advanced Bash-Scripting Guide
-* Raku Guide at https://raku.guide
## Podcasts
@@ -172,56 +172,56 @@ These are not whole books, but guides (smaller or larger) which I found very use
In random order:
-* The ProdCast (Google SRE Podcast)
-* Modern Mentor
-* The Changelog Podcast(s)
-* Maintainable
-* Pratical AI
* Fork Around And Find Out
* Backend Banter
+* The Changelog Podcast(s)
* Hidden Brain
-* Fallthrough [Golang]
-* Cup o' Go [Golang]
+* Maintainable
* BSD Now [BSD]
-* The Pragmatic Engineer Podcast
+* Modern Mentor
+* Cup o' Go [Golang]
* Deep Questions with Cal Newport
* Dev Interrupted
+* The ProdCast (Google SRE Podcast)
+* Fallthrough [Golang]
+* The Pragmatic Engineer Podcast
+* Pratical AI
### Podcasts I liked
I liked them but am not listening to them anymore. The podcasts have either "finished" (no more episodes) or I stopped listening to them due to time constraints or a shift in my interests.
-* FLOSS weekly
-* CRE: Chaosradio Express [german]
* Modern Mentor
-* Go Time (predecessor of fallthrough)
* Java Pub House
+* FLOSS weekly
* Ship It (predecessor of Fork Around And Find Out)
+* Go Time (predecessor of fallthrough)
+* CRE: Chaosradio Express [german]
## Newsletters I like
This is a mix of tech and non-tech newsletters I am subscribed to. In random order:
-* Monospace Mentor
+* Register Spill
+* Ruby Weekly
+* Applied Go Weekly Newsletter
+* byteSizeGo
* Golang Weekly
+* VK Newsletter
+* Monospace Mentor
+* The Pragmatic Engineer
* The Imperfectionist
-* Andreas Brandhorst Newsletter (Sci-Fi author)
* Changelog News
-* Applied Go Weekly Newsletter
-* Register Spill
+* Andreas Brandhorst Newsletter (Sci-Fi author)
* The Valuable Dev
-* byteSizeGo
-* Ruby Weekly
-* The Pragmatic Engineer
-* VK Newsletter
## Magazines I like(d)
This is a mix of tech I like(d). I may not be a current subscriber, but now and then, I buy an issue. In random order:
-* Linux User
* Linux Magazine
* freeX (not published anymore)
+* Linux User
* LWN (online only)
# Formal education
diff --git a/about/showcase.gmi b/about/showcase.gmi
index c864ff28..23fa377e 100644
--- a/about/showcase.gmi
+++ b/about/showcase.gmi
@@ -1,6 +1,8 @@
# Project Showcase
-This page showcases my open source projects, providing an overview of what each project does, its technical implementation, and key metrics. Each project summary includes information about the programming languages used, development activity, and licensing.
+Generated on: 2025-07-09
+
+This page showcases my open source projects, providing an overview of what each project does, its technical implementation, and key metrics. Each project summary includes information about the programming languages used, development activity, and licensing. The projects are ordered by recent activity, with the most actively maintained projects listed first.
## Table of Contents
@@ -28,14 +30,13 @@ This page showcases my open source projects, providing an overview of what each
* ⇢ ⇢ ⇢ docker-radicale-server
* ⇢ ⇢ ⇢ docker-anki-sync-server
* ⇢ ⇢ ⇢ gorum
-* ⇢ ⇢ ⇢ guprecords
* ⇢ ⇢ ⇢ randomjournalpage
* ⇢ ⇢ ⇢ sway-autorotate
* ⇢ ⇢ ⇢ photoalbum
* ⇢ ⇢ ⇢ algorithms
* ⇢ ⇢ ⇢ geheim
-* ⇢ ⇢ ⇢ xerl
* ⇢ ⇢ ⇢ perl-c-fibonacci
+* ⇢ ⇢ ⇢ guprecords
* ⇢ ⇢ ⇢ ioriot
* ⇢ ⇢ ⇢ staticfarm-apache-handlers
* ⇢ ⇢ ⇢ dyndns
@@ -43,6 +44,7 @@ This page showcases my open source projects, providing an overview of what each
* ⇢ ⇢ ⇢ rubyfy
* ⇢ ⇢ ⇢ pingdomfetch
* ⇢ ⇢ ⇢ gotop
+* ⇢ ⇢ ⇢ xerl
* ⇢ ⇢ ⇢ debroid
* ⇢ ⇢ ⇢ fapi
* ⇢ ⇢ ⇢ template
@@ -65,47 +67,64 @@ This page showcases my open source projects, providing an overview of what each
## Overall Statistics
-* Total Projects: 55
-* Total Commits: 10,358
-* Total Lines of Code: 225,423
-* Total Lines of Documentation: 24,618
-* Languages: Java (25.1%), Go (19.3%), HTML (15.7%), C++ (10.0%), C (8.2%), C/C++ (6.5%), XML (5.4%), Shell (2.1%), Perl (1.9%), Config (1.7%), Ruby (1.3%), CSS (0.8%), Make (0.8%), JSON (0.3%), Python (0.3%), Haskell (0.3%), YAML (0.2%), TOML (0.1%)
-* Documentation: Text (46.9%), Markdown (39.2%), LaTeX (13.9%)
-
-Generated on: 2025-07-08
+* 📦 Total Projects: 55
+* 📊 Total Commits: 10,373
+* 📈 Total Lines of Code: 252,766
+* 📄 Total Lines of Documentation: 24,100
+* 💻 Languages: Java (22.4%), Go (17.5%), HTML (14.0%), C++ (8.9%), C (7.3%), Perl (6.3%), Shell (6.3%), C/C++ (5.8%), XML (4.7%), Config (1.5%), Ruby (1.1%), HCL (1.1%), Make (0.7%), Python (0.6%), CSS (0.6%), JSON (0.3%), Raku (0.3%), Haskell (0.2%), YAML (0.2%), TOML (0.1%)
+* 📚 Documentation: Text (47.5%), Markdown (38.3%), LaTeX (14.2%)
+* 🤖 AI-Assisted Projects: 8 out of 55 (14.5% AI-assisted, 85.5% human-only)
+* 🚀 Release Status: 31 released, 24 experimental (56.4% with releases, 43.6% experimental)
## Projects
### gitsyncer
-* Languages: Go (83.6%), Shell (14.0%), YAML (1.8%), JSON (0.6%)
-* Documentation: Markdown (100.0%)
-* Commits: 35
-* Lines of Code: 5314
-* Lines of Documentation: 2239
-* Development Period: 2025-06-23 to 2025-07-08
-* Recent Activity: 11.0 days (avg. age of last 42 commits)
-* License: BSD-2-Clause
+* 💻 Languages: Go (85.6%), Shell (12.3%), YAML (1.6%), JSON (0.5%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 50
+* 📈 Lines of Code: 6038
+* 📄 Lines of Documentation: 2239
+* 📅 Development Period: 2025-06-23 to 2025-07-08
+* 🔥 Recent Activity: 6.4 days (avg. age of last 42 commits)
+* ⚖️ License: BSD-2-Clause
+* 🏷️ Latest Release: v0.3.0 (2025-07-07)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
-GitSyncer is a comprehensive Git repository synchronization tool that automatically keeps repositories in sync across multiple hosting platforms like GitHub and Codeberg. It's particularly useful for developers who maintain the same repository on multiple platforms or want to create resilient backups of their code. The tool supports both individual repository sync and bulk operations to sync all public repositories from one platform to another, with intelligent branch management that never deletes branches but creates them as needed.
-The architecture follows a clean Go project structure with the core implementation handling repository cloning, remote management, and branch synchronization. It uses a JSON configuration file to define organizations and repositories, supports SSH backup locations with automatic bare repository creation, and includes features like branch exclusion patterns, dry-run mode, and merge conflict detection. The tool is designed to be resilient, with opt-in backup functionality that allows it to work normally even when backup servers are offline.
+GitSyncer is a cross-platform repository synchronization tool that automatically keeps Git repositories in sync across multiple hosting platforms like GitHub, Codeberg, and private SSH servers. It solves the common problem of maintaining consistent code across different Git hosting services by cloning repositories, adding all configured platforms as remotes, and continuously merging and pushing changes bidirectionally while handling branch creation and conflict detection.
+
+The tool is implemented in Go with a clean architecture that supports both individual repository syncing and bulk operations for public repositories. Key features include automatic repository creation, SSH backup locations for private servers, branch exclusion patterns, and an opt-in backup mode for resilient offline backups. It uses a JSON configuration file to define organizations and repositories, employs safe merge strategies that never delete branches, and provides comprehensive error handling for merge conflicts and missing repositories.
=> https://codeberg.org/snonux/gitsyncer View on Codeberg
=> https://github.com/snonux/gitsyncer View on GitHub
+Go from `internal/version/version.go`:
+
+```AUTO
+var (
+ Version = "0.4.0"
+
+ GitCommit = "unknown"
+
+ BuildDate = "unknown"
+```
+
---
### timr
-* Languages: Go (98.3%), YAML (1.7%)
-* Documentation: Markdown (100.0%)
-* Commits: 19
-* Lines of Code: 873
-* Lines of Documentation: 135
-* Development Period: 2025-06-25 to 2025-06-29
-* Recent Activity: 12.2 days (avg. age of last 42 commits)
-* License: BSD-2-Clause
+* 💻 Languages: Go (98.3%), YAML (1.7%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 19
+* 📈 Lines of Code: 873
+* 📄 Lines of Documentation: 135
+* 📅 Development Period: 2025-06-25 to 2025-06-29
+* 🔥 Recent Activity: 12.3 days (avg. age of last 42 commits)
+* ⚖️ License: BSD-2-Clause
+* 🧪 Status: Experimental (no releases yet)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
+
`timr` is a minimalist command-line time tracking tool written in Go that provides a simple stopwatch-style timer for tracking work sessions. It offers commands to start, stop, reset, and check the status of the timer, with all state persisted across sessions in `~/.config/timr/.timr_state`. The tool is particularly useful for developers and professionals who need to track time spent on tasks without the overhead of complex time-tracking applications.
@@ -114,18 +133,36 @@ The project is implemented using a clean modular architecture with the CLI entry
=> https://codeberg.org/snonux/timr View on Codeberg
=> https://github.com/snonux/timr View on GitHub
+Go from `internal/timer/timer.go`:
+
+```AUTO
+func GetStateFile() (string, error) {
+ if stateFilePathOverride != "" {
+ return stateFilePathOverride, nil
+ }
+ configDir, err := os.UserConfigDir()
+ if err != nil {
+ return "", err
+ }
+ return filepath.Join(configDir, "timr", stateFile), nil
+}
+```
+
---
### tasksamurai
-* Languages: Go (99.8%), YAML (0.2%)
-* Documentation: Markdown (100.0%)
-* Commits: 215
-* Lines of Code: 6160
-* Lines of Documentation: 162
-* Development Period: 2025-06-19 to 2025-07-08
-* Recent Activity: 12.6 days (avg. age of last 42 commits)
-* License: BSD-2-Clause
+* 💻 Languages: Go (99.8%), YAML (0.2%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 215
+* 📈 Lines of Code: 6160
+* 📄 Lines of Documentation: 162
+* 📅 Development Period: 2025-06-19 to 2025-07-08
+* 🔥 Recent Activity: 12.7 days (avg. age of last 42 commits)
+* ⚖️ License: BSD-2-Clause
+* 🏷️ Latest Release: v0.9.2 (2025-07-02)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
+
=> showcase/tasksamurai/image-1.png tasksamurai screenshot
@@ -138,18 +175,52 @@ The implementation follows a clean architecture with clear separation of concern
=> https://codeberg.org/snonux/tasksamurai View on Codeberg
=> https://github.com/snonux/tasksamurai View on GitHub
+Go from `cmd/tasksamurai/main.go`:
+
+```AUTO
+func main() {
+ debugLog := flag.String("debug-log", "", "path to debug log file")
+ browserCmd := flag.String("browser-cmd", "firefox", "command used to open URLs")
+ disco := flag.Bool("disco", false, "enable disco mode")
+ flag.Parse()
+
+ if err := task.SetDebugLog(*debugLog); err != nil {
+ fmt.Fprintln(os.Stderr, "failed to enable debug log:", err)
+ os.Exit(1)
+ }
+
+ m, err := ui.New(flag.Args(), *browserCmd)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, "failed to load tasks:", err)
+ os.Exit(1)
+ }
+
+ m.SetDisco(*disco)
+
+ fmt.Print("\033[H\033[2J")
+
+ p := tea.NewProgram(&m, tea.WithAltScreen())
+ if _, err := p.Run(); err != nil {
+ fmt.Fprintln(os.Stderr, "error running ui:", err)
+ os.Exit(1)
+ }
+}
+```
+
---
### rexfiles
-* Languages: Perl (34.8%), Shell (31.0%), Config (8.9%), CSS (8.7%), TOML (7.7%), Ruby (6.3%), Lua (1.9%), JSON (0.5%), INI (0.2%)
-* Documentation: Text (97.3%), Markdown (2.7%)
-* Commits: 871
-* Lines of Code: 3734
-* Lines of Documentation: 854
-* Development Period: 2021-12-28 to 2025-07-07
-* Recent Activity: 19.9 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (34.8%), Perl (32.9%), Config (8.4%), CSS (8.3%), TOML (7.3%), Ruby (6.0%), Lua (1.8%), JSON (0.5%), INI (0.2%)
+* 📚 Documentation: Text (97.3%), Markdown (2.7%)
+* 📊 Commits: 871
+* 📈 Lines of Code: 3947
+* 📄 Lines of Documentation: 854
+* 📅 Development Period: 2021-12-28 to 2025-07-07
+* 🔥 Recent Activity: 20.0 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
Based on my analysis of the codebase, **rexfiles** is a comprehensive infrastructure automation and configuration management project built with the Rex framework (a Perl-based alternative to Ansible, Puppet, or Chef). The project provides structured automation for managing multiple aspects of a personal infrastructure, including dotfiles, server configurations, and application deployments.
@@ -158,18 +229,29 @@ The project consists of three main components: **dotfiles** management for perso
=> https://codeberg.org/snonux/rexfiles View on Codeberg
=> https://github.com/snonux/rexfiles View on GitHub
+Shell from `frontends/scripts/sitestats.sh`:
+
+```AUTO
+STATSFILE=/tmp/sitestats.csv
+BOTSFILE=/tmp/sitebots.txt
+TOP=20
+```
+
---
### foo.zone
-* Languages: HTML (73.9%), XML (25.9%), CSS (0.2%)
-* Documentation: Text (91.8%), Markdown (8.2%)
-* Commits: 2892
-* Lines of Code: 42772
-* Lines of Documentation: 159
-* Development Period: 2021-04-29 to 2025-07-01
-* Recent Activity: 26.3 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: HTML (73.9%), XML (25.9%), CSS (0.2%)
+* 📚 Documentation: Text (91.8%), Markdown (8.2%)
+* 📊 Commits: 2892
+* 📈 Lines of Code: 42772
+* 📄 Lines of Documentation: 159
+* 📅 Development Period: 2021-04-29 to 2025-07-01
+* 🔥 Recent Activity: 26.3 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
+
This is **foo.zone**, a personal blog and technical website belonging to Paul Buetow, a Site Reliability Engineer based in Sofia, Bulgaria. The project is a static website that serves as a comprehensive platform for sharing technical knowledge, book notes, and personal experiences in the fields of system administration, DevOps, and programming.
@@ -178,18 +260,36 @@ The site is built using **Gemtexter**, a static site generator that creates both
=> https://codeberg.org/snonux/foo.zone View on Codeberg
=> https://github.com/snonux/foo.zone View on GitHub
+HTML from `gemfeed/2024-08-05-typing-127.1-words-per-minute.html`:
+
+```AUTO
+<span>Sometimes, there were brain farts, and I couldn&#39;t type at all. The trick was not to freak out about it, but to move on. If your average goes down a bit for a day, it doesn&#39;t matter; the long-term trend over several days and weeks matters, not the one-off wpm high score.</span><br />
+<br />
+<span>Although my wrist pain seemed to go away aftre the first week of using the Kinesis, my fingers became tired of adjusting to the new way of typing. My hands were stiff, as if I had been training for the Olympics. Only after three weeks did I start to feel comfortable with it. If it weren&#39;t for the comments I read online, I would have sent it back after week 2.</span><br />
+<br />
+<span>I also had a problem with the left pinky finger, where I could not comfortably reach the <span class='inlinecode'>p</span> key. This involved moving the whole hand. An easy fix was to swap <span class='inlinecode'>p</span> with <span class='inlinecode'>;</span> on the keyboard layout.</span><br />
+<br />
+<h2 style='display: inline' id='considering-alternate-layouts'>Considering alternate layouts</h2><br />
+<br />
+<span>As I was going to learn 10-finger touch typing from scratch, I also played with the thought of switching from the Qwerty to the Dvorak or Colemak keymap, but after reading some comments on the internet, I decided against it: </span><br />
+<br />
+```
+
---
### dtail
-* Languages: Go (94.0%), JSON (2.8%), C (2.0%), Make (0.5%), C/C++ (0.3%), Config (0.2%), Shell (0.1%), Docker (0.1%)
-* Documentation: Text (79.4%), Markdown (20.6%)
-* Commits: 1049
-* Lines of Code: 20088
-* Lines of Documentation: 5674
-* Development Period: 2020-01-09 to 2025-06-20
-* Recent Activity: 51.7 days (avg. age of last 42 commits)
-* License: Apache-2.0
+* 💻 Languages: Go (93.9%), JSON (2.8%), C (2.0%), Make (0.5%), C/C++ (0.3%), Config (0.2%), Shell (0.2%), Docker (0.1%)
+* 📚 Documentation: Text (79.4%), Markdown (20.6%)
+* 📊 Commits: 1049
+* 📈 Lines of Code: 20091
+* 📄 Lines of Documentation: 5674
+* 📅 Development Period: 2020-01-09 to 2025-06-20
+* 🔥 Recent Activity: 51.8 days (avg. age of last 42 commits)
+* ⚖️ License: Apache-2.0
+* 🏷️ Latest Release: v4.2.0 (2023-06-21)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
+
=> showcase/dtail/image-1.png dtail screenshot
@@ -202,18 +302,41 @@ The system uses a client-server architecture where dtail servers run on target m
=> https://codeberg.org/snonux/dtail View on Codeberg
=> https://github.com/snonux/dtail View on GitHub
+Go from `internal/server/filldates.go`:
+
+```AUTO
+func fillDates(str string) string {
+ yyyesterday := time.Now().Add(-3 * constants.DayDuration).Format("20060102")
+ str = strings.ReplaceAll(str, "$yyyesterday", yyyesterday)
+
+ yyesterday := time.Now().Add(-2 * constants.DayDuration).Format("20060102")
+ str = strings.ReplaceAll(str, "$yyesterday", yyesterday)
+
+ yesterday := time.Now().Add(-1 * constants.DayDuration).Format("20060102")
+ str = strings.ReplaceAll(str, "$yesterday", yesterday)
+
+ today := time.Now().Format("20060102")
+ str = strings.ReplaceAll(str, "$today", today)
+
+ tomorrow := time.Now().Add(1 * constants.DayDuration).Format("20060102")
+ return strings.ReplaceAll(str, "$tomorrow", tomorrow)
+}
+```
+
---
### wireguardmeshgenerator
-* Languages: Ruby (73.5%), YAML (26.5%)
-* Documentation: Markdown (100.0%)
-* Commits: 33
-* Lines of Code: 396
-* Lines of Documentation: 24
-* Development Period: 2025-04-18 to 2025-05-11
-* Recent Activity: 71.0 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Ruby (73.5%), YAML (26.5%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 33
+* 📈 Lines of Code: 396
+* 📄 Lines of Documentation: 24
+* 📅 Development Period: 2025-04-18 to 2025-05-11
+* 🔥 Recent Activity: 71.1 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.0.0 (2025-05-11)
+
WireGuard Mesh Generator is a Ruby-based automation tool that simplifies the creation and management of WireGuard mesh VPN networks across multiple hosts. It automatically generates WireGuard configuration files for each node in the mesh, handles cryptographic key generation and management (including public/private keys and preshared keys), and provides automated deployment to remote machines via SSH/SCP. The tool is particularly useful for setting up secure, encrypted mesh networks between multiple servers or devices, eliminating the manual overhead of configuring WireGuard connections between every pair of nodes.
@@ -222,38 +345,67 @@ The implementation uses a YAML configuration file to define the network topology
=> https://codeberg.org/snonux/wireguardmeshgenerator View on Codeberg
=> https://github.com/snonux/wireguardmeshgenerator View on GitHub
+Ruby from `wireguardmeshgenerator.rb`:
+
+```AUTO
+def priv = File.read(@privkey_path).strip
+
+def psk(peer)
+ psk_path = "#{@psk_dir}/#{[@myself, peer].sort.join('_')}.key"
+```
+
---
### ior
-* Languages: C (57.8%), Go (39.6%), Make (1.5%), C/C++ (1.2%)
-* Documentation: Text (84.1%), Markdown (15.9%)
-* Commits: 316
-* Lines of Code: 9307
-* Lines of Documentation: 559
-* Development Period: 2024-01-18 to 2025-06-14
-* Recent Activity: 83.1 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: C (54.7%), Go (37.4%), Raku (5.4%), Make (1.4%), C/C++ (1.1%)
+* 📚 Documentation: Text (84.1%), Markdown (15.9%)
+* 📊 Commits: 316
+* 📈 Lines of Code: 9835
+* 📄 Lines of Documentation: 559
+* 📅 Development Period: 2024-01-18 to 2025-06-14
+* 🔥 Recent Activity: 83.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
+
+=> showcase/ior/image-1.png ior screenshot
-**I/O Riot NG (ior)** is a Linux-only system performance analysis tool that uses eBPF (Extended Berkeley Packet Filter) to trace and analyze synchronous I/O system calls in real-time. The tool captures detailed timing information for I/O operations and generates flamegraphs to visualize performance bottlenecks, making it particularly useful for identifying slow I/O patterns and understanding where applications spend time waiting for disk operations. This is a spiritual successor to the original I/O Riot project, reimplemented using modern Go and eBPF technology instead of the older SystemTap approach.
+Based on my analysis of the codebase, here's a comprehensive summary of the I/O Riot NG (ior) project:
-The implementation follows a hybrid architecture combining Go for the userspace application logic and C for the eBPF kernel programs. The tool attaches to kernel tracepoints for various syscalls (like `sys_enter_read`, `sys_exit_write`, etc.), collects timing data through eBPF ring buffers, and processes this data in userspace to generate collapsed stack traces suitable for flamegraph visualization using the Inferno flamegraph tool. The codebase is well-structured with separate packages for event handling, flamegraph generation, file operations, and BPF program management, making it a comprehensive solution for I/O performance analysis.
+=> showcase/ior/image-2.svg ior screenshot
+
+**I/O Riot NG** is a Linux-based performance monitoring tool that uses eBPF (extended Berkeley Packet Filter) to trace synchronous I/O system calls and analyze their execution times. This tool is particularly valuable for system performance analysis, allowing developers and system administrators to visualize I/O bottlenecks through detailed flamegraphs. It serves as a modern successor to the original I/O Riot project, migrating from SystemTap/C to a Go/C/BPF implementation for better performance and maintainability.
+
+The architecture combines kernel-level tracing with user-space analysis: eBPF programs (`internal/c/ior.bpf.c`) attach to kernel tracepoints to capture syscall entry/exit events, which are then processed by a Go-based event loop (`internal/eventloop.go`) that correlates enter/exit pairs, tracks file descriptors, and measures timing. The tool can operate in real-time mode for live monitoring or post-processing mode to generate flamegraphs from previously collected data using the Inferno flamegraph library. Key features include filtering capabilities for specific processes or file patterns, comprehensive statistics collection, and support for various I/O syscalls like open, read, write, close, and dup operations.
=> https://codeberg.org/snonux/ior View on Codeberg
=> https://github.com/snonux/ior View on GitHub
+C from `internal/c/maps.h`:
+
+```AUTO
+struct {
+ __uint(type, BPF_MAP_TYPE_RINGBUF);
+ __uint(max_entries, 1 << 24);
+} event_map SEC(".maps");
+```
+
---
### ds-sim
-* Languages: Java (98.9%), Shell (0.6%), CSS (0.5%)
-* Documentation: Markdown (98.7%), Text (1.3%)
-* Commits: 438
-* Lines of Code: 25762
-* Lines of Documentation: 3101
-* Development Period: 2008-05-15 to 2025-06-27
-* Recent Activity: 84.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Java (98.9%), Shell (0.6%), CSS (0.5%)
+* 📚 Documentation: Markdown (98.7%), Text (1.3%)
+* 📊 Commits: 438
+* 📈 Lines of Code: 25762
+* 📄 Lines of Documentation: 3101
+* 📅 Development Period: 2008-05-15 to 2025-06-27
+* 🔥 Recent Activity: 84.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
+
=> showcase/ds-sim/image-1.png ds-sim screenshot
@@ -264,18 +416,32 @@ The project is built on an event-driven architecture with clear component separa
=> https://codeberg.org/snonux/ds-sim View on Codeberg
=> https://github.com/snonux/ds-sim View on GitHub
+Java from `src/main/java/testing/LogType.java`:
+
+```AUTO
+public enum LogType {
+ GLOBAL,
+
+ PROCESS,
+
+ SYSTEM
+}
+```
+
---
### sillybench
-* Languages: Go (90.9%), Shell (9.1%)
-* Documentation: Markdown (100.0%)
-* Commits: 5
-* Lines of Code: 33
-* Lines of Documentation: 3
-* Development Period: 2025-04-03 to 2025-04-03
-* Recent Activity: 96.9 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Go (90.9%), Shell (9.1%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 5
+* 📈 Lines of Code: 33
+* 📄 Lines of Documentation: 3
+* 📅 Development Period: 2025-04-03 to 2025-04-03
+* 🔥 Recent Activity: 97.0 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
**SillyBench** is a simple Go benchmarking project designed to compare CPU performance between FreeBSD and Linux Bhyve VM environments. The project implements basic mathematical operations (integer multiplication and floating-point arithmetic) to measure computational performance differences across different operating systems and virtualization setups.
@@ -284,18 +450,29 @@ The implementation is minimal and focused, consisting of a basic Go module with
=> https://codeberg.org/snonux/sillybench View on Codeberg
=> https://github.com/snonux/sillybench View on GitHub
+Go from `main.go`:
+
+```AUTO
+func main() {
+ println("Hello world")
+}
+```
+
---
### gos
-* Languages: Go (98.6%), YAML (1.1%), JSON (0.2%)
-* Documentation: Markdown (100.0%)
-* Commits: 381
-* Lines of Code: 3967
-* Lines of Documentation: 411
-* Development Period: 2024-05-04 to 2025-06-12
-* Recent Activity: 113.9 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Go (98.6%), YAML (1.1%), JSON (0.2%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 381
+* 📈 Lines of Code: 3967
+* 📄 Lines of Documentation: 411
+* 📅 Development Period: 2024-05-04 to 2025-06-12
+* 🔥 Recent Activity: 113.9 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.0.0 (2025-03-04)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
+
=> showcase/gos/image-1.png gos screenshot
@@ -308,18 +485,30 @@ The tool is architected around a file-based queueing system where posts progress
=> https://codeberg.org/snonux/gos View on Codeberg
=> https://github.com/snonux/gos View on GitHub
+Go from `internal/table/table.go`:
+
+```AUTO
+func (t *Table) MustRender() {
+ if err := t.Render(); err != nil {
+ panic(err)
+ }
+}
+```
+
---
### foostats
-* Languages: Perl (100.0%)
-* Documentation: Markdown (85.1%), Text (14.9%)
-* Commits: 67
-* Lines of Code: 1299
-* Lines of Documentation: 154
-* Development Period: 2023-01-02 to 2025-07-07
-* Recent Activity: 133.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Perl (100.0%)
+* 📚 Documentation: Markdown (85.1%), Text (14.9%)
+* 📊 Commits: 67
+* 📈 Lines of Code: 1299
+* 📄 Lines of Documentation: 154
+* 📅 Development Period: 2023-01-02 to 2025-07-07
+* 🔥 Recent Activity: 133.5 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
+
Based on the README and project structure, **foostats** is a privacy-respecting web analytics tool written in Perl specifically designed for OpenBSD systems. It processes both traditional HTTP/HTTPS logs and Gemini protocol logs to generate comprehensive traffic statistics while maintaining visitor privacy through SHA3-512 IP hashing. The tool is built for the foo.zone ecosystem and similar sites that need analytics without compromising user privacy.
@@ -328,18 +517,30 @@ The project implements a modular architecture with seven core components: FileHe
=> https://codeberg.org/snonux/foostats View on Codeberg
=> https://github.com/snonux/foostats View on GitHub
+Perl from `foostats.pl`:
+
+```AUTO
+my sub parse_date ( $year, @line ) {
+ my $timestr = "$line[0] $line[1]";
+ return Time::Piece->strptime( $timestr, '%b %d' )
+ ->strftime("$year%m%d");
+}
+```
+
---
### rcm
-* Languages: Ruby (99.8%), TOML (0.2%)
-* Documentation: Markdown (100.0%)
-* Commits: 76
-* Lines of Code: 1373
-* Lines of Documentation: 48
-* Development Period: 2024-12-05 to 2025-02-28
-* Recent Activity: 137.6 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Ruby (99.8%), TOML (0.2%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 76
+* 📈 Lines of Code: 1373
+* 📄 Lines of Documentation: 48
+* 📅 Development Period: 2024-12-05 to 2025-02-28
+* 🔥 Recent Activity: 137.7 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
+
RCM (Ruby Configuration Management) is a lightweight, KISS (Keep It Simple, Stupid) configuration management system written in Ruby and designed for personal use. The project provides a domain-specific language (DSL) for declaratively managing system configuration, including files, directories, symlinks, and packages. It serves as an alternative to more complex configuration management tools like Ansible or Puppet, focusing on simplicity and ease of use for individual system administration tasks.
@@ -348,18 +549,32 @@ The system is implemented with a modular architecture centered around a DSL clas
=> https://codeberg.org/snonux/rcm View on Codeberg
=> https://github.com/snonux/rcm View on GitHub
+Ruby from `lib/dslkeywords/given.rb`:
+
+```AUTO
+def respond_to_missing? = true
+
+def met?
+ return false if @conds.key?(:hostname) && Socket.gethostname != @conds[:hostname].to_s
+
+ true
+end
+```
+
---
### gemtexter
-* Languages: Shell (64.6%), CSS (31.8%), Config (2.1%), HTML (1.5%)
-* Documentation: Text (76.8%), Markdown (23.2%)
-* Commits: 461
-* Lines of Code: 2047
-* Lines of Documentation: 1170
-* Development Period: 2021-05-21 to 2025-06-11
-* Recent Activity: 230.4 days (avg. age of last 42 commits)
-* License: GPL-3.0
+* 💻 Languages: Shell (67.9%), CSS (28.9%), Config (2.0%), HTML (1.3%)
+* 📚 Documentation: Text (76.8%), Markdown (23.2%)
+* 📊 Commits: 461
+* 📈 Lines of Code: 2253
+* 📄 Lines of Documentation: 1170
+* 📅 Development Period: 2021-05-21 to 2025-06-11
+* 🔥 Recent Activity: 230.5 days (avg. age of last 42 commits)
+* ⚖️ License: GPL-3.0
+* 🏷️ Latest Release: 3.0.0 (2024-10-01)
+
**Gemtexter** is a static site generator and blog engine that transforms content written in Gemini Gemtext format into multiple output formats. It's a comprehensive Bash-based tool designed to support the Gemini protocol (a simpler alternative to HTTP) while maintaining compatibility with traditional web technologies. The project converts a single source of Gemtext content into HTML (XHTML 1.0 Transitional), Markdown, and native Gemtext formats, enabling authors to write once and publish across multiple platforms including Gemini capsules, traditional websites, and GitHub/Codeberg pages.
@@ -368,18 +583,35 @@ The implementation is built entirely in Bash (version 5.x+) using a modular libr
=> https://codeberg.org/snonux/gemtexter View on Codeberg
=> https://github.com/snonux/gemtexter View on GitHub
+Shell from `lib/git.source.sh`:
+
+```AUTO
+ find "$CONTENT_BASE_DIR" -maxdepth 1 -mindepth 1 -type d |
+ while read -r content_dir; do
+ if [ -d "$content_dir/.git" ]; then
+ echo "$content_dir"
+ fi
+ done
+}
+
+git::add_all () {
+ local message="$1"; shift
+```
+
---
### quicklogger
-* Languages: Go (97.6%), Shell (1.5%), TOML (0.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 32
-* Lines of Code: 917
-* Lines of Documentation: 33
-* Development Period: 2024-01-20 to 2025-07-06
-* Recent Activity: 447.6 days (avg. age of last 42 commits)
-* License: MIT
+* 💻 Languages: Go (97.6%), Shell (1.5%), TOML (0.9%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 32
+* 📈 Lines of Code: 917
+* 📄 Lines of Documentation: 33
+* 📅 Development Period: 2024-01-20 to 2025-07-06
+* 🔥 Recent Activity: 447.7 days (avg. age of last 42 commits)
+* ⚖️ License: MIT
+* 🏷️ Latest Release: v0.0.3 (2025-07-06)
+
=> showcase/quicklogger/image-1.png quicklogger screenshot
@@ -392,18 +624,62 @@ The project follows a clean, single-file architecture with all functionality con
=> https://codeberg.org/snonux/quicklogger View on Codeberg
=> https://github.com/snonux/quicklogger View on GitHub
+Go from `main.go`:
+
+```AUTO
+func createPreferenceWindow(a fyne.App) fyne.Window {
+ window := a.NewWindow("Preferences")
+ directoryPreference := widget.NewEntry()
+ directoryPreference.SetText(a.Preferences().StringWithFallback("Directory", defaultDirectory))
+
+ tagDropdownPreference := widget.NewEntry()
+ tagDropdownPreference.SetText(a.Preferences().StringWithFallback("Tags", strings.Join(defaultTagItems, ",")))
+
+ whatDropdownPreference := widget.NewEntry()
+ whatDropdownPreference.SetText(a.Preferences().StringWithFallback("Whats", strings.Join(defaultWhatItems, ",")))
+
+ window.SetContent(container.NewVBox(
+ container.NewVBox(
+ widget.NewLabel("Directory:"),
+ directoryPreference,
+ widget.NewLabel("Tags:"),
+ tagDropdownPreference,
+ widget.NewLabel("Whats:"),
+ whatDropdownPreference,
+ ),
+ container.NewHBox(
+ widget.NewButton("Save", func() {
+ a.Preferences().SetString("Directory", directoryPreference.Text)
+ a.Preferences().SetString("Tags", tagDropdownPreference.Text)
+ a.Preferences().SetString("Whats", whatDropdownPreference.Text)
+ window.Hide()
+ }),
+ widget.NewButton("Reset dropdowns", func() {
+ tagDropdownPreference.SetText(strings.Join(defaultTagItems, ","))
+ whatDropdownPreference.SetText(strings.Join(defaultWhatItems, ","))
+ },
+ ),
+ )))
+ window.Resize(windowSize)
+
+ return window
+}
+```
+
---
### docker-gpodder-sync-server
-* Languages: Make (100.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 3
-* Lines of Code: 12
-* Lines of Documentation: 3
-* Development Period: 2024-03-24 to 2024-03-24
-* Recent Activity: 471.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Make (100.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 12
+* 📄 Lines of Documentation: 3
+* 📅 Development Period: 2024-03-24 to 2024-03-24
+* 🔥 Recent Activity: 471.5 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
+
This project is a **Docker containerization wrapper for a GPodder sync server**, specifically built around the micro-gpodder-server implementation from https://github.com/bohwaz/micro-gpodder-server. GPodder is a podcast client that allows users to synchronize their podcast subscriptions and episode states across multiple devices. The sync server enables this synchronization by providing a centralized service that podcast clients can connect to for managing subscriptions, episode progress, and playback history.
@@ -412,18 +688,35 @@ The project is implemented as a simple Docker build system with a Makefile that
=> https://codeberg.org/snonux/docker-gpodder-sync-server View on Codeberg
=> https://github.com/snonux/docker-gpodder-sync-server View on GitHub
+Make from `Makefile`:
+
+```AUTO
+build:
+ docker build -t micro-gpodder-server ./micro-gpodder-server
+run: build
+ if [ ! -d ./data ]; then mkdir ./data; fi
+ docker run \
+ --name micro-gpodder-server \
+ -v ./data:/var/www/server/data \
+ --hostname gpodder.example.org \
+ -p 8080:8080 micro-gpodder-server
+aws: build
+```
+
---
### terraform
-* Languages: Make (56.1%), YAML (43.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 123
-* Lines of Code: 98
-* Lines of Documentation: 52
-* Development Period: 2023-08-27 to 2025-04-05
-* Recent Activity: 501.5 days (avg. age of last 42 commits)
-* License: MIT
+* 💻 Languages: HCL (96.6%), Make (1.9%), YAML (1.5%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 123
+* 📈 Lines of Code: 2850
+* 📄 Lines of Documentation: 52
+* 📅 Development Period: 2023-08-27 to 2025-04-05
+* 🔥 Recent Activity: 501.5 days (avg. age of last 42 commits)
+* ⚖️ License: MIT
+* 🧪 Status: Experimental (no releases yet)
+
This is a comprehensive personal cloud infrastructure project built with Terraform that deploys a multi-tier AWS architecture for hosting self-hosted services. The infrastructure is organized into modular components: `org-buetow-base` provides the foundation (VPC, subnets, EFS storage, ECR), `org-buetow-bastion` creates a bastion host for secure access, `org-buetow-elb` sets up application load balancing, and `org-buetow-ecs` runs containerized services on AWS Fargate. The project also includes an EKS cluster option with EFS CSI driver integration for Kubernetes workloads.
@@ -432,18 +725,36 @@ The system is designed to host multiple personal services including Anki sync se
=> https://codeberg.org/snonux/terraform View on Codeberg
=> https://github.com/snonux/terraform View on GitHub
+HCL from `org-buetow-eks/remotestates.tf`:
+
+```AUTO
+data "terraform_remote_state" "base" {
+ backend = "s3"
+ config = {
+ bucket = "org-buetow-tfstate"
+ key = "org-buetow-base/terraform.tfstate"
+ region = "eu-central-1"
+ }
+}
+
+data "terraform_remote_state" "elb" {
+```
+
---
### gogios
-* Languages: Go (94.4%), YAML (3.4%), JSON (2.2%)
-* Documentation: Markdown (100.0%)
-* Commits: 77
-* Lines of Code: 1096
-* Lines of Documentation: 287
-* Development Period: 2023-04-17 to 2025-06-12
-* Recent Activity: 514.3 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Go (94.4%), YAML (3.4%), JSON (2.2%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 77
+* 📈 Lines of Code: 1096
+* 📄 Lines of Documentation: 287
+* 📅 Development Period: 2023-04-17 to 2025-06-12
+* 🔥 Recent Activity: 514.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.1.0 (2024-05-03)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
+
=> showcase/gogios/image-1.png gogios screenshot
@@ -454,18 +765,30 @@ The implementation follows a clean architecture with concurrent check execution,
=> https://codeberg.org/snonux/gogios View on Codeberg
=> https://github.com/snonux/gogios View on GitHub
+Go from `internal/state.go`:
+
+```AUTO
+func (s state) reportStaleAlerts(sb *strings.Builder) int {
+ return s.reportBy(sb, false, true, func(cs checkState) bool {
+ return cs.Epoch < s.staleEpoch
+ })
+}
+```
+
---
### docker-radicale-server
-* Languages: Docker (53.1%), Make (46.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 4
-* Lines of Code: 32
-* Lines of Documentation: 3
-* Development Period: 2023-12-31 to 2023-12-31
-* Recent Activity: 555.0 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Docker (53.1%), Make (46.9%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 4
+* 📈 Lines of Code: 32
+* 📄 Lines of Documentation: 3
+* 📅 Development Period: 2023-12-31 to 2023-12-31
+* 🔥 Recent Activity: 555.1 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
This project is a **Docker containerization setup for Radicale**, a CalDAV and CardDAV server written in Python. Radicale is a lightweight, standards-compliant calendar and contacts server that allows users to synchronize their calendars and address books across multiple devices and applications. The project provides a complete Docker image and deployment configuration that makes it easy to run a personal or small-team calendar/contacts server.
@@ -474,18 +797,35 @@ The implementation uses Alpine Linux as the base image for a minimal footprint,
=> https://codeberg.org/snonux/docker-radicale-server View on Codeberg
=> https://github.com/snonux/docker-radicale-server View on GitHub
+Make from `Makefile`:
+
+```AUTO
+build:
+ docker build -t radicale .
+run: build
+ if [ ! -d collections ]; then mkdir collections; fi
+ if [ ! -d auth ]; then mkdir auth; fi
+ cp -v htpasswd-test auth/htpasswd
+ sh -c 'docker rm radicale; exit 0'
+ docker run \
+ -v collections:/collections \
+ -v auth:/auth \
+```
+
---
### docker-anki-sync-server
-* Languages: Docker (62.1%), Make (37.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 3
-* Lines of Code: 29
-* Lines of Documentation: 3
-* Development Period: 2023-08-13 to 2024-01-01
-* Recent Activity: 648.2 days (avg. age of last 42 commits)
-* License: MIT
+* 💻 Languages: Docker (62.1%), Make (37.9%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 29
+* 📄 Lines of Documentation: 3
+* 📅 Development Period: 2023-08-13 to 2024-01-01
+* 🔥 Recent Activity: 648.3 days (avg. age of last 42 commits)
+* ⚖️ License: MIT
+* 🧪 Status: Experimental (no releases yet)
+
This project is a Docker containerization of the Anki sync server, designed to provide a self-hosted synchronization service for Anki flashcard applications. Anki is a popular spaced repetition learning tool, and this project allows users to run their own sync server instead of relying on AnkiWeb's hosted service, giving them full control over their data privacy and synchronization infrastructure.
@@ -494,18 +834,35 @@ The implementation is built using a Rocky Linux base image with Python 3.9, and
=> https://codeberg.org/snonux/docker-anki-sync-server View on Codeberg
=> https://github.com/snonux/docker-anki-sync-server View on GitHub
+Make from `Makefile`:
+
+```AUTO
+all:
+ if [ ! -d anki-sync-server ]; then \
+ git clone https://github.com/ankicommunity/anki-sync-server; \
+ else \
+ cd anki-sync-server && git pull && cd ..; \
+ fi
+ docker build -t anki-sync-server:latest .
+aws:
+ docker build -t anki-sync-server:latest .
+ docker tag anki-sync-server:latest 634617747016.dkr.ecr.eu-central-1.amazonaws.com/anki-sync-server:latest
+```
+
---
### gorum
-* Languages: Go (91.3%), JSON (6.4%), YAML (2.3%)
-* Documentation: Markdown (100.0%)
-* Commits: 82
-* Lines of Code: 1525
-* Lines of Documentation: 15
-* Development Period: 2023-04-17 to 2023-11-19
-* Recent Activity: 700.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Go (91.3%), JSON (6.4%), YAML (2.3%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 82
+* 📈 Lines of Code: 1525
+* 📄 Lines of Documentation: 15
+* 📅 Development Period: 2023-04-17 to 2023-11-19
+* 🔥 Recent Activity: 700.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
+
Gorum is a minimalistic distributed quorum manager written in Go that implements a leader election and consensus mechanism across multiple nodes in a network. The system enables nodes to continuously vote for which node should be the leader based on priority scores, with automatic failover when nodes become unavailable. It's particularly useful for distributed systems that need to maintain a single authoritative node while providing high availability and fault tolerance.
@@ -514,37 +871,57 @@ The architecture consists of several key components: a quorum manager that handl
=> https://codeberg.org/snonux/gorum View on Codeberg
=> https://github.com/snonux/gorum View on GitHub
----
-
-### guprecords
-
-* Documentation: Markdown (100.0%)
-* Commits: 95
-* Lines of Code: 0
-* Lines of Documentation: 416
-* Development Period: 2013-03-22 to 2025-05-18
-* Recent Activity: 750.4 days (avg. age of last 42 commits)
-* License: No license found
-
-`guprecords` is a Raku-based command-line tool that analyzes and reports on system uptime statistics across multiple hosts. It reads uptime records from the `uptimed` daemon and generates comprehensive reports that help system administrators track host reliability and performance across their infrastructure.
-
-The tool is particularly useful for organizations managing multiple servers, as it provides a unified view of system uptime patterns. It parses raw uptime records (containing uptime duration, boot time, and OS information) from files collected from the `uptimed` daemon running on various hosts. The implementation uses an object-oriented design with classes for data aggregation (`Aggregator`, `Aggregate`, `HostAggregate`) and report generation (`Reporter`, `HostReporter`). It supports multiple analysis categories (Host, Kernel versions, OS families) and metrics (boot count, uptime, downtime, lifespan, and a composite score), with output in plaintext, Markdown, or Gemtext formats. The tool includes comprehensive testing with fixture files and can generate individual reports or complete analysis suites, making it valuable for infrastructure monitoring and capacity planning.
-
-=> https://codeberg.org/snonux/guprecords View on Codeberg
-=> https://github.com/snonux/guprecords View on GitHub
+Go from `internal/client/tcpclient.go`:
+
+```AUTO
+func tcpClientRun(ctx context.Context, address string, ch <-chan vote.Vote) error {
+ conn, err := net.Dial("tcp", address)
+ if err != nil {
+ return err
+ }
+ defer conn.Close()
+
+ for {
+ votes, ok := <-ch
+ if !ok {
+ return fmt.Errorf("channel closed - breaking tcpClientRun loop")
+ }
+
+ message, err := votes.ToJSON()
+ if err != nil {
+ return err
+ }
+
+ log.Println("tcpclient: sending", message, "to address", address)
+ if err := iorw.WriteStr(conn, message); err != nil {
+ return err
+ }
+
+ response, err := iorw.ReadStr(conn)
+ if err != nil {
+ return err
+ }
+
+ log.Println("tcpclient: received", response, "from address", address)
+ }
+}
+```
---
### randomjournalpage
-* Languages: Shell (94.1%), Make (5.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 8
-* Lines of Code: 51
-* Lines of Documentation: 26
-* Development Period: 2022-06-02 to 2024-04-20
-* Recent Activity: 765.1 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (94.1%), Make (5.9%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 8
+* 📈 Lines of Code: 51
+* 📄 Lines of Documentation: 26
+* 📅 Development Period: 2022-06-02 to 2024-04-20
+* 🔥 Recent Activity: 765.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**Random Journal Page** is a personal utility script designed to help with journal reflection and review. The project randomly selects a PDF file from a collection of scanned bullet journals and extracts a random set of pages (42 by default) to create a smaller PDF for reading and reflection. This is particularly useful for revisiting past thoughts, book notes, and ideas that were written down over time.
@@ -553,18 +930,30 @@ The implementation is straightforward - a bash script that uses `find` to locate
=> https://codeberg.org/snonux/randomjournalpage View on Codeberg
=> https://github.com/snonux/randomjournalpage View on GitHub
+Shell from `randomjournalpage.sh`:
+
+```AUTO
+declare -r ARG="$1"
+
+declare -r JOURNAL_DIR="$HOME/Journals/"
+declare -r OUT_PDF=$JOURNAL_DIR/random_journal_extract.pdf
+declare -i NUM_PAGES_TO_EXTRACT=42 # This is the answear!
+```
+
---
### sway-autorotate
-* Languages: Shell (100.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 8
-* Lines of Code: 41
-* Lines of Documentation: 17
-* Development Period: 2020-01-30 to 2025-04-30
-* Recent Activity: 1058.6 days (avg. age of last 42 commits)
-* License: GPL-3.0
+* 💻 Languages: Shell (100.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 8
+* 📈 Lines of Code: 41
+* 📄 Lines of Documentation: 17
+* 📅 Development Period: 2020-01-30 to 2025-04-30
+* 🔥 Recent Activity: 1058.7 days (avg. age of last 42 commits)
+* ⚖️ License: GPL-3.0
+* 🧪 Status: Experimental (no releases yet)
+
**sway-autorotate** is a bash script for automatic screen rotation on tablets running the Sway window manager. It's specifically designed for touch-enabled devices like the Microsoft Surface Go 2 tablet, addressing the common need for automatic screen orientation changes when the device is physically rotated. The project is particularly useful for tablet users who frequently switch between portrait and landscape orientations, as it eliminates the need to manually rotate the display through system settings.
@@ -573,18 +962,33 @@ The implementation consists of two main components: `autorotate.sh` monitors the
=> https://codeberg.org/snonux/sway-autorotate View on Codeberg
=> https://github.com/snonux/sway-autorotate View on GitHub
+Shell from `autorotate.sh`:
+
+```AUTO
+set -euf -o pipefail
+
+declare -r WAYLANDINPUT=(
+ '1118:2485:Microsoft_Surface_Keyboard_Touchpad'
+ '1267:10780:ELAN9038:00_04F3:2A1C'
+)
+declare -r SCREEN=eDP-1
+```
+
---
### photoalbum
-* Languages: Shell (80.1%), Make (12.3%), Config (7.6%)
-* Documentation: Markdown (100.0%)
-* Commits: 153
-* Lines of Code: 342
-* Lines of Documentation: 39
-* Development Period: 2011-11-19 to 2022-04-02
-* Recent Activity: 1278.2 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (80.1%), Make (12.3%), Config (7.6%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 153
+* 📈 Lines of Code: 342
+* 📄 Lines of Documentation: 39
+* 📅 Development Period: 2011-11-19 to 2022-04-02
+* 🔥 Recent Activity: 1278.3 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.5.0 (2022-02-21)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
PhotoAlbum is a minimal Bash script for Unix-like systems that generates static web photo albums from directories of images. It creates pure HTML+CSS galleries without JavaScript, making them lightweight and universally compatible. The tool is designed for simplicity and portability - users point it at a directory of photos, configure basic settings like thumbnail size and gallery title, and it automatically generates a complete static website with image previews, navigation, and optional download archives.
@@ -593,38 +997,73 @@ The implementation centers around a single Bash script (`photoalbum.sh`) that us
=> https://codeberg.org/snonux/photoalbum View on Codeberg
=> https://github.com/snonux/photoalbum View on GitHub
+Shell from `src/photoalbum.sh`:
+
+```AUTO
+ for sub in thumbs blurs photos; do
+ if [ -f "$DIST_DIR/$sub/$basename" ]; then
+ rm -v "$DIST_DIR/$sub/$basename"
+ fi
+ done
+ done
+}
+
+scalephotos () {
+ cd "$INCOMING_DIR" && find ./ -maxdepth 1 -type f | sort |
+ while read -r photo; do
+ declare photo="$(sed 's#^\./##' <<< "$photo")"
+ declare destphoto="$DIST_DIR/photos/$photo"
+ declare destphoto_nospace="${destphoto// /_}"
+```
+
---
### algorithms
-* Languages: Go (99.2%), Make (0.8%)
-* Documentation: Markdown (100.0%)
-* Commits: 82
-* Lines of Code: 1728
-* Lines of Documentation: 18
-* Development Period: 2020-07-12 to 2023-04-09
-* Recent Activity: 1429.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Go (99.2%), Make (0.8%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 82
+* 📈 Lines of Code: 1728
+* 📄 Lines of Documentation: 18
+* 📅 Development Period: 2020-07-12 to 2023-04-09
+* 🔥 Recent Activity: 1429.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
-This is a comprehensive Go algorithms library that implements fundamental data structures and algorithms for educational purposes. The project serves as a practical implementation of computer science concepts, likely created as exercises from an algorithms course or as a reference implementation for learning purposes.
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-The library is organized into four main packages: **sorting algorithms** (including quicksort, mergesort, insertion sort, and parallel variants), **search structures** (binary search trees, red-black trees, hash tables, and sets), **priority queues** (both elementary and heap-based implementations), and **data structures** (array lists with generic type support). The implementation leverages Go's generics system to provide type-safe, reusable algorithms that work with any numeric type. The project includes comprehensive unit tests and benchmarking capabilities, making it useful for both learning algorithm concepts and comparing performance characteristics of different implementations.
+This is a comprehensive Go-based algorithms and data structures educational project that implements fundamental computer science concepts for learning and practice. The codebase is organized into four main packages: data structures (`ds`), sorting algorithms (`sort`), search algorithms (`search`), and priority queues (`queue`), with extensive test coverage and benchmarking capabilities.
+
+The project leverages Go's generics system to provide type-safe implementations of classic algorithms like quicksort, mergesort, binary search trees, red-black trees, and hash tables. It includes both elementary and advanced implementations (parallel sorting, various priority queue implementations) and appears to be designed as educational material for an algorithms course. The architecture emphasizes clean separation of concerns with shared type definitions, comprehensive testing via `make test`, and performance analysis through `make bench`, making it a valuable resource for understanding algorithmic complexity and implementation patterns in Go.
=> https://codeberg.org/snonux/algorithms View on Codeberg
=> https://github.com/snonux/algorithms View on GitHub
+Go from `queue/heappriority.go`:
+
+```AUTO
+func (q *HeapPriority[T]) swim(k int) {
+ for k > 1 && q.a[k/2] < q.a[k] {
+ q.a.Swap(k/2, k)
+ k = k / 2
+ }
+}
+```
+
---
### geheim
-* Languages: Ruby (100.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 66
-* Lines of Code: 671
-* Lines of Documentation: 19
-* Development Period: 2018-05-26 to 2025-01-21
-* Recent Activity: 1431.2 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Ruby (100.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 66
+* 📈 Lines of Code: 671
+* 📄 Lines of Documentation: 19
+* 📅 Development Period: 2018-05-26 to 2025-01-21
+* 🔥 Recent Activity: 1431.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
Based on my analysis of the project, here's a concise summary:
@@ -635,60 +1074,99 @@ The system is architected around several key components: a configuration system
=> https://codeberg.org/snonux/geheim View on Codeberg
=> https://github.com/snonux/geheim View on GitHub
+Ruby from `geheim.rb`:
+
+```AUTO
+def out(message, prefix, flag = :none)
+ message = message.to_s unless message.instance_of?(String)
+ message.split("\n").each do |line|
+ if flag == :nonl
+ print "#{prefix} #{line}"
+```
+
---
-### xerl
+### perl-c-fibonacci
-* Languages: CSS (54.6%), XML (39.1%), Perl (4.0%), Make (2.2%)
-* Documentation: Text (91.2%), Org (4.9%), Markdown (3.9%)
-* Commits: 670
-* Lines of Code: 815
-* Lines of Documentation: 102
-* Development Period: 2011-03-06 to 2021-11-02
-* Recent Activity: 1847.8 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: C (80.4%), Make (19.6%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 4
+* 📈 Lines of Code: 51
+* 📄 Lines of Documentation: 69
+* 📅 Development Period: 2014-03-24 to 2022-04-23
+* 🔥 Recent Activity: 1910.4 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
-Based on my analysis of the project files, here's a summary of Xerl:
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-**Xerl** is an open-source website template engine with Content Management System (CMS) features, written in object-oriented Perl and powered by FastCGI. It uses XML-based configuration and content files to generate static websites with multiple output formats (HTML5, XHTML, RSS feeds, and plain text).
+This project is a fascinating polyglot programming experiment that demonstrates how a single source file can be valid code in multiple programming languages simultaneously. The core file `fibonacci.pl.raku.c` is cleverly written to be syntactically valid in C, C++, Perl, and Raku, all while implementing the same Fibonacci sequence calculation. It achieves this through strategic use of C preprocessor macros that redefine Perl/Raku-style syntax (like `my`, `sub`, `BEGIN`) into valid C constructs, while the actual logic remains readable in both paradigms.
-The system works through a template-driven architecture where content is written in XML files with semantic tags (like `<pagetitle>`, `<text>`, `<enumeration>`) that get transformed into HTML using configurable transformation rules. The `config.xml` file defines how these semantic tags map to HTML elements, supporting variables and dynamic content insertion. Each website can have its own template configuration, content files, and static assets (CSS, images, fonts), making it useful for maintaining multiple related websites with consistent styling and structure while allowing customization per site. The project includes several example sites (paul.buetow.org, xerl.buetow.org) and redirect configurations, demonstrating its practical use for personal or organizational web presence management.
+The project is useful as an educational tool for understanding language syntax similarities, demonstrating advanced preprocessor techniques, and showcasing creative programming approaches. The implementation uses a recursive Fibonacci algorithm with a global variable to pass arguments, and the build system (via Makefile) compiles and runs the same source code with four different language compilers/interpreters (gcc, g++, perl, raku) to prove it produces identical output across all platforms. This polyglot approach makes it both a technical curiosity and a practical demonstration of cross-language compatibility.
-=> https://codeberg.org/snonux/xerl View on Codeberg
-=> https://github.com/snonux/xerl View on GitHub
+=> https://codeberg.org/snonux/perl-c-fibonacci View on Codeberg
+=> https://github.com/snonux/perl-c-fibonacci View on GitHub
+
+C from `fibonacci.pl.raku.c`:
+
+```AUTO
+sub hello() {
+ printf("Hello, welcome to the Fibonacci Numbers!\n");
+ printf("This program is all, valid C and C++ and Perl and Raku code!\n");
+ printf("It calculates all fibonacci numbers from 0 to 9!\n\n");
+ return 0;
+}
+```
---
-### perl-c-fibonacci
+### guprecords
-* Languages: C (80.4%), Make (19.6%)
-* Documentation: Text (100.0%)
-* Commits: 4
-* Lines of Code: 51
-* Lines of Documentation: 69
-* Development Period: 2014-03-24 to 2022-04-23
-* Recent Activity: 1910.3 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Raku (100.0%)
+* 📊 Commits: 95
+* 📈 Lines of Code: 195
+* 📅 Development Period: 2013-03-22 to 2023-03-09
+* 🔥 Recent Activity: 2125.5 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: v1.0.0 (2023-04-29)
-This project is a fascinating polyglot programming experiment that demonstrates how a single source file can be valid code in multiple programming languages simultaneously. The core file `fibonacci.pl.raku.c` is cleverly written to be syntactically valid in C, C++, Perl, and Raku, all while implementing the same Fibonacci sequence calculation. It achieves this through strategic use of C preprocessor macros that redefine Perl/Raku-style syntax (like `my`, `sub`, `BEGIN`) into valid C constructs, while the actual logic remains readable in both paradigms.
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-The project is useful as an educational tool for understanding language syntax similarities, demonstrating advanced preprocessor techniques, and showcasing creative programming approaches. The implementation uses a recursive Fibonacci algorithm with a global variable to pass arguments, and the build system (via Makefile) compiles and runs the same source code with four different language compilers/interpreters (gcc, g++, perl, raku) to prove it produces identical output across all platforms. This polyglot approach makes it both a technical curiosity and a practical demonstration of cross-language compatibility.
+GupRecords is a Raku-based system administration tool that analyzes and reports on system uptime statistics across multiple hosts. It processes raw uptime records from various systems and generates formatted reports showing the top-performing hosts or operating systems based on metrics like uptime, boot count, downtime, and calculated meta-scores.
-=> https://codeberg.org/snonux/perl-c-fibonacci View on Codeberg
-=> https://github.com/snonux/perl-c-fibonacci View on GitHub
+The tool is implemented with a clean object-oriented architecture featuring an Aggregator class that parses record files, Host and OS Aggregate classes that store statistics, and Reporter classes that generate formatted tables. It supports multiple analysis categories (host, OS, OS-major, uname) and various sorting criteria including uptime duration, boot frequency, system lifespan, and downtime. The formatted output includes visual indicators for active systems and provides both duration-based and numerical metrics in a structured table format, making it useful for system administrators to quickly identify the most reliable systems in their infrastructure.
+
+=> https://codeberg.org/snonux/guprecords View on Codeberg
+=> https://github.com/snonux/guprecords View on GitHub
+
+Raku from `guprecords.raku`:
+
+```AUTO
+sub do-it(Str:D \stats-dir, Reporter:D \reporter) {
+ my Aggregator \aggregator .= new;
+ aggregator.add-file($_) for dir(stats-dir, test => { /.records$/ });
+ reporter.aggregates = aggregator.aggregates;
+ reporter.report;
+}
+```
---
### ioriot
-* Languages: C (55.5%), C/C++ (24.0%), Config (19.6%), Make (1.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 50
-* Lines of Code: 12420
-* Lines of Documentation: 610
-* Development Period: 2018-03-01 to 2020-01-22
-* Recent Activity: 2451.8 days (avg. age of last 42 commits)
-* License: Apache-2.0
+* 💻 Languages: C (55.5%), C/C++ (24.0%), Config (19.6%), Make (1.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 50
+* 📈 Lines of Code: 12420
+* 📄 Lines of Documentation: 610
+* 📅 Development Period: 2018-03-01 to 2020-01-22
+* 🔥 Recent Activity: 2451.9 days (avg. age of last 42 commits)
+* ⚖️ License: Apache-2.0
+* 🏷️ Latest Release: 0.5.1 (2019-01-04)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
+
+=> showcase/ioriot/image-1.png ioriot screenshot
**I/O Riot** is a Linux I/O benchmarking tool designed to capture real production I/O operations and replay them on load test machines for performance analysis. Unlike traditional benchmarking tools that use artificial I/O patterns, I/O Riot records actual file system operations from production servers and reproduces them exactly on test hardware. This approach enables accurate performance testing, hardware evaluation, and I/O bottleneck identification without the complexity of distributed test environments.
@@ -697,18 +1175,35 @@ The tool is implemented in C for minimal overhead and uses SystemTap for efficie
=> https://codeberg.org/snonux/ioriot View on Codeberg
=> https://github.com/snonux/ioriot View on GitHub
+C from `ioriot/src/datas/list.c`:
+
+```AUTO
+int list_key_insert_l(list_s *l, const long key, void *data)
+{
+ list_elem_s *current = l->first;
+
+ while (current) {
+ if (current->key_l == key)
+ return 0;
+ current = current->next;
+ }
+```
+
---
### staticfarm-apache-handlers
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 3
-* Lines of Code: 33
-* Lines of Documentation: 12
-* Development Period: 2015-01-02 to 2021-11-04
-* Recent Activity: 2960.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (96.4%), Make (3.6%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 919
+* 📄 Lines of Documentation: 12
+* 📅 Development Period: 2015-01-02 to 2021-11-04
+* 🔥 Recent Activity: 2960.6 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.1.3 (2015-01-02)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**StaticFarm Apache Handlers** is a specialized Apache mod_perl2 module designed to create a static content farm infrastructure. The project provides two main handlers: an API handler for file management operations and a cache control handler for intelligent content fetching and caching. The API handler (`StaticFarm::API`) exposes RESTful endpoints at `/-api` for performing CRUD operations on files, supporting GET (with directory listing), POST/PUT (file creation/modification), and DELETE operations with safety checks. The cache control handler (`StaticFarm::CacheControl`) implements a sophisticated caching mechanism that automatically fetches missing static files from a middleware server, stores them locally, and includes rate limiting and fallback host support to prevent DoS attacks.
@@ -717,17 +1212,31 @@ The system is particularly useful for distributed static content delivery where
=> https://codeberg.org/snonux/staticfarm-apache-handlers View on Codeberg
=> https://github.com/snonux/staticfarm-apache-handlers View on GitHub
+Perl from `debian/staticfarm-apache-handlers/usr/share/staticfarm/apache/handlers/StaticFarm/CacheControl.pm`:
+
+```AUTO
+sub my_warn {
+ my $msg = shift;
+
+ Apache2::ServerRec::warn("CacheControl: $msg");
+}
+```
+
---
### dyndns
-* Documentation: Text (100.0%)
-* Commits: 3
-* Lines of Code: 0
-* Lines of Documentation: 49
-* Development Period: 2014-03-24 to 2021-11-05
-* Recent Activity: 3196.4 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (100.0%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 18
+* 📄 Lines of Documentation: 49
+* 📅 Development Period: 2014-03-24 to 2021-11-05
+* 🔥 Recent Activity: 3196.5 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
This project is a simple Dynamic DNS (DynDNS) updater designed to automatically update DNS records when IP addresses change. It's particularly useful for maintaining DNS records for hosts with dynamic IP addresses, such as home servers or systems behind residential internet connections. The solution uses BIND DNS server with nsupdate for secure DNS record updates via SSH key authentication.
@@ -740,14 +1249,17 @@ The implementation consists of a shell script (`update-dyndns`) that accepts hos
### mon
-* Languages: Shell (51.4%), Make (35.8%), Config (12.8%)
-* Documentation: Text (100.0%)
-* Commits: 7
-* Lines of Code: 179
-* Lines of Documentation: 789
-* Development Period: 2015-01-02 to 2021-11-05
-* Recent Activity: 3463.1 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (96.5%), Shell (1.8%), Make (1.2%), Config (0.4%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 7
+* 📈 Lines of Code: 5360
+* 📄 Lines of Documentation: 789
+* 📅 Development Period: 2015-01-02 to 2021-11-05
+* 🔥 Recent Activity: 3463.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.0.1 (2015-01-02)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**Mon** is a command-line monitoring API client tool written in Perl that provides a simplified interface for interacting with RESTlos monitoring APIs (specifically designed for Nagios-style monitoring systems). It serves as a powerful administrative tool for monitoring infrastructure, allowing users to query, modify, and manage monitoring configurations through a REST API without needing to directly interact with complex JSON or HTTP requests.
@@ -756,18 +1268,31 @@ The tool is particularly useful for system administrators and DevOps engineers w
=> https://codeberg.org/snonux/mon View on Codeberg
=> https://github.com/snonux/mon View on GitHub
+Perl from `debian/mon/usr/share/mon/lib/MAPI/JSON.pm`:
+
+```AUTO
+sub init {
+ my ($self) = @_;
+
+ return undef;
+}
+```
+
---
### rubyfy
-* Languages: Ruby (98.5%), JSON (1.5%)
-* Documentation: Markdown (100.0%)
-* Commits: 34
-* Lines of Code: 273
-* Lines of Documentation: 32
-* Development Period: 2015-09-29 to 2021-11-05
-* Recent Activity: 3467.3 days (avg. age of last 42 commits)
-* License: Apache-2.0
+* 💻 Languages: Ruby (98.5%), JSON (1.5%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 34
+* 📈 Lines of Code: 273
+* 📄 Lines of Documentation: 32
+* 📅 Development Period: 2015-09-29 to 2021-11-05
+* 🔥 Recent Activity: 3467.4 days (avg. age of last 42 commits)
+* ⚖️ License: Apache-2.0
+* 🏷️ Latest Release: 0 (2015-10-26)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**Rubyfy** is a Ruby-based SSH automation tool designed to execute commands and scripts across multiple remote servers in parallel. It serves as a sophisticated SSH loop that enables system administrators to efficiently manage and orchestrate tasks across entire server fleets, supporting operations like command execution, file uploads/downloads, and background job management.
@@ -776,18 +1301,31 @@ The tool is implemented as a single Ruby script that leverages threading for par
=> https://codeberg.org/snonux/rubyfy View on Codeberg
=> https://github.com/snonux/rubyfy View on GitHub
+Ruby from `rubyfy.rb`:
+
+```AUTO
+def log(severity, message)
+ return if severity == :VERBOSE and not $opts["verbose"]
+ return if severity == :DEBUG and not $opts["debug"]
+
+ timestamp = $opts["timestamp"] ? "#{Time.now}|" : ""
+```
+
---
### pingdomfetch
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 9
-* Lines of Code: 49
-* Lines of Documentation: 412
-* Development Period: 2015-01-02 to 2021-11-05
-* Recent Activity: 3546.9 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (97.3%), Make (2.7%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 9
+* 📈 Lines of Code: 1839
+* 📄 Lines of Documentation: 412
+* 📅 Development Period: 2015-01-02 to 2021-11-05
+* 🔥 Recent Activity: 3547.0 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.0.2 (2015-01-02)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**pingdomfetch** is a Perl-based monitoring tool that fetches website availability statistics from Pingdom.com and provides email notifications when availability drops below configured thresholds. The tool is particularly useful for system administrators and DevOps teams who need automated monitoring alerts beyond Pingdom's built-in notifications, allowing them to aggregate multiple service checks and calculate composite availability metrics for "top-level services."
@@ -796,18 +1334,34 @@ The project is implemented as a modular Perl application with a clean architectu
=> https://codeberg.org/snonux/pingdomfetch View on Codeberg
=> https://github.com/snonux/pingdomfetch View on GitHub
+Perl from `lib/PINGDOMFETCH/TLS.pm`:
+
+```AUTO
+sub new {
+ my ( $class, %vals ) = @_;
+
+ my $self = bless \%vals, $class;
+ $self->{is_critical} = 0;
+
+ return $self;
+}
+```
+
---
### gotop
-* Languages: Go (98.0%), Make (2.0%)
-* Documentation: Markdown (50.0%), Text (50.0%)
-* Commits: 57
-* Lines of Code: 499
-* Lines of Documentation: 8
-* Development Period: 2015-05-24 to 2021-11-03
-* Recent Activity: 3557.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Go (98.0%), Make (2.0%)
+* 📚 Documentation: Markdown (50.0%), Text (50.0%)
+* 📊 Commits: 57
+* 📈 Lines of Code: 499
+* 📄 Lines of Documentation: 8
+* 📅 Development Period: 2015-05-24 to 2021-11-03
+* 🔥 Recent Activity: 3557.7 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.1 (2015-06-01)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**gotop** is an I/O monitoring tool written in Go that serves as a replacement for the traditional Linux `iotop` command. It displays real-time disk I/O statistics for running processes, showing which processes are performing the most read/write operations on your system. The tool is particularly useful for system administrators and developers who need to identify I/O bottlenecks, monitor disk usage patterns, or troubleshoot performance issues related to disk activity.
@@ -816,40 +1370,115 @@ The implementation follows a concurrent architecture using Go's goroutines and c
=> https://codeberg.org/snonux/gotop View on Codeberg
=> https://github.com/snonux/gotop View on GitHub
+Go from `gotop/main.go`:
+
+```AUTO
+func receiveD(dRxChan <-chan diskstats.Diskstats) {
+ for d := range dRxChan {
+ _ = d
+ }
+}
+```
+
+---
+
+### xerl
+
+* 💻 Languages: Perl (98.3%), Config (1.2%), Make (0.5%)
+* 📊 Commits: 670
+* 📈 Lines of Code: 1675
+* 📅 Development Period: 2011-03-06 to 2018-12-22
+* 🔥 Recent Activity: 3613.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.0.0 (2018-12-22)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
+
+Based on my analysis of the project files, here's a summary of Xerl:
+
+**Xerl** is an open-source website template engine with Content Management System (CMS) features, written in object-oriented Perl and powered by FastCGI. It uses XML-based configuration and content files to generate static websites with multiple output formats (HTML5, XHTML, RSS feeds, and plain text).
+
+The system works through a template-driven architecture where content is written in XML files with semantic tags (like `<pagetitle>`, `<text>`, `<enumeration>`) that get transformed into HTML using configurable transformation rules. The `config.xml` file defines how these semantic tags map to HTML elements, supporting variables and dynamic content insertion. Each website can have its own template configuration, content files, and static assets (CSS, images, fonts), making it useful for maintaining multiple related websites with consistent styling and structure while allowing customization per site. The project includes several example sites (paul.buetow.org, xerl.buetow.org) and redirect configurations, demonstrating its practical use for personal or organizational web presence management.
+
+=> https://codeberg.org/snonux/xerl View on Codeberg
+=> https://github.com/snonux/xerl View on GitHub
+
+Perl from `Xerl/Page/Content.pm`:
+
+```AUTO
+sub _insert_special_vars {
+ my $self = $_[0];
+ my $rules = $_[1];
+ my $element = $_[2];
+ my $rtext = $_[3];
+ my $config = $self->get_config();
+
+ $$rtext =~ s/@\@text\@\@/$_=$element->get_text();chomp;$_/geo;
+ $$rtext =~ s/@\@ln\@\@//go;
+
+ if ( $$rtext =~ /@\@(.*?)\@\@/ ) {
+ my $params = $element->get_params();
+ return unless ref $params eq 'HASH';
+ $$rtext =~ s/@\@(.*?)\@\@/$params->{$1}||''/geo;
+ }
+
+ return undef;
+}
+```
+
---
### debroid
-* Languages: Shell (92.0%), Make (8.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 16
-* Lines of Code: 88
-* Lines of Documentation: 148
-* Development Period: 2015-06-18 to 2015-12-05
-* Recent Activity: 3661.4 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (92.0%), Make (8.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 16
+* 📈 Lines of Code: 88
+* 📄 Lines of Documentation: 148
+* 📅 Development Period: 2015-06-18 to 2015-12-05
+* 🔥 Recent Activity: 3661.5 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
=> showcase/debroid/image-1.png debroid screenshot
-**Debroid** is a project that enables running a full Debian GNU/Linux chroot environment on rooted Android devices, specifically targeting the LG G3 D855 running CyanogenMod 13 (Android 6). The project allows users to run a complete Linux distribution alongside Android, providing access to the full Debian package ecosystem and command-line tools while maintaining the Android user interface and functionality.
+**Debroid** is a project that enables running a full Debian GNU/Linux environment on Android devices using a chroot container. Specifically designed for the LG G3 D855 running CyanogenMod 13 (Android 6), it allows users to install and run a complete Debian Jessie system alongside Android. This is particularly useful for developers and power users who want access to a full Linux command-line environment, package management system, and GNU/Linux tools directly on their Android device without dual-booting or replacing the Android system.
-The implementation uses a two-stage debootstrap process: first creating a Debian Jessie base image on a Linux host machine, then completing the installation inside the Android chroot environment. The system leverages loop devices to mount the Debian filesystem image stored on the SD card, bind-mounts essential Android directories (/proc, /dev, /sys) into the chroot, and includes startup scripts (jessie.sh:1, userinit.sh:1) for automatic service initialization and chroot management. This approach provides a powerful Linux development environment on Android without requiring a full dual-boot setup, making it useful for developers who need Linux tools and services on their mobile devices.
+The implementation works by creating a Debian filesystem image using debootstrap on a Linux host machine, then transferring it to the Android device's SD card. The core architecture uses loop devices to mount the Debian image file and bind mounts to share Android's `/proc`, `/dev`, and `/sys` filesystems with the chroot environment. The `jessie.sh` script handles mounting/unmounting the chroot and provides commands to enter the Debian environment or start services, while `userinit.sh` automatically starts Debian services at Android boot time. The project includes automation scripts and a Makefile for easy deployment via ADB.
=> https://codeberg.org/snonux/debroid View on Codeberg
=> https://github.com/snonux/debroid View on GitHub
+Shell from `data/local/userinit.sh`:
+
+```AUTO
+while : ; do
+ if [ -d /storage/sdcard1/Linux/jessie ]; then
+ cd /storage/sdcard1/Linux && /system/bin/sh jessie.sh start_services
+ /system/bin/date
+ exit 0
+ fi
+ /system/bin/sleep 1
+done
+```
+
---
### fapi
-* Languages: Python (92.0%), Make (7.3%), Config (0.7%)
-* Documentation: Text (98.3%), Markdown (1.7%)
-* Commits: 219
-* Lines of Code: 710
-* Lines of Documentation: 539
-* Development Period: 2014-03-10 to 2021-11-03
-* Recent Activity: 3939.4 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Python (96.6%), Make (3.1%), Config (0.3%)
+* 📚 Documentation: Text (98.3%), Markdown (1.7%)
+* 📊 Commits: 219
+* 📈 Lines of Code: 1681
+* 📄 Lines of Documentation: 539
+* 📅 Development Period: 2014-03-10 to 2021-11-03
+* 🔥 Recent Activity: 3939.5 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.0.2 (2014-11-17)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**fapi** is a command-line tool for managing F5 BigIP load balancers through the iControl API. It provides a simplified interface for common load balancer operations including managing nodes, pools, virtual servers, monitors, SSL profiles, VLANs, and network configuration. The tool is particularly useful for automating F5 operations and supports both direct commands and an interactive shell mode with features like auto-completion and DNS resolution.
@@ -858,18 +1487,29 @@ The implementation is written in Python and built on top of the bigsuds library,
=> https://codeberg.org/snonux/fapi View on Codeberg
=> https://github.com/snonux/fapi View on GitHub
+Python from `contrib/bigsuds-1.0/bigsuds.py`:
+
+```AUTO
+def _create_client_wrapper(self, client, wsdl_name):
+ client.set_options(headers=self._headers)
+ return super(_BIGIPSession, self)._create_client_wrapper(client, wsdl_name)
+```
+
---
### template
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 22
-* Lines of Code: 58
-* Lines of Documentation: 228
-* Development Period: 2013-03-22 to 2021-11-04
-* Recent Activity: 3993.8 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Make (89.2%), Shell (10.8%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 22
+* 📈 Lines of Code: 65
+* 📄 Lines of Documentation: 228
+* 📅 Development Period: 2013-03-22 to 2021-11-04
+* 🔥 Recent Activity: 3993.9 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.0.0.0 (2013-03-22)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
This is a **Debian packaging template project** that provides a complete scaffolding for creating proper Debian packages from custom projects. It serves as a reusable starting point for developers who want to package their software for Debian-based systems, eliminating the need to create the complex Debian packaging infrastructure from scratch.
@@ -878,18 +1518,33 @@ The project implements a clean, Make-based build system with automatic versionin
=> https://codeberg.org/snonux/template View on Codeberg
=> https://github.com/snonux/template View on GitHub
+Make from `Makefile`:
+
+```AUTO
+NAME=template
+all: version documentation build
+
+
+build:
+ cp -p ./src/$(NAME) bin/$(NAME)
+ sed -i "s/VERSION_DEVEL/$$(cat .version)/" bin/$(NAME)
+```
+
---
### muttdelay
-* Languages: Make (87.7%), Vim Script (11.0%), Config (1.4%)
-* Documentation: Text (100.0%)
-* Commits: 41
-* Lines of Code: 73
-* Lines of Documentation: 96
-* Development Period: 2013-03-22 to 2021-11-05
-* Recent Activity: 4006.8 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Make (47.1%), Shell (46.3%), Vim Script (5.9%), Config (0.7%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 41
+* 📈 Lines of Code: 136
+* 📄 Lines of Documentation: 96
+* 📅 Development Period: 2013-03-22 to 2021-11-05
+* 🔥 Recent Activity: 4006.9 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.2.0 (2014-07-05)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**MuttDelay** is a bash-based email scheduling tool that allows users to delay the sending of emails composed in Mutt for a specific future time. Unlike Mutt's built-in postpone feature, MuttDelay provides true time-based scheduling where emails are automatically sent at a predetermined future date and time. The tool is particularly useful for users who want to compose emails immediately but send them at more appropriate times, such as scheduling work emails to be sent during business hours or timing communications for maximum impact.
@@ -898,18 +1553,33 @@ The implementation is elegantly simple, consisting of a bash script that operate
=> https://codeberg.org/snonux/muttdelay View on Codeberg
=> https://github.com/snonux/muttdelay View on GitHub
+Make from `Makefile`:
+
+```AUTO
+NAME=muttdelay
+all: version documentation build
+
+
+build:
+ cp -p ./src/$(NAME) bin/$(NAME)
+ sed -i "s/VERSION_DEVEL/$$(cat .version)/" bin/$(NAME)
+```
+
---
### netdiff
-* Languages: Make (96.9%), Config (3.1%)
-* Documentation: Text (100.0%)
-* Commits: 42
-* Lines of Code: 64
-* Lines of Documentation: 106
-* Development Period: 2013-03-22 to 2021-11-05
-* Recent Activity: 4014.3 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (52.2%), Make (46.3%), Config (1.5%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 42
+* 📈 Lines of Code: 134
+* 📄 Lines of Documentation: 106
+* 📅 Development Period: 2013-03-22 to 2021-11-05
+* 🔥 Recent Activity: 4014.4 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.1.5 (2014-06-22)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**NetDiff** is a Bash-based network utility that enables secure file and directory comparison between two remote hosts over the network. It's particularly useful for system administrators who need to identify configuration differences between servers, such as comparing PAM configurations, system files, or directory structures across multiple hosts.
@@ -922,14 +1592,17 @@ The tool works by having both hosts run the same command simultaneously - one ac
### pwgrep
-* Languages: Shell (85.0%), Make (15.0%)
-* Documentation: Text (80.8%), Markdown (19.2%)
-* Commits: 142
-* Lines of Code: 493
-* Lines of Documentation: 26
-* Development Period: 2009-09-27 to 2021-11-02
-* Recent Activity: 4057.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (85.0%), Make (15.0%)
+* 📚 Documentation: Text (80.8%), Markdown (19.2%)
+* 📊 Commits: 142
+* 📈 Lines of Code: 493
+* 📄 Lines of Documentation: 26
+* 📅 Development Period: 2009-09-27 to 2021-11-02
+* 🔥 Recent Activity: 4057.7 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.9.3 (2014-06-14)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**pwgrep** is a command-line password manager built in Bash and GNU AWK that combines GPG encryption with version control (Git by default) for secure password storage and change tracking. It stores encrypted password databases as GPG files and uses a revision control system to maintain a complete history of all changes, making it ideal for users who want both security and accountability in their password management. The tool provides a simple interface where users can search for passwords using `pwgrep searchstring` or edit the database directly with `pwgrep`, and it integrates with various AWK implementations and secure file deletion tools for cross-platform compatibility.
@@ -938,18 +1611,31 @@ The implementation leverages GPG for strong encryption, ensuring passwords are n
=> https://codeberg.org/snonux/pwgrep View on Codeberg
=> https://github.com/snonux/pwgrep View on GitHub
+Shell from `bin/pwgrep.sh`:
+
+```AUTO
+function pwdbls () {
+ echo Available Databases:
+ _pwdbls
+ echo Current database: $DB
+}
+```
+
---
### japi
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 41
-* Lines of Code: 62
-* Lines of Documentation: 144
-* Development Period: 2013-03-22 to 2021-11-05
-* Recent Activity: 4062.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (78.3%), Make (21.7%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 41
+* 📈 Lines of Code: 286
+* 📄 Lines of Documentation: 144
+* 📅 Development Period: 2013-03-22 to 2021-11-05
+* 🔥 Recent Activity: 4062.7 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.4.3 (2014-06-16)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**japi** is a simple Perl command-line tool for fetching and displaying unresolved Jira tickets. It's designed to be used manually or automated via cron jobs to keep track of open issues from Jira projects. The tool is particularly useful for developers and project managers who want to quickly view their current workload - it can write results to a local file that's displayed whenever opening a new shell session.
@@ -962,14 +1648,17 @@ The implementation uses modern Perl with the Moo object system and consists of t
### perl-poetry
-* Languages: Perl (100.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 2
-* Lines of Code: 191
-* Lines of Documentation: 8
-* Development Period: 2014-03-24 to 2014-03-24
-* Recent Activity: 4123.9 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (100.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 2
+* 📈 Lines of Code: 191
+* 📄 Lines of Documentation: 8
+* 📅 Development Period: 2014-03-24 to 2014-03-24
+* 🔥 Recent Activity: 4124.0 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
This is a creative Perl poetry project that demonstrates the artistic and expressive possibilities of the Perl programming language. The project consists of six thematic Perl scripts that are designed to be syntactically valid Perl code while simultaneously reading as narrative poetry or prose when viewed as text.
@@ -978,16 +1667,34 @@ Each script explores different themes - Christmas celebrations, mathematical stu
=> https://codeberg.org/snonux/perl-poetry View on Codeberg
=> https://github.com/snonux/perl-poetry View on GitHub
+Perl from `php.pl`:
+
+```AUTO
+require abs Perl and not undef$ined; sub knowledges {};
+
+hell: warn if PHP and not Perl;
+
+heaven: do index all, knowledges unless not Perl
+ and not try { require PHP if defined };
+
+require Switch and delete $evil{PHP};
+
+Oh_Yes: do { PHP => Perl } for all, time;
+```
+
---
### ipv6test
-* Languages: Perl (100.0%)
-* Commits: 7
-* Lines of Code: 80
-* Development Period: 2011-07-09 to 2015-01-13
-* Recent Activity: 4203.9 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Perl (100.0%)
+* 📊 Commits: 7
+* 📈 Lines of Code: 80
+* 📅 Development Period: 2011-07-09 to 2015-01-13
+* 🔥 Recent Activity: 4204.0 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
This is a simple IPv6 connectivity testing tool implemented as a Perl CGI script. The project provides a web-based service that helps users determine whether they're connecting to servers using IPv6 or IPv4 protocols, which is useful for network administrators and users wanting to verify their IPv6 connectivity.
@@ -996,22 +1703,42 @@ The implementation uses a straightforward approach with three test endpoints: on
=> https://codeberg.org/snonux/ipv6test View on Codeberg
=> https://github.com/snonux/ipv6test View on GitHub
+Perl from `index.pl`:
+
+```AUTO
+Congratulations, you have connected to a server that will display your method of connection, either IPv6 (preferred) or IPv4 (old and crusty). Well IPv6 is already ~15 years old either but not as old as IPv4 ;)
+<br /><br />
+Nevertheless, please choose your destiny:
+<ul>
+ <li><a href="http://ipv6.buetow.org">ipv6.buetow.org</a> for IPv6 & IPv4 Test</li>
+ <li><a href="http://test4.ipv6.buetow.org">test4.ipv6.buetow.org</a> for IPv4 Only Test</li>
+ <li><a href="http://test6.ipv6.buetow.org">test6.ipv6.buetow.org</a> for IPv6 Only Test</li>
+</ul>
+If your browser times-out when trying to connect to this server then you do not have an IPv6 or IPv4 path (depends on which test you are running) to the server. If your browser returns an error that the host cannot be found then the DNS servers you are using are unable to resolve the AAAA or A DNS record (depends on which test you are running again) for the server. If your browser is able to connect to the "IPv6 Only Test", yet using the "IPv6 & IPv4 Test" returns a page stating you are using IPv4, then your browser and/or IP stack in your machine are preferring IPv4 over IPv6. It also might be that your operating system supports IPv6 but your web-browser doesn't.
+END
+
+if ($ENV{SERVER_NAME} eq 'ipv6.buetow.org') {
+```
+
---
### cpuinfo
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 28
-* Lines of Code: 58
-* Lines of Documentation: 75
-* Development Period: 2010-11-05 to 2021-11-05
-* Recent Activity: 4244.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (53.2%), Make (46.8%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 28
+* 📈 Lines of Code: 124
+* 📄 Lines of Documentation: 75
+* 📅 Development Period: 2010-11-05 to 2021-11-05
+* 🔥 Recent Activity: 4244.7 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.0.2 (2014-06-22)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-**cpuinfo** is a small system utility that provides human-readable CPU information by parsing `/proc/cpuinfo` on Linux systems. It extracts and displays key processor details including the CPU model, physical processors, cores, hyper-threading status, clock speeds, and bogomips in a clean, organized format. The tool is particularly useful for system administrators and developers who need to quickly understand the CPU architecture and capabilities of a system without parsing the raw `/proc/cpuinfo` output manually.
+**cpuinfo** is a small command-line utility that provides a human-readable summary of CPU information on Linux systems. It parses `/proc/cpuinfo` using AWK to extract and display key processor details including the CPU model, cache size, number of physical processors, cores, and whether hyper-threading is enabled. The tool calculates total CPU frequency and bogomips across all cores, making it easier to understand complex multi-core and multi-processor configurations at a glance.
-The implementation is elegantly simple, consisting of a single shell script that uses GNU AWK (gawk) to parse the `/proc/cpuinfo` file. The AWK script intelligently counts physical processors, cores, and logical CPUs, calculates total and per-core frequencies, detects hyper-threading status, and formats the output in a readable way. The project includes proper packaging for Debian systems, comprehensive documentation, and example outputs from different system configurations, making it a well-rounded utility for Linux system analysis.
+The implementation is remarkably simple - a single shell script that uses GNU AWK to parse the kernel's CPU information and format it into a clear, structured output. It's particularly useful for system administrators and developers who need to quickly understand CPU topology, especially on servers with multiple processors or complex threading configurations where the raw `/proc/cpuinfo` output can be overwhelming.
=> https://codeberg.org/snonux/cpuinfo View on Codeberg
=> https://github.com/snonux/cpuinfo View on GitHub
@@ -1020,14 +1747,17 @@ The implementation is elegantly simple, consisting of a single shell script that
### loadbars
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 527
-* Lines of Code: 48
-* Lines of Documentation: 100
-* Development Period: 2010-11-05 to 2015-05-23
-* Recent Activity: 4274.7 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (97.4%), Make (2.6%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 527
+* 📈 Lines of Code: 1828
+* 📄 Lines of Documentation: 100
+* 📅 Development Period: 2010-11-05 to 2015-05-23
+* 🔥 Recent Activity: 4274.8 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.7.5 (2014-06-22)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**Loadbars** is a real-time server monitoring tool that visualizes CPU loads, memory usage, and network statistics across multiple remote servers simultaneously. Written in Perl, it connects to servers via SSH using public/private key authentication and displays colorized bar charts representing various system metrics in a live SDL-based graphical interface. This tool is particularly useful for system administrators who need immediate visibility into server performance without waiting for traditional monitoring tools to collect and process data.
@@ -1036,16 +1766,40 @@ The application is implemented using a multi-threaded architecture where each mo
=> https://codeberg.org/snonux/loadbars View on Codeberg
=> https://github.com/snonux/loadbars View on GitHub
+Perl from `lib/Loadbars/Config.pm`:
+
+```AUTO
+sub write () {
+ display_warn( "Overwriting config file " . Loadbars::Constants->CONFFILE )
+ if -f Loadbars::Constants->CONFFILE;
+
+ open my $conffile, '>', Loadbars::Constants->CONFFILE or do {
+ display_warn( "$!: " . Loadbars::Constants->CONFFILE );
+
+ return undef;
+ };
+
+ for ( grep !/title/, keys %C ) {
+ print $conffile "$_=$C{$_}\n";
+ }
+
+ close $conffile;
+}
+```
+
---
### perldaemon
-* Languages: Perl (90.1%), Config (9.9%)
-* Commits: 110
-* Lines of Code: 242
-* Development Period: 2011-02-05 to 2022-04-21
-* Recent Activity: 4324.2 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Perl (72.3%), Shell (23.8%), Config (3.9%)
+* 📊 Commits: 110
+* 📈 Lines of Code: 614
+* 📅 Development Period: 2011-02-05 to 2022-04-21
+* 🔥 Recent Activity: 4324.2 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.4 (2022-04-29)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
PerlDaemon is a minimal, extensible daemon framework for Linux and Unix-like systems written in Perl. It provides a structured foundation for creating background services that need to run continuously and execute scheduled tasks at regular intervals. The daemon supports automatic daemonization, comprehensive logging with logrotate support, clean shutdown handling via SIGTERM, and pidfile management to prevent multiple instances.
@@ -1054,38 +1808,65 @@ The architecture centers around a modular plugin system where custom functionali
=> https://codeberg.org/snonux/perldaemon View on Codeberg
=> https://github.com/snonux/perldaemon View on GitHub
+Perl from `lib/PerlDaemon/PerlDaemon.pl`:
+
+```AUTO
+sub trunc ($) {
+ my $file = shift;
+ open my $fh, ">$file" or die "Can't write $file: $!\n";
+ print $fh '';
+ close $fh;
+}
+```
+
---
### awksite
-* Languages: HTML (58.8%), Config (41.2%)
-* Documentation: Text (60.0%), Markdown (40.0%)
-* Commits: 3
-* Lines of Code: 34
-* Lines of Documentation: 10
-* Development Period: 2011-01-27 to 2014-06-22
-* Recent Activity: 4655.2 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: AWK (72.1%), HTML (16.4%), Config (11.5%)
+* 📚 Documentation: Text (60.0%), Markdown (40.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 122
+* 📄 Lines of Documentation: 10
+* 📅 Development Period: 2011-01-27 to 2014-06-22
+* 🔥 Recent Activity: 4655.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: v0.2 (2011-01-27)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-**Awksite** is a lightweight CGI application written in GNU AWK that generates dynamic HTML websites. It's designed to be minimal and portable, running on any *NIX system with GNU AWK installed without requiring additional dependencies or complex web frameworks. The application uses a simple templating system where placeholders in HTML templates (marked with `%%key%%`) are replaced with values from a configuration file, making it easy to create dynamic content like server uptime, current date, or sorted file contents.
+**AWKsite** is a lightweight CGI application written in GNU AWK that generates dynamic HTML websites. It's designed to run on Unix-like systems and provides a simple templating system for creating dynamic web content. The application is particularly useful for creating basic dynamic websites without requiring complex web frameworks or databases - it's ideal for simple status pages, basic content management, or educational purposes where you want to demonstrate CGI concepts with minimal dependencies.
-The architecture is elegantly simple: the main CGI script (`index.cgi`) reads configuration values from `awksite.conf`, processes an HTML template file line by line, and replaces template variables with their corresponding values. Configuration values can be static text or dynamic content generated by shell commands (prefixed with `!`). Special template variables like `%%!sort filename%%` can execute operations like sorting file contents. This approach makes it useful for creating simple dynamic websites, system status pages, or basic content management without the overhead of larger web frameworks, particularly appealing for embedded systems or minimalist web setups.
+The implementation consists of a main AWK script (`index.cgi`) that reads configuration from `awksite.conf` and processes an HTML template (`template.html`) by replacing template variables (marked with `%%variable%%`) with values from the configuration file. The system supports both static values and dynamic content generated by executing shell commands (prefixed with `!`). For example, `%%date%%` gets replaced with the output of the `date` command, and `%%uptime%%` shows server uptime. The template engine also supports sorting file contents with a special `!sort filename` syntax, making it easy to display sorted lists of data.
=> https://codeberg.org/snonux/awksite View on Codeberg
=> https://github.com/snonux/awksite View on GitHub
+AWK from `index.cgi`:
+
+```AUTO
+function process_line(line) {
+ if (line ~ /%%.+%%/)
+ return insert_template_value(line)
+ return line
+}
+```
+
---
### jsmstrade
-* Languages: Java (76.0%), Shell (15.4%), XML (8.6%)
-* Documentation: Markdown (100.0%)
-* Commits: 20
-* Lines of Code: 720
-* Lines of Documentation: 6
-* Development Period: 2008-06-21 to 2021-11-03
-* Recent Activity: 4717.8 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Java (76.0%), Shell (15.4%), XML (8.6%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 20
+* 📈 Lines of Code: 720
+* 📄 Lines of Documentation: 6
+* 📅 Development Period: 2008-06-21 to 2021-11-03
+* 🔥 Recent Activity: 4717.9 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v0.3 (2009-02-08)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
=> showcase/jsmstrade/image-1.png jsmstrade screenshot
@@ -1096,18 +1877,37 @@ The implementation follows a clean three-class architecture: `SMain` handles the
=> https://codeberg.org/snonux/jsmstrade View on Codeberg
=> https://github.com/snonux/jsmstrade View on GitHub
+Java from `sources/smstrade/SFrame.java`:
+
+```AUTO
+public void disposeWithParent() {
+ if (!dispose && parent != null && parent instanceof Window) {
+ Window window = (Window) parent;
+ window.addWindowListener(new WindowAdapter() {
+ public void windowClosed(WindowEvent we) {
+ SFrame.this.dispose();
+ }
+ });
+ }
+ dispose = true;
+}
+```
+
---
### netcalendar
-* Languages: Java (83.0%), HTML (12.9%), XML (3.0%), CSS (0.8%), Make (0.2%)
-* Documentation: Text (89.7%), Markdown (10.3%)
-* Commits: 50
-* Lines of Code: 17380
-* Lines of Documentation: 947
-* Development Period: 2009-02-07 to 2021-05-01
-* Recent Activity: 5348.5 days (avg. age of last 42 commits)
-* License: GPL-2.0
+* 💻 Languages: Java (83.0%), HTML (12.9%), XML (3.0%), CSS (0.8%), Make (0.2%)
+* 📚 Documentation: Text (89.7%), Markdown (10.3%)
+* 📊 Commits: 50
+* 📈 Lines of Code: 17380
+* 📄 Lines of Documentation: 947
+* 📅 Development Period: 2009-02-07 to 2021-05-01
+* 🔥 Recent Activity: 5348.6 days (avg. age of last 42 commits)
+* ⚖️ License: GPL-2.0
+* 🏷️ Latest Release: v0.1 (2009-02-08)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
=> showcase/netcalendar/image-1.png netcalendar screenshot
@@ -1120,16 +1920,29 @@ The implementation uses a clean separation of concerns with dedicated packages f
=> https://codeberg.org/snonux/netcalendar View on Codeberg
=> https://github.com/snonux/netcalendar View on GitHub
+Java from `sources/shared/MyVector.java`:
+
+```AUTO
+public void appendVector(Vector vecAppend) {
+ Enumeration enumAppend = vecAppend.elements();
+ while (enumAppend.hasMoreElements())
+ this.add(enumAppend.nextElement());
+}
+```
+
---
### hsbot
-* Languages: Haskell (98.5%), Make (1.5%)
-* Commits: 80
-* Lines of Code: 601
-* Development Period: 2009-11-22 to 2011-10-17
-* Recent Activity: 5444.2 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Haskell (98.5%), Make (1.5%)
+* 📊 Commits: 80
+* 📈 Lines of Code: 601
+* 📅 Development Period: 2009-11-22 to 2011-10-17
+* 🔥 Recent Activity: 5444.2 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**HSBot** is a modular IRC bot written in Haskell that provides a plugin-based architecture for handling IRC messages and commands. The bot connects to IRC servers, joins channels, and responds to both direct commands (prefixed with `!`) and general messages through its plugin system. It includes built-in commands for help, info, state management, and graceful shutdown, while supporting extensible functionality through plugins like message counting, printing, and storage capabilities.
@@ -1138,18 +1951,36 @@ The implementation uses a clean separation of concerns with modules for IRC conn
=> https://codeberg.org/snonux/hsbot View on Codeberg
=> https://github.com/snonux/hsbot View on GitHub
+Haskell from `HsBot/Plugins/StoreMessages.hs`:
+
+```AUTO
+module HsBot.Plugins.StoreMessages (makeStoreMessages) where
+
+import Control.Exception
+
+import HsBot.Plugins.Base
+
+import HsBot.Base.Env
+import HsBot.Base.State
+
+storeMessages :: CallbackFunction
+```
+
---
### ychat
-* Languages: C++ (63.2%), C/C++ (26.7%), Perl (3.0%), HTML (2.7%), Config (2.5%), Make (1.2%), Shell (0.5%), CSS (0.3%)
-* Documentation: Text (100.0%)
-* Commits: 67
-* Lines of Code: 35610
-* Lines of Documentation: 101
-* Development Period: 2008-05-15 to 2014-06-30
-* Recent Activity: 5554.7 days (avg. age of last 42 commits)
-* License: GPL-2.0
+* 💻 Languages: C++ (48.9%), Shell (22.7%), C/C++ (20.7%), Perl (2.5%), HTML (2.1%), Config (1.9%), Make (0.9%), CSS (0.2%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 67
+* 📈 Lines of Code: 45956
+* 📄 Lines of Documentation: 101
+* 📅 Development Period: 2008-05-15 to 2014-06-30
+* 🔥 Recent Activity: 5554.8 days (avg. age of last 42 commits)
+* ⚖️ License: GPL-2.0
+* 🏷️ Latest Release: yhttpd-0.7.2 (2013-04-06)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
Based on my analysis of the codebase, here's a concise summary of the yChat project:
@@ -1160,18 +1991,36 @@ The architecture is built around several key managers: a socket manager for hand
=> https://codeberg.org/snonux/ychat View on Codeberg
=> https://github.com/snonux/ychat View on GitHub
+C++ from `logd.cpp`:
+
+```AUTO
+struct tm *t_m;
+time_t t_cur=time(NULL);
+t_m=gmtime(&t_cur);
+
+char buffer[100];
+strftime(buffer, 100, "[%d/%b/%Y:%H:%M:%S %z]", t_m);
+string s_time=buffer;
+string s_logstr = request["REMOTE_ADDR"] + " - - "+s_time+" \"" + request["QUERY_STRING"]+"\" 200 0 \""+request["request"]+"\" \""+request["User-Agent"]+"\"\n";
+
+s_queue.push(s_logstr);
+```
+
---
### vs-sim
-* Languages: Java (98.8%), Shell (0.7%), XML (0.4%)
-* Documentation: LaTeX (98.4%), Text (1.4%), Markdown (0.2%)
-* Commits: 411
-* Lines of Code: 16303
-* Lines of Documentation: 2903
-* Development Period: 2008-05-15 to 2021-05-01
-* Recent Activity: 5740.6 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Java (98.8%), Shell (0.7%), XML (0.4%)
+* 📚 Documentation: LaTeX (98.4%), Text (1.4%), Markdown (0.2%)
+* 📊 Commits: 411
+* 📈 Lines of Code: 16303
+* 📄 Lines of Documentation: 2903
+* 📅 Development Period: 2008-05-15 to 2021-05-01
+* 🔥 Recent Activity: 5740.7 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.0 (2008-08-24)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
=> showcase/vs-sim/image-1.jpg vs-sim screenshot
@@ -1182,18 +2031,33 @@ The implementation features a modular architecture with separate packages for co
=> https://codeberg.org/snonux/vs-sim View on Codeberg
=> https://github.com/snonux/vs-sim View on GitHub
+Java from `sources/prefs/editors/VSSimulatorEditor.java`:
+
+```AUTO
+public VSSimulatorEditor(VSPrefs prefs, VSSimulatorFrame simulatorFrame,
+ boolean openedNewWindow) {
+ super(prefs, prefs, prefs.getString("lang.en.name")
+ + " - " + prefs.getString("lang.en.prefs"));
+ this.simulatorFrame = simulatorFrame;
+ this.openedNewWindow = openedNewWindow;
+}
+```
+
---
### fype
-* Languages: C (67.9%), C/C++ (23.6%), HTML (6.9%), Make (1.6%)
-* Documentation: Text (61.4%), LaTeX (38.6%)
-* Commits: 99
-* Lines of Code: 8622
-* Lines of Documentation: 1474
-* Development Period: 2008-05-15 to 2014-06-30
-* Recent Activity: 5768.2 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: C (67.9%), C/C++ (23.6%), HTML (6.9%), Make (1.6%)
+* 📚 Documentation: Text (61.4%), LaTeX (38.6%)
+* 📊 Commits: 99
+* 📈 Lines of Code: 8622
+* 📄 Lines of Documentation: 1474
+* 📅 Development Period: 2008-05-15 to 2014-06-30
+* 🔥 Recent Activity: 5768.3 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
**Fype** is a 32-bit scripting language interpreter written in C that aims to be "at least as good as AWK" while providing a different syntax and some unique features. Created by Paul C. Buetow as a fun project, Fype supports variables, functions, procedures, loops, arrays, and control structures with features like variable synonyms (references), nested functions/procedures, and automatic type conversion. The language uses a simple syntax with statements ending in semicolons and supports both global procedures (which share scope with their callers) and lexically-scoped functions.
diff --git a/about/showcase.gmi.tpl b/about/showcase.gmi.tpl
index dff8e5c9..664038c3 100644
--- a/about/showcase.gmi.tpl
+++ b/about/showcase.gmi.tpl
@@ -1,53 +1,70 @@
# Project Showcase
-This page showcases my open source projects, providing an overview of what each project does, its technical implementation, and key metrics. Each project summary includes information about the programming languages used, development activity, and licensing.
+Generated on: 2025-07-09
+
+This page showcases my open source projects, providing an overview of what each project does, its technical implementation, and key metrics. Each project summary includes information about the programming languages used, development activity, and licensing. The projects are ordered by recent activity, with the most actively maintained projects listed first.
<< template::inline::toc
## Overall Statistics
-* Total Projects: 55
-* Total Commits: 10,358
-* Total Lines of Code: 225,423
-* Total Lines of Documentation: 24,618
-* Languages: Java (25.1%), Go (19.3%), HTML (15.7%), C++ (10.0%), C (8.2%), C/C++ (6.5%), XML (5.4%), Shell (2.1%), Perl (1.9%), Config (1.7%), Ruby (1.3%), CSS (0.8%), Make (0.8%), JSON (0.3%), Python (0.3%), Haskell (0.3%), YAML (0.2%), TOML (0.1%)
-* Documentation: Text (46.9%), Markdown (39.2%), LaTeX (13.9%)
-
-Generated on: 2025-07-08
+* 📦 Total Projects: 55
+* 📊 Total Commits: 10,373
+* 📈 Total Lines of Code: 252,766
+* 📄 Total Lines of Documentation: 24,100
+* 💻 Languages: Java (22.4%), Go (17.5%), HTML (14.0%), C++ (8.9%), C (7.3%), Perl (6.3%), Shell (6.3%), C/C++ (5.8%), XML (4.7%), Config (1.5%), Ruby (1.1%), HCL (1.1%), Make (0.7%), Python (0.6%), CSS (0.6%), JSON (0.3%), Raku (0.3%), Haskell (0.2%), YAML (0.2%), TOML (0.1%)
+* 📚 Documentation: Text (47.5%), Markdown (38.3%), LaTeX (14.2%)
+* 🤖 AI-Assisted Projects: 8 out of 55 (14.5% AI-assisted, 85.5% human-only)
+* 🚀 Release Status: 31 released, 24 experimental (56.4% with releases, 43.6% experimental)
## Projects
### gitsyncer
-* Languages: Go (83.6%), Shell (14.0%), YAML (1.8%), JSON (0.6%)
-* Documentation: Markdown (100.0%)
-* Commits: 35
-* Lines of Code: 5314
-* Lines of Documentation: 2239
-* Development Period: 2025-06-23 to 2025-07-08
-* Recent Activity: 11.0 days (avg. age of last 42 commits)
-* License: BSD-2-Clause
+* 💻 Languages: Go (85.6%), Shell (12.3%), YAML (1.6%), JSON (0.5%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 50
+* 📈 Lines of Code: 6038
+* 📄 Lines of Documentation: 2239
+* 📅 Development Period: 2025-06-23 to 2025-07-08
+* 🔥 Recent Activity: 6.4 days (avg. age of last 42 commits)
+* ⚖️ License: BSD-2-Clause
+* 🏷️ Latest Release: v0.3.0 (2025-07-07)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
-GitSyncer is a comprehensive Git repository synchronization tool that automatically keeps repositories in sync across multiple hosting platforms like GitHub and Codeberg. It's particularly useful for developers who maintain the same repository on multiple platforms or want to create resilient backups of their code. The tool supports both individual repository sync and bulk operations to sync all public repositories from one platform to another, with intelligent branch management that never deletes branches but creates them as needed.
+GitSyncer is a cross-platform repository synchronization tool that automatically keeps Git repositories in sync across multiple hosting platforms like GitHub, Codeberg, and private SSH servers. It solves the common problem of maintaining consistent code across different Git hosting services by cloning repositories, adding all configured platforms as remotes, and continuously merging and pushing changes bidirectionally while handling branch creation and conflict detection.
-The architecture follows a clean Go project structure with the core implementation handling repository cloning, remote management, and branch synchronization. It uses a JSON configuration file to define organizations and repositories, supports SSH backup locations with automatic bare repository creation, and includes features like branch exclusion patterns, dry-run mode, and merge conflict detection. The tool is designed to be resilient, with opt-in backup functionality that allows it to work normally even when backup servers are offline.
+The tool is implemented in Go with a clean architecture that supports both individual repository syncing and bulk operations for public repositories. Key features include automatic repository creation, SSH backup locations for private servers, branch exclusion patterns, and an opt-in backup mode for resilient offline backups. It uses a JSON configuration file to define organizations and repositories, employs safe merge strategies that never delete branches, and provides comprehensive error handling for merge conflicts and missing repositories.
=> https://codeberg.org/snonux/gitsyncer View on Codeberg
=> https://github.com/snonux/gitsyncer View on GitHub
+Go from `internal/version/version.go`:
+
+```AUTO
+var (
+ Version = "0.4.0"
+
+ GitCommit = "unknown"
+
+ BuildDate = "unknown"
+```
+
---
### timr
-* Languages: Go (98.3%), YAML (1.7%)
-* Documentation: Markdown (100.0%)
-* Commits: 19
-* Lines of Code: 873
-* Lines of Documentation: 135
-* Development Period: 2025-06-25 to 2025-06-29
-* Recent Activity: 12.2 days (avg. age of last 42 commits)
-* License: BSD-2-Clause
+* 💻 Languages: Go (98.3%), YAML (1.7%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 19
+* 📈 Lines of Code: 873
+* 📄 Lines of Documentation: 135
+* 📅 Development Period: 2025-06-25 to 2025-06-29
+* 🔥 Recent Activity: 12.3 days (avg. age of last 42 commits)
+* ⚖️ License: BSD-2-Clause
+* 🧪 Status: Experimental (no releases yet)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
`timr` is a minimalist command-line time tracking tool written in Go that provides a simple stopwatch-style timer for tracking work sessions. It offers commands to start, stop, reset, and check the status of the timer, with all state persisted across sessions in `~/.config/timr/.timr_state`. The tool is particularly useful for developers and professionals who need to track time spent on tasks without the overhead of complex time-tracking applications.
@@ -57,18 +74,35 @@ The project is implemented using a clean modular architecture with the CLI entry
=> https://codeberg.org/snonux/timr View on Codeberg
=> https://github.com/snonux/timr View on GitHub
+Go from `internal/timer/timer.go`:
+
+```AUTO
+func GetStateFile() (string, error) {
+ if stateFilePathOverride != "" {
+ return stateFilePathOverride, nil
+ }
+ configDir, err := os.UserConfigDir()
+ if err != nil {
+ return "", err
+ }
+ return filepath.Join(configDir, "timr", stateFile), nil
+}
+```
+
---
### tasksamurai
-* Languages: Go (99.8%), YAML (0.2%)
-* Documentation: Markdown (100.0%)
-* Commits: 215
-* Lines of Code: 6160
-* Lines of Documentation: 162
-* Development Period: 2025-06-19 to 2025-07-08
-* Recent Activity: 12.6 days (avg. age of last 42 commits)
-* License: BSD-2-Clause
+* 💻 Languages: Go (99.8%), YAML (0.2%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 215
+* 📈 Lines of Code: 6160
+* 📄 Lines of Documentation: 162
+* 📅 Development Period: 2025-06-19 to 2025-07-08
+* 🔥 Recent Activity: 12.7 days (avg. age of last 42 commits)
+* ⚖️ License: BSD-2-Clause
+* 🏷️ Latest Release: v0.9.2 (2025-07-02)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
=> showcase/tasksamurai/image-1.png tasksamurai screenshot
@@ -82,18 +116,51 @@ The implementation follows a clean architecture with clear separation of concern
=> https://codeberg.org/snonux/tasksamurai View on Codeberg
=> https://github.com/snonux/tasksamurai View on GitHub
+Go from `cmd/tasksamurai/main.go`:
+
+```AUTO
+func main() {
+ debugLog := flag.String("debug-log", "", "path to debug log file")
+ browserCmd := flag.String("browser-cmd", "firefox", "command used to open URLs")
+ disco := flag.Bool("disco", false, "enable disco mode")
+ flag.Parse()
+
+ if err := task.SetDebugLog(*debugLog); err != nil {
+ fmt.Fprintln(os.Stderr, "failed to enable debug log:", err)
+ os.Exit(1)
+ }
+
+ m, err := ui.New(flag.Args(), *browserCmd)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, "failed to load tasks:", err)
+ os.Exit(1)
+ }
+
+ m.SetDisco(*disco)
+
+ fmt.Print("\033[H\033[2J")
+
+ p := tea.NewProgram(&m, tea.WithAltScreen())
+ if _, err := p.Run(); err != nil {
+ fmt.Fprintln(os.Stderr, "error running ui:", err)
+ os.Exit(1)
+ }
+}
+```
+
---
### rexfiles
-* Languages: Perl (34.8%), Shell (31.0%), Config (8.9%), CSS (8.7%), TOML (7.7%), Ruby (6.3%), Lua (1.9%), JSON (0.5%), INI (0.2%)
-* Documentation: Text (97.3%), Markdown (2.7%)
-* Commits: 871
-* Lines of Code: 3734
-* Lines of Documentation: 854
-* Development Period: 2021-12-28 to 2025-07-07
-* Recent Activity: 19.9 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (34.8%), Perl (32.9%), Config (8.4%), CSS (8.3%), TOML (7.3%), Ruby (6.0%), Lua (1.8%), JSON (0.5%), INI (0.2%)
+* 📚 Documentation: Text (97.3%), Markdown (2.7%)
+* 📊 Commits: 871
+* 📈 Lines of Code: 3947
+* 📄 Lines of Documentation: 854
+* 📅 Development Period: 2021-12-28 to 2025-07-07
+* 🔥 Recent Activity: 20.0 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
Based on my analysis of the codebase, **rexfiles** is a comprehensive infrastructure automation and configuration management project built with the Rex framework (a Perl-based alternative to Ansible, Puppet, or Chef). The project provides structured automation for managing multiple aspects of a personal infrastructure, including dotfiles, server configurations, and application deployments.
@@ -103,18 +170,28 @@ The project consists of three main components: **dotfiles** management for perso
=> https://codeberg.org/snonux/rexfiles View on Codeberg
=> https://github.com/snonux/rexfiles View on GitHub
+Shell from `frontends/scripts/sitestats.sh`:
+
+```AUTO
+STATSFILE=/tmp/sitestats.csv
+BOTSFILE=/tmp/sitebots.txt
+TOP=20
+```
+
---
### foo.zone
-* Languages: HTML (73.9%), XML (25.9%), CSS (0.2%)
-* Documentation: Text (91.8%), Markdown (8.2%)
-* Commits: 2892
-* Lines of Code: 42772
-* Lines of Documentation: 159
-* Development Period: 2021-04-29 to 2025-07-01
-* Recent Activity: 26.3 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: HTML (73.9%), XML (25.9%), CSS (0.2%)
+* 📚 Documentation: Text (91.8%), Markdown (8.2%)
+* 📊 Commits: 2892
+* 📈 Lines of Code: 42772
+* 📄 Lines of Documentation: 159
+* 📅 Development Period: 2021-04-29 to 2025-07-01
+* 🔥 Recent Activity: 26.3 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
This is **foo.zone**, a personal blog and technical website belonging to Paul Buetow, a Site Reliability Engineer based in Sofia, Bulgaria. The project is a static website that serves as a comprehensive platform for sharing technical knowledge, book notes, and personal experiences in the fields of system administration, DevOps, and programming.
@@ -124,18 +201,35 @@ The site is built using **Gemtexter**, a static site generator that creates both
=> https://codeberg.org/snonux/foo.zone View on Codeberg
=> https://github.com/snonux/foo.zone View on GitHub
+HTML from `gemfeed/2024-08-05-typing-127.1-words-per-minute.html`:
+
+```AUTO
+<span>Sometimes, there were brain farts, and I couldn&#39;t type at all. The trick was not to freak out about it, but to move on. If your average goes down a bit for a day, it doesn&#39;t matter; the long-term trend over several days and weeks matters, not the one-off wpm high score.</span><br />
+<br />
+<span>Although my wrist pain seemed to go away aftre the first week of using the Kinesis, my fingers became tired of adjusting to the new way of typing. My hands were stiff, as if I had been training for the Olympics. Only after three weeks did I start to feel comfortable with it. If it weren&#39;t for the comments I read online, I would have sent it back after week 2.</span><br />
+<br />
+<span>I also had a problem with the left pinky finger, where I could not comfortably reach the <span class='inlinecode'>p</span> key. This involved moving the whole hand. An easy fix was to swap <span class='inlinecode'>p</span> with <span class='inlinecode'>;</span> on the keyboard layout.</span><br />
+<br />
+<h2 style='display: inline' id='considering-alternate-layouts'>Considering alternate layouts</h2><br />
+<br />
+<span>As I was going to learn 10-finger touch typing from scratch, I also played with the thought of switching from the Qwerty to the Dvorak or Colemak keymap, but after reading some comments on the internet, I decided against it: </span><br />
+<br />
+```
+
---
### dtail
-* Languages: Go (94.0%), JSON (2.8%), C (2.0%), Make (0.5%), C/C++ (0.3%), Config (0.2%), Shell (0.1%), Docker (0.1%)
-* Documentation: Text (79.4%), Markdown (20.6%)
-* Commits: 1049
-* Lines of Code: 20088
-* Lines of Documentation: 5674
-* Development Period: 2020-01-09 to 2025-06-20
-* Recent Activity: 51.7 days (avg. age of last 42 commits)
-* License: Apache-2.0
+* 💻 Languages: Go (93.9%), JSON (2.8%), C (2.0%), Make (0.5%), C/C++ (0.3%), Config (0.2%), Shell (0.2%), Docker (0.1%)
+* 📚 Documentation: Text (79.4%), Markdown (20.6%)
+* 📊 Commits: 1049
+* 📈 Lines of Code: 20091
+* 📄 Lines of Documentation: 5674
+* 📅 Development Period: 2020-01-09 to 2025-06-20
+* 🔥 Recent Activity: 51.8 days (avg. age of last 42 commits)
+* ⚖️ License: Apache-2.0
+* 🏷️ Latest Release: v4.2.0 (2023-06-21)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
=> showcase/dtail/image-1.png dtail screenshot
@@ -149,18 +243,40 @@ The system uses a client-server architecture where dtail servers run on target m
=> https://codeberg.org/snonux/dtail View on Codeberg
=> https://github.com/snonux/dtail View on GitHub
+Go from `internal/server/filldates.go`:
+
+```AUTO
+func fillDates(str string) string {
+ yyyesterday := time.Now().Add(-3 * constants.DayDuration).Format("20060102")
+ str = strings.ReplaceAll(str, "$yyyesterday", yyyesterday)
+
+ yyesterday := time.Now().Add(-2 * constants.DayDuration).Format("20060102")
+ str = strings.ReplaceAll(str, "$yyesterday", yyesterday)
+
+ yesterday := time.Now().Add(-1 * constants.DayDuration).Format("20060102")
+ str = strings.ReplaceAll(str, "$yesterday", yesterday)
+
+ today := time.Now().Format("20060102")
+ str = strings.ReplaceAll(str, "$today", today)
+
+ tomorrow := time.Now().Add(1 * constants.DayDuration).Format("20060102")
+ return strings.ReplaceAll(str, "$tomorrow", tomorrow)
+}
+```
+
---
### wireguardmeshgenerator
-* Languages: Ruby (73.5%), YAML (26.5%)
-* Documentation: Markdown (100.0%)
-* Commits: 33
-* Lines of Code: 396
-* Lines of Documentation: 24
-* Development Period: 2025-04-18 to 2025-05-11
-* Recent Activity: 71.0 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Ruby (73.5%), YAML (26.5%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 33
+* 📈 Lines of Code: 396
+* 📄 Lines of Documentation: 24
+* 📅 Development Period: 2025-04-18 to 2025-05-11
+* 🔥 Recent Activity: 71.1 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.0.0 (2025-05-11)
WireGuard Mesh Generator is a Ruby-based automation tool that simplifies the creation and management of WireGuard mesh VPN networks across multiple hosts. It automatically generates WireGuard configuration files for each node in the mesh, handles cryptographic key generation and management (including public/private keys and preshared keys), and provides automated deployment to remote machines via SSH/SCP. The tool is particularly useful for setting up secure, encrypted mesh networks between multiple servers or devices, eliminating the manual overhead of configuring WireGuard connections between every pair of nodes.
@@ -170,39 +286,66 @@ The implementation uses a YAML configuration file to define the network topology
=> https://codeberg.org/snonux/wireguardmeshgenerator View on Codeberg
=> https://github.com/snonux/wireguardmeshgenerator View on GitHub
+Ruby from `wireguardmeshgenerator.rb`:
+
+```AUTO
+def priv = File.read(@privkey_path).strip
+
+def psk(peer)
+ psk_path = "#{@psk_dir}/#{[@myself, peer].sort.join('_')}.key"
+```
+
---
### ior
-* Languages: C (57.8%), Go (39.6%), Make (1.5%), C/C++ (1.2%)
-* Documentation: Text (84.1%), Markdown (15.9%)
-* Commits: 316
-* Lines of Code: 9307
-* Lines of Documentation: 559
-* Development Period: 2024-01-18 to 2025-06-14
-* Recent Activity: 83.1 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: C (54.7%), Go (37.4%), Raku (5.4%), Make (1.4%), C/C++ (1.1%)
+* 📚 Documentation: Text (84.1%), Markdown (15.9%)
+* 📊 Commits: 316
+* 📈 Lines of Code: 9835
+* 📄 Lines of Documentation: 559
+* 📅 Development Period: 2024-01-18 to 2025-06-14
+* 🔥 Recent Activity: 83.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
+
+=> showcase/ior/image-1.png ior screenshot
-**I/O Riot NG (ior)** is a Linux-only system performance analysis tool that uses eBPF (Extended Berkeley Packet Filter) to trace and analyze synchronous I/O system calls in real-time. The tool captures detailed timing information for I/O operations and generates flamegraphs to visualize performance bottlenecks, making it particularly useful for identifying slow I/O patterns and understanding where applications spend time waiting for disk operations. This is a spiritual successor to the original I/O Riot project, reimplemented using modern Go and eBPF technology instead of the older SystemTap approach.
+Based on my analysis of the codebase, here's a comprehensive summary of the I/O Riot NG (ior) project:
-The implementation follows a hybrid architecture combining Go for the userspace application logic and C for the eBPF kernel programs. The tool attaches to kernel tracepoints for various syscalls (like `sys_enter_read`, `sys_exit_write`, etc.), collects timing data through eBPF ring buffers, and processes this data in userspace to generate collapsed stack traces suitable for flamegraph visualization using the Inferno flamegraph tool. The codebase is well-structured with separate packages for event handling, flamegraph generation, file operations, and BPF program management, making it a comprehensive solution for I/O performance analysis.
+=> showcase/ior/image-2.svg ior screenshot
+
+**I/O Riot NG** is a Linux-based performance monitoring tool that uses eBPF (extended Berkeley Packet Filter) to trace synchronous I/O system calls and analyze their execution times. This tool is particularly valuable for system performance analysis, allowing developers and system administrators to visualize I/O bottlenecks through detailed flamegraphs. It serves as a modern successor to the original I/O Riot project, migrating from SystemTap/C to a Go/C/BPF implementation for better performance and maintainability.
+
+The architecture combines kernel-level tracing with user-space analysis: eBPF programs (`internal/c/ior.bpf.c`) attach to kernel tracepoints to capture syscall entry/exit events, which are then processed by a Go-based event loop (`internal/eventloop.go`) that correlates enter/exit pairs, tracks file descriptors, and measures timing. The tool can operate in real-time mode for live monitoring or post-processing mode to generate flamegraphs from previously collected data using the Inferno flamegraph library. Key features include filtering capabilities for specific processes or file patterns, comprehensive statistics collection, and support for various I/O syscalls like open, read, write, close, and dup operations.
=> https://codeberg.org/snonux/ior View on Codeberg
=> https://github.com/snonux/ior View on GitHub
+C from `internal/c/maps.h`:
+
+```AUTO
+struct {
+ __uint(type, BPF_MAP_TYPE_RINGBUF);
+ __uint(max_entries, 1 << 24);
+} event_map SEC(".maps");
+```
+
---
### ds-sim
-* Languages: Java (98.9%), Shell (0.6%), CSS (0.5%)
-* Documentation: Markdown (98.7%), Text (1.3%)
-* Commits: 438
-* Lines of Code: 25762
-* Lines of Documentation: 3101
-* Development Period: 2008-05-15 to 2025-06-27
-* Recent Activity: 84.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Java (98.9%), Shell (0.6%), CSS (0.5%)
+* 📚 Documentation: Markdown (98.7%), Text (1.3%)
+* 📊 Commits: 438
+* 📈 Lines of Code: 25762
+* 📄 Lines of Documentation: 3101
+* 📅 Development Period: 2008-05-15 to 2025-06-27
+* 🔥 Recent Activity: 84.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
=> showcase/ds-sim/image-1.png ds-sim screenshot
@@ -214,18 +357,31 @@ The project is built on an event-driven architecture with clear component separa
=> https://codeberg.org/snonux/ds-sim View on Codeberg
=> https://github.com/snonux/ds-sim View on GitHub
+Java from `src/main/java/testing/LogType.java`:
+
+```AUTO
+public enum LogType {
+ GLOBAL,
+
+ PROCESS,
+
+ SYSTEM
+}
+```
+
---
### sillybench
-* Languages: Go (90.9%), Shell (9.1%)
-* Documentation: Markdown (100.0%)
-* Commits: 5
-* Lines of Code: 33
-* Lines of Documentation: 3
-* Development Period: 2025-04-03 to 2025-04-03
-* Recent Activity: 96.9 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Go (90.9%), Shell (9.1%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 5
+* 📈 Lines of Code: 33
+* 📄 Lines of Documentation: 3
+* 📅 Development Period: 2025-04-03 to 2025-04-03
+* 🔥 Recent Activity: 97.0 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
**SillyBench** is a simple Go benchmarking project designed to compare CPU performance between FreeBSD and Linux Bhyve VM environments. The project implements basic mathematical operations (integer multiplication and floating-point arithmetic) to measure computational performance differences across different operating systems and virtualization setups.
@@ -235,18 +391,28 @@ The implementation is minimal and focused, consisting of a basic Go module with
=> https://codeberg.org/snonux/sillybench View on Codeberg
=> https://github.com/snonux/sillybench View on GitHub
+Go from `main.go`:
+
+```AUTO
+func main() {
+ println("Hello world")
+}
+```
+
---
### gos
-* Languages: Go (98.6%), YAML (1.1%), JSON (0.2%)
-* Documentation: Markdown (100.0%)
-* Commits: 381
-* Lines of Code: 3967
-* Lines of Documentation: 411
-* Development Period: 2024-05-04 to 2025-06-12
-* Recent Activity: 113.9 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Go (98.6%), YAML (1.1%), JSON (0.2%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 381
+* 📈 Lines of Code: 3967
+* 📄 Lines of Documentation: 411
+* 📅 Development Period: 2024-05-04 to 2025-06-12
+* 🔥 Recent Activity: 113.9 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.0.0 (2025-03-04)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
=> showcase/gos/image-1.png gos screenshot
@@ -260,18 +426,29 @@ The tool is architected around a file-based queueing system where posts progress
=> https://codeberg.org/snonux/gos View on Codeberg
=> https://github.com/snonux/gos View on GitHub
+Go from `internal/table/table.go`:
+
+```AUTO
+func (t *Table) MustRender() {
+ if err := t.Render(); err != nil {
+ panic(err)
+ }
+}
+```
+
---
### foostats
-* Languages: Perl (100.0%)
-* Documentation: Markdown (85.1%), Text (14.9%)
-* Commits: 67
-* Lines of Code: 1299
-* Lines of Documentation: 154
-* Development Period: 2023-01-02 to 2025-07-07
-* Recent Activity: 133.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Perl (100.0%)
+* 📚 Documentation: Markdown (85.1%), Text (14.9%)
+* 📊 Commits: 67
+* 📈 Lines of Code: 1299
+* 📄 Lines of Documentation: 154
+* 📅 Development Period: 2023-01-02 to 2025-07-07
+* 🔥 Recent Activity: 133.5 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
Based on the README and project structure, **foostats** is a privacy-respecting web analytics tool written in Perl specifically designed for OpenBSD systems. It processes both traditional HTTP/HTTPS logs and Gemini protocol logs to generate comprehensive traffic statistics while maintaining visitor privacy through SHA3-512 IP hashing. The tool is built for the foo.zone ecosystem and similar sites that need analytics without compromising user privacy.
@@ -281,18 +458,29 @@ The project implements a modular architecture with seven core components: FileHe
=> https://codeberg.org/snonux/foostats View on Codeberg
=> https://github.com/snonux/foostats View on GitHub
+Perl from `foostats.pl`:
+
+```AUTO
+my sub parse_date ( $year, @line ) {
+ my $timestr = "$line[0] $line[1]";
+ return Time::Piece->strptime( $timestr, '%b %d' )
+ ->strftime("$year%m%d");
+}
+```
+
---
### rcm
-* Languages: Ruby (99.8%), TOML (0.2%)
-* Documentation: Markdown (100.0%)
-* Commits: 76
-* Lines of Code: 1373
-* Lines of Documentation: 48
-* Development Period: 2024-12-05 to 2025-02-28
-* Recent Activity: 137.6 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Ruby (99.8%), TOML (0.2%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 76
+* 📈 Lines of Code: 1373
+* 📄 Lines of Documentation: 48
+* 📅 Development Period: 2024-12-05 to 2025-02-28
+* 🔥 Recent Activity: 137.7 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
RCM (Ruby Configuration Management) is a lightweight, KISS (Keep It Simple, Stupid) configuration management system written in Ruby and designed for personal use. The project provides a domain-specific language (DSL) for declaratively managing system configuration, including files, directories, symlinks, and packages. It serves as an alternative to more complex configuration management tools like Ansible or Puppet, focusing on simplicity and ease of use for individual system administration tasks.
@@ -302,18 +490,31 @@ The system is implemented with a modular architecture centered around a DSL clas
=> https://codeberg.org/snonux/rcm View on Codeberg
=> https://github.com/snonux/rcm View on GitHub
+Ruby from `lib/dslkeywords/given.rb`:
+
+```AUTO
+def respond_to_missing? = true
+
+def met?
+ return false if @conds.key?(:hostname) && Socket.gethostname != @conds[:hostname].to_s
+
+ true
+end
+```
+
---
### gemtexter
-* Languages: Shell (64.6%), CSS (31.8%), Config (2.1%), HTML (1.5%)
-* Documentation: Text (76.8%), Markdown (23.2%)
-* Commits: 461
-* Lines of Code: 2047
-* Lines of Documentation: 1170
-* Development Period: 2021-05-21 to 2025-06-11
-* Recent Activity: 230.4 days (avg. age of last 42 commits)
-* License: GPL-3.0
+* 💻 Languages: Shell (67.9%), CSS (28.9%), Config (2.0%), HTML (1.3%)
+* 📚 Documentation: Text (76.8%), Markdown (23.2%)
+* 📊 Commits: 461
+* 📈 Lines of Code: 2253
+* 📄 Lines of Documentation: 1170
+* 📅 Development Period: 2021-05-21 to 2025-06-11
+* 🔥 Recent Activity: 230.5 days (avg. age of last 42 commits)
+* ⚖️ License: GPL-3.0
+* 🏷️ Latest Release: 3.0.0 (2024-10-01)
**Gemtexter** is a static site generator and blog engine that transforms content written in Gemini Gemtext format into multiple output formats. It's a comprehensive Bash-based tool designed to support the Gemini protocol (a simpler alternative to HTTP) while maintaining compatibility with traditional web technologies. The project converts a single source of Gemtext content into HTML (XHTML 1.0 Transitional), Markdown, and native Gemtext formats, enabling authors to write once and publish across multiple platforms including Gemini capsules, traditional websites, and GitHub/Codeberg pages.
@@ -323,18 +524,34 @@ The implementation is built entirely in Bash (version 5.x+) using a modular libr
=> https://codeberg.org/snonux/gemtexter View on Codeberg
=> https://github.com/snonux/gemtexter View on GitHub
+Shell from `lib/git.source.sh`:
+
+```AUTO
+ find "$CONTENT_BASE_DIR" -maxdepth 1 -mindepth 1 -type d |
+ while read -r content_dir; do
+ if [ -d "$content_dir/.git" ]; then
+ echo "$content_dir"
+ fi
+ done
+}
+
+git::add_all () {
+ local message="$1"; shift
+```
+
---
### quicklogger
-* Languages: Go (97.6%), Shell (1.5%), TOML (0.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 32
-* Lines of Code: 917
-* Lines of Documentation: 33
-* Development Period: 2024-01-20 to 2025-07-06
-* Recent Activity: 447.6 days (avg. age of last 42 commits)
-* License: MIT
+* 💻 Languages: Go (97.6%), Shell (1.5%), TOML (0.9%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 32
+* 📈 Lines of Code: 917
+* 📄 Lines of Documentation: 33
+* 📅 Development Period: 2024-01-20 to 2025-07-06
+* 🔥 Recent Activity: 447.7 days (avg. age of last 42 commits)
+* ⚖️ License: MIT
+* 🏷️ Latest Release: v0.0.3 (2025-07-06)
=> showcase/quicklogger/image-1.png quicklogger screenshot
@@ -348,18 +565,61 @@ The project follows a clean, single-file architecture with all functionality con
=> https://codeberg.org/snonux/quicklogger View on Codeberg
=> https://github.com/snonux/quicklogger View on GitHub
+Go from `main.go`:
+
+```AUTO
+func createPreferenceWindow(a fyne.App) fyne.Window {
+ window := a.NewWindow("Preferences")
+ directoryPreference := widget.NewEntry()
+ directoryPreference.SetText(a.Preferences().StringWithFallback("Directory", defaultDirectory))
+
+ tagDropdownPreference := widget.NewEntry()
+ tagDropdownPreference.SetText(a.Preferences().StringWithFallback("Tags", strings.Join(defaultTagItems, ",")))
+
+ whatDropdownPreference := widget.NewEntry()
+ whatDropdownPreference.SetText(a.Preferences().StringWithFallback("Whats", strings.Join(defaultWhatItems, ",")))
+
+ window.SetContent(container.NewVBox(
+ container.NewVBox(
+ widget.NewLabel("Directory:"),
+ directoryPreference,
+ widget.NewLabel("Tags:"),
+ tagDropdownPreference,
+ widget.NewLabel("Whats:"),
+ whatDropdownPreference,
+ ),
+ container.NewHBox(
+ widget.NewButton("Save", func() {
+ a.Preferences().SetString("Directory", directoryPreference.Text)
+ a.Preferences().SetString("Tags", tagDropdownPreference.Text)
+ a.Preferences().SetString("Whats", whatDropdownPreference.Text)
+ window.Hide()
+ }),
+ widget.NewButton("Reset dropdowns", func() {
+ tagDropdownPreference.SetText(strings.Join(defaultTagItems, ","))
+ whatDropdownPreference.SetText(strings.Join(defaultWhatItems, ","))
+ },
+ ),
+ )))
+ window.Resize(windowSize)
+
+ return window
+}
+```
+
---
### docker-gpodder-sync-server
-* Languages: Make (100.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 3
-* Lines of Code: 12
-* Lines of Documentation: 3
-* Development Period: 2024-03-24 to 2024-03-24
-* Recent Activity: 471.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Make (100.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 12
+* 📄 Lines of Documentation: 3
+* 📅 Development Period: 2024-03-24 to 2024-03-24
+* 🔥 Recent Activity: 471.5 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
This project is a **Docker containerization wrapper for a GPodder sync server**, specifically built around the micro-gpodder-server implementation from https://github.com/bohwaz/micro-gpodder-server. GPodder is a podcast client that allows users to synchronize their podcast subscriptions and episode states across multiple devices. The sync server enables this synchronization by providing a centralized service that podcast clients can connect to for managing subscriptions, episode progress, and playback history.
@@ -369,18 +629,34 @@ The project is implemented as a simple Docker build system with a Makefile that
=> https://codeberg.org/snonux/docker-gpodder-sync-server View on Codeberg
=> https://github.com/snonux/docker-gpodder-sync-server View on GitHub
+Make from `Makefile`:
+
+```AUTO
+build:
+ docker build -t micro-gpodder-server ./micro-gpodder-server
+run: build
+ if [ ! -d ./data ]; then mkdir ./data; fi
+ docker run \
+ --name micro-gpodder-server \
+ -v ./data:/var/www/server/data \
+ --hostname gpodder.example.org \
+ -p 8080:8080 micro-gpodder-server
+aws: build
+```
+
---
### terraform
-* Languages: Make (56.1%), YAML (43.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 123
-* Lines of Code: 98
-* Lines of Documentation: 52
-* Development Period: 2023-08-27 to 2025-04-05
-* Recent Activity: 501.5 days (avg. age of last 42 commits)
-* License: MIT
+* 💻 Languages: HCL (96.6%), Make (1.9%), YAML (1.5%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 123
+* 📈 Lines of Code: 2850
+* 📄 Lines of Documentation: 52
+* 📅 Development Period: 2023-08-27 to 2025-04-05
+* 🔥 Recent Activity: 501.5 days (avg. age of last 42 commits)
+* ⚖️ License: MIT
+* 🧪 Status: Experimental (no releases yet)
This is a comprehensive personal cloud infrastructure project built with Terraform that deploys a multi-tier AWS architecture for hosting self-hosted services. The infrastructure is organized into modular components: `org-buetow-base` provides the foundation (VPC, subnets, EFS storage, ECR), `org-buetow-bastion` creates a bastion host for secure access, `org-buetow-elb` sets up application load balancing, and `org-buetow-ecs` runs containerized services on AWS Fargate. The project also includes an EKS cluster option with EFS CSI driver integration for Kubernetes workloads.
@@ -390,18 +666,35 @@ The system is designed to host multiple personal services including Anki sync se
=> https://codeberg.org/snonux/terraform View on Codeberg
=> https://github.com/snonux/terraform View on GitHub
+HCL from `org-buetow-eks/remotestates.tf`:
+
+```AUTO
+data "terraform_remote_state" "base" {
+ backend = "s3"
+ config = {
+ bucket = "org-buetow-tfstate"
+ key = "org-buetow-base/terraform.tfstate"
+ region = "eu-central-1"
+ }
+}
+
+data "terraform_remote_state" "elb" {
+```
+
---
### gogios
-* Languages: Go (94.4%), YAML (3.4%), JSON (2.2%)
-* Documentation: Markdown (100.0%)
-* Commits: 77
-* Lines of Code: 1096
-* Lines of Documentation: 287
-* Development Period: 2023-04-17 to 2025-06-12
-* Recent Activity: 514.3 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Go (94.4%), YAML (3.4%), JSON (2.2%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 77
+* 📈 Lines of Code: 1096
+* 📄 Lines of Documentation: 287
+* 📅 Development Period: 2023-04-17 to 2025-06-12
+* 🔥 Recent Activity: 514.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.1.0 (2024-05-03)
+* 🤖 AI-Assisted: This project was partially created with the help of generative AI
=> showcase/gogios/image-1.png gogios screenshot
@@ -413,18 +706,29 @@ The implementation follows a clean architecture with concurrent check execution,
=> https://codeberg.org/snonux/gogios View on Codeberg
=> https://github.com/snonux/gogios View on GitHub
+Go from `internal/state.go`:
+
+```AUTO
+func (s state) reportStaleAlerts(sb *strings.Builder) int {
+ return s.reportBy(sb, false, true, func(cs checkState) bool {
+ return cs.Epoch < s.staleEpoch
+ })
+}
+```
+
---
### docker-radicale-server
-* Languages: Docker (53.1%), Make (46.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 4
-* Lines of Code: 32
-* Lines of Documentation: 3
-* Development Period: 2023-12-31 to 2023-12-31
-* Recent Activity: 555.0 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Docker (53.1%), Make (46.9%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 4
+* 📈 Lines of Code: 32
+* 📄 Lines of Documentation: 3
+* 📅 Development Period: 2023-12-31 to 2023-12-31
+* 🔥 Recent Activity: 555.1 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
This project is a **Docker containerization setup for Radicale**, a CalDAV and CardDAV server written in Python. Radicale is a lightweight, standards-compliant calendar and contacts server that allows users to synchronize their calendars and address books across multiple devices and applications. The project provides a complete Docker image and deployment configuration that makes it easy to run a personal or small-team calendar/contacts server.
@@ -434,18 +738,34 @@ The implementation uses Alpine Linux as the base image for a minimal footprint,
=> https://codeberg.org/snonux/docker-radicale-server View on Codeberg
=> https://github.com/snonux/docker-radicale-server View on GitHub
+Make from `Makefile`:
+
+```AUTO
+build:
+ docker build -t radicale .
+run: build
+ if [ ! -d collections ]; then mkdir collections; fi
+ if [ ! -d auth ]; then mkdir auth; fi
+ cp -v htpasswd-test auth/htpasswd
+ sh -c 'docker rm radicale; exit 0'
+ docker run \
+ -v collections:/collections \
+ -v auth:/auth \
+```
+
---
### docker-anki-sync-server
-* Languages: Docker (62.1%), Make (37.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 3
-* Lines of Code: 29
-* Lines of Documentation: 3
-* Development Period: 2023-08-13 to 2024-01-01
-* Recent Activity: 648.2 days (avg. age of last 42 commits)
-* License: MIT
+* 💻 Languages: Docker (62.1%), Make (37.9%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 29
+* 📄 Lines of Documentation: 3
+* 📅 Development Period: 2023-08-13 to 2024-01-01
+* 🔥 Recent Activity: 648.3 days (avg. age of last 42 commits)
+* ⚖️ License: MIT
+* 🧪 Status: Experimental (no releases yet)
This project is a Docker containerization of the Anki sync server, designed to provide a self-hosted synchronization service for Anki flashcard applications. Anki is a popular spaced repetition learning tool, and this project allows users to run their own sync server instead of relying on AnkiWeb's hosted service, giving them full control over their data privacy and synchronization infrastructure.
@@ -455,18 +775,34 @@ The implementation is built using a Rocky Linux base image with Python 3.9, and
=> https://codeberg.org/snonux/docker-anki-sync-server View on Codeberg
=> https://github.com/snonux/docker-anki-sync-server View on GitHub
+Make from `Makefile`:
+
+```AUTO
+all:
+ if [ ! -d anki-sync-server ]; then \
+ git clone https://github.com/ankicommunity/anki-sync-server; \
+ else \
+ cd anki-sync-server && git pull && cd ..; \
+ fi
+ docker build -t anki-sync-server:latest .
+aws:
+ docker build -t anki-sync-server:latest .
+ docker tag anki-sync-server:latest 634617747016.dkr.ecr.eu-central-1.amazonaws.com/anki-sync-server:latest
+```
+
---
### gorum
-* Languages: Go (91.3%), JSON (6.4%), YAML (2.3%)
-* Documentation: Markdown (100.0%)
-* Commits: 82
-* Lines of Code: 1525
-* Lines of Documentation: 15
-* Development Period: 2023-04-17 to 2023-11-19
-* Recent Activity: 700.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Go (91.3%), JSON (6.4%), YAML (2.3%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 82
+* 📈 Lines of Code: 1525
+* 📄 Lines of Documentation: 15
+* 📅 Development Period: 2023-04-17 to 2023-11-19
+* 🔥 Recent Activity: 700.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
Gorum is a minimalistic distributed quorum manager written in Go that implements a leader election and consensus mechanism across multiple nodes in a network. The system enables nodes to continuously vote for which node should be the leader based on priority scores, with automatic failover when nodes become unavailable. It's particularly useful for distributed systems that need to maintain a single authoritative node while providing high availability and fault tolerance.
@@ -476,38 +812,55 @@ The architecture consists of several key components: a quorum manager that handl
=> https://codeberg.org/snonux/gorum View on Codeberg
=> https://github.com/snonux/gorum View on GitHub
----
-
-### guprecords
-
-* Documentation: Markdown (100.0%)
-* Commits: 95
-* Lines of Code: 0
-* Lines of Documentation: 416
-* Development Period: 2013-03-22 to 2025-05-18
-* Recent Activity: 750.4 days (avg. age of last 42 commits)
-* License: No license found
-
-
-`guprecords` is a Raku-based command-line tool that analyzes and reports on system uptime statistics across multiple hosts. It reads uptime records from the `uptimed` daemon and generates comprehensive reports that help system administrators track host reliability and performance across their infrastructure.
-
-The tool is particularly useful for organizations managing multiple servers, as it provides a unified view of system uptime patterns. It parses raw uptime records (containing uptime duration, boot time, and OS information) from files collected from the `uptimed` daemon running on various hosts. The implementation uses an object-oriented design with classes for data aggregation (`Aggregator`, `Aggregate`, `HostAggregate`) and report generation (`Reporter`, `HostReporter`). It supports multiple analysis categories (Host, Kernel versions, OS families) and metrics (boot count, uptime, downtime, lifespan, and a composite score), with output in plaintext, Markdown, or Gemtext formats. The tool includes comprehensive testing with fixture files and can generate individual reports or complete analysis suites, making it valuable for infrastructure monitoring and capacity planning.
-
-=> https://codeberg.org/snonux/guprecords View on Codeberg
-=> https://github.com/snonux/guprecords View on GitHub
+Go from `internal/client/tcpclient.go`:
+
+```AUTO
+func tcpClientRun(ctx context.Context, address string, ch <-chan vote.Vote) error {
+ conn, err := net.Dial("tcp", address)
+ if err != nil {
+ return err
+ }
+ defer conn.Close()
+
+ for {
+ votes, ok := <-ch
+ if !ok {
+ return fmt.Errorf("channel closed - breaking tcpClientRun loop")
+ }
+
+ message, err := votes.ToJSON()
+ if err != nil {
+ return err
+ }
+
+ log.Println("tcpclient: sending", message, "to address", address)
+ if err := iorw.WriteStr(conn, message); err != nil {
+ return err
+ }
+
+ response, err := iorw.ReadStr(conn)
+ if err != nil {
+ return err
+ }
+
+ log.Println("tcpclient: received", response, "from address", address)
+ }
+}
+```
---
### randomjournalpage
-* Languages: Shell (94.1%), Make (5.9%)
-* Documentation: Markdown (100.0%)
-* Commits: 8
-* Lines of Code: 51
-* Lines of Documentation: 26
-* Development Period: 2022-06-02 to 2024-04-20
-* Recent Activity: 765.1 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (94.1%), Make (5.9%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 8
+* 📈 Lines of Code: 51
+* 📄 Lines of Documentation: 26
+* 📅 Development Period: 2022-06-02 to 2024-04-20
+* 🔥 Recent Activity: 765.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -518,18 +871,29 @@ The implementation is straightforward - a bash script that uses `find` to locate
=> https://codeberg.org/snonux/randomjournalpage View on Codeberg
=> https://github.com/snonux/randomjournalpage View on GitHub
+Shell from `randomjournalpage.sh`:
+
+```AUTO
+declare -r ARG="$1"
+
+declare -r JOURNAL_DIR="$HOME/Journals/"
+declare -r OUT_PDF=$JOURNAL_DIR/random_journal_extract.pdf
+declare -i NUM_PAGES_TO_EXTRACT=42 # This is the answear!
+```
+
---
### sway-autorotate
-* Languages: Shell (100.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 8
-* Lines of Code: 41
-* Lines of Documentation: 17
-* Development Period: 2020-01-30 to 2025-04-30
-* Recent Activity: 1058.6 days (avg. age of last 42 commits)
-* License: GPL-3.0
+* 💻 Languages: Shell (100.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 8
+* 📈 Lines of Code: 41
+* 📄 Lines of Documentation: 17
+* 📅 Development Period: 2020-01-30 to 2025-04-30
+* 🔥 Recent Activity: 1058.7 days (avg. age of last 42 commits)
+* ⚖️ License: GPL-3.0
+* 🧪 Status: Experimental (no releases yet)
**sway-autorotate** is a bash script for automatic screen rotation on tablets running the Sway window manager. It's specifically designed for touch-enabled devices like the Microsoft Surface Go 2 tablet, addressing the common need for automatic screen orientation changes when the device is physically rotated. The project is particularly useful for tablet users who frequently switch between portrait and landscape orientations, as it eliminates the need to manually rotate the display through system settings.
@@ -539,18 +903,31 @@ The implementation consists of two main components: `autorotate.sh` monitors the
=> https://codeberg.org/snonux/sway-autorotate View on Codeberg
=> https://github.com/snonux/sway-autorotate View on GitHub
+Shell from `autorotate.sh`:
+
+```AUTO
+set -euf -o pipefail
+
+declare -r WAYLANDINPUT=(
+ '1118:2485:Microsoft_Surface_Keyboard_Touchpad'
+ '1267:10780:ELAN9038:00_04F3:2A1C'
+)
+declare -r SCREEN=eDP-1
+```
+
---
### photoalbum
-* Languages: Shell (80.1%), Make (12.3%), Config (7.6%)
-* Documentation: Markdown (100.0%)
-* Commits: 153
-* Lines of Code: 342
-* Lines of Documentation: 39
-* Development Period: 2011-11-19 to 2022-04-02
-* Recent Activity: 1278.2 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (80.1%), Make (12.3%), Config (7.6%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 153
+* 📈 Lines of Code: 342
+* 📄 Lines of Documentation: 39
+* 📅 Development Period: 2011-11-19 to 2022-04-02
+* 🔥 Recent Activity: 1278.3 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.5.0 (2022-02-21)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -561,40 +938,72 @@ The implementation centers around a single Bash script (`photoalbum.sh`) that us
=> https://codeberg.org/snonux/photoalbum View on Codeberg
=> https://github.com/snonux/photoalbum View on GitHub
+Shell from `src/photoalbum.sh`:
+
+```AUTO
+ for sub in thumbs blurs photos; do
+ if [ -f "$DIST_DIR/$sub/$basename" ]; then
+ rm -v "$DIST_DIR/$sub/$basename"
+ fi
+ done
+ done
+}
+
+scalephotos () {
+ cd "$INCOMING_DIR" && find ./ -maxdepth 1 -type f | sort |
+ while read -r photo; do
+ declare photo="$(sed 's#^\./##' <<< "$photo")"
+ declare destphoto="$DIST_DIR/photos/$photo"
+ declare destphoto_nospace="${destphoto// /_}"
+```
+
---
### algorithms
-* Languages: Go (99.2%), Make (0.8%)
-* Documentation: Markdown (100.0%)
-* Commits: 82
-* Lines of Code: 1728
-* Lines of Documentation: 18
-* Development Period: 2020-07-12 to 2023-04-09
-* Recent Activity: 1429.4 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Go (99.2%), Make (0.8%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 82
+* 📈 Lines of Code: 1728
+* 📄 Lines of Documentation: 18
+* 📅 Development Period: 2020-07-12 to 2023-04-09
+* 🔥 Recent Activity: 1429.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-This is a comprehensive algorithms and data structures library implemented in Go that serves as a refresher exercise for computer science fundamentals. The project implements classic algorithms across three main categories: **sorting** (including quicksort, mergesort, insertion sort, and parallel variants), **searching** (featuring binary search trees, red-black trees, hash tables, and sets), and **data structures** (priority queues, array lists, and basic types).
+This is a comprehensive Go-based algorithms and data structures educational project that implements fundamental computer science concepts for learning and practice. The codebase is organized into four main packages: data structures (`ds`), sorting algorithms (`sort`), search algorithms (`search`), and priority queues (`queue`), with extensive test coverage and benchmarking capabilities.
-The implementation leverages Go's generics system with custom type constraints for numbers and integers, making the algorithms type-safe and reusable across different numeric types. The project is well-structured with separate packages for each algorithm category, includes comprehensive unit tests and benchmarking capabilities via Make targets, and demonstrates both sequential and parallel algorithm implementations. This makes it particularly useful for learning algorithm performance characteristics and comparing different approaches to classic computer science problems.
+The project leverages Go's generics system to provide type-safe implementations of classic algorithms like quicksort, mergesort, binary search trees, red-black trees, and hash tables. It includes both elementary and advanced implementations (parallel sorting, various priority queue implementations) and appears to be designed as educational material for an algorithms course. The architecture emphasizes clean separation of concerns with shared type definitions, comprehensive testing via `make test`, and performance analysis through `make bench`, making it a valuable resource for understanding algorithmic complexity and implementation patterns in Go.
=> https://codeberg.org/snonux/algorithms View on Codeberg
=> https://github.com/snonux/algorithms View on GitHub
+Go from `queue/heappriority.go`:
+
+```AUTO
+func (q *HeapPriority[T]) swim(k int) {
+ for k > 1 && q.a[k/2] < q.a[k] {
+ q.a.Swap(k/2, k)
+ k = k / 2
+ }
+}
+```
+
---
### geheim
-* Languages: Ruby (100.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 66
-* Lines of Code: 671
-* Lines of Documentation: 19
-* Development Period: 2018-05-26 to 2025-01-21
-* Recent Activity: 1431.2 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Ruby (100.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 66
+* 📈 Lines of Code: 671
+* 📄 Lines of Documentation: 19
+* 📅 Development Period: 2018-05-26 to 2025-01-21
+* 🔥 Recent Activity: 1431.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
Based on my analysis of the project, here's a concise summary:
@@ -606,67 +1015,100 @@ The system is architected around several key components: a configuration system
=> https://codeberg.org/snonux/geheim View on Codeberg
=> https://github.com/snonux/geheim View on GitHub
+Ruby from `geheim.rb`:
+
+```AUTO
+def out(message, prefix, flag = :none)
+ message = message.to_s unless message.instance_of?(String)
+ message.split("\n").each do |line|
+ if flag == :nonl
+ print "#{prefix} #{line}"
+```
+
---
-### xerl
+### perl-c-fibonacci
-* Languages: CSS (54.6%), XML (39.1%), Perl (4.0%), Make (2.2%)
-* Documentation: Text (91.2%), Org (4.9%), Markdown (3.9%)
-* Commits: 670
-* Lines of Code: 815
-* Lines of Documentation: 102
-* Development Period: 2011-03-06 to 2021-11-02
-* Recent Activity: 1847.8 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: C (80.4%), Make (19.6%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 4
+* 📈 Lines of Code: 51
+* 📄 Lines of Documentation: 69
+* 📅 Development Period: 2014-03-24 to 2022-04-23
+* 🔥 Recent Activity: 1910.4 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-Based on my analysis of the project files, here's a summary of Xerl:
+This project is a fascinating polyglot programming experiment that demonstrates how a single source file can be valid code in multiple programming languages simultaneously. The core file `fibonacci.pl.raku.c` is cleverly written to be syntactically valid in C, C++, Perl, and Raku, all while implementing the same Fibonacci sequence calculation. It achieves this through strategic use of C preprocessor macros that redefine Perl/Raku-style syntax (like `my`, `sub`, `BEGIN`) into valid C constructs, while the actual logic remains readable in both paradigms.
-**Xerl** is an open-source website template engine with Content Management System (CMS) features, written in object-oriented Perl and powered by FastCGI. It uses XML-based configuration and content files to generate static websites with multiple output formats (HTML5, XHTML, RSS feeds, and plain text).
+The project is useful as an educational tool for understanding language syntax similarities, demonstrating advanced preprocessor techniques, and showcasing creative programming approaches. The implementation uses a recursive Fibonacci algorithm with a global variable to pass arguments, and the build system (via Makefile) compiles and runs the same source code with four different language compilers/interpreters (gcc, g++, perl, raku) to prove it produces identical output across all platforms. This polyglot approach makes it both a technical curiosity and a practical demonstration of cross-language compatibility.
-The system works through a template-driven architecture where content is written in XML files with semantic tags (like `<pagetitle>`, `<text>`, `<enumeration>`) that get transformed into HTML using configurable transformation rules. The `config.xml` file defines how these semantic tags map to HTML elements, supporting variables and dynamic content insertion. Each website can have its own template configuration, content files, and static assets (CSS, images, fonts), making it useful for maintaining multiple related websites with consistent styling and structure while allowing customization per site. The project includes several example sites (paul.buetow.org, xerl.buetow.org) and redirect configurations, demonstrating its practical use for personal or organizational web presence management.
+=> https://codeberg.org/snonux/perl-c-fibonacci View on Codeberg
+=> https://github.com/snonux/perl-c-fibonacci View on GitHub
-=> https://codeberg.org/snonux/xerl View on Codeberg
-=> https://github.com/snonux/xerl View on GitHub
+C from `fibonacci.pl.raku.c`:
+
+```AUTO
+sub hello() {
+ printf("Hello, welcome to the Fibonacci Numbers!\n");
+ printf("This program is all, valid C and C++ and Perl and Raku code!\n");
+ printf("It calculates all fibonacci numbers from 0 to 9!\n\n");
+ return 0;
+}
+```
---
-### perl-c-fibonacci
+### guprecords
-* Languages: C (80.4%), Make (19.6%)
-* Documentation: Text (100.0%)
-* Commits: 4
-* Lines of Code: 51
-* Lines of Documentation: 69
-* Development Period: 2014-03-24 to 2022-04-23
-* Recent Activity: 1910.3 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Raku (100.0%)
+* 📊 Commits: 95
+* 📈 Lines of Code: 195
+* 📅 Development Period: 2013-03-22 to 2023-03-09
+* 🔥 Recent Activity: 2125.5 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: v1.0.0 (2023-04-29)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-This project is a fascinating polyglot programming experiment that demonstrates how a single source file can be valid code in multiple programming languages simultaneously. The core file `fibonacci.pl.raku.c` is cleverly written to be syntactically valid in C, C++, Perl, and Raku, all while implementing the same Fibonacci sequence calculation. It achieves this through strategic use of C preprocessor macros that redefine Perl/Raku-style syntax (like `my`, `sub`, `BEGIN`) into valid C constructs, while the actual logic remains readable in both paradigms.
+GupRecords is a Raku-based system administration tool that analyzes and reports on system uptime statistics across multiple hosts. It processes raw uptime records from various systems and generates formatted reports showing the top-performing hosts or operating systems based on metrics like uptime, boot count, downtime, and calculated meta-scores.
-The project is useful as an educational tool for understanding language syntax similarities, demonstrating advanced preprocessor techniques, and showcasing creative programming approaches. The implementation uses a recursive Fibonacci algorithm with a global variable to pass arguments, and the build system (via Makefile) compiles and runs the same source code with four different language compilers/interpreters (gcc, g++, perl, raku) to prove it produces identical output across all platforms. This polyglot approach makes it both a technical curiosity and a practical demonstration of cross-language compatibility.
+The tool is implemented with a clean object-oriented architecture featuring an Aggregator class that parses record files, Host and OS Aggregate classes that store statistics, and Reporter classes that generate formatted tables. It supports multiple analysis categories (host, OS, OS-major, uname) and various sorting criteria including uptime duration, boot frequency, system lifespan, and downtime. The formatted output includes visual indicators for active systems and provides both duration-based and numerical metrics in a structured table format, making it useful for system administrators to quickly identify the most reliable systems in their infrastructure.
-=> https://codeberg.org/snonux/perl-c-fibonacci View on Codeberg
-=> https://github.com/snonux/perl-c-fibonacci View on GitHub
+=> https://codeberg.org/snonux/guprecords View on Codeberg
+=> https://github.com/snonux/guprecords View on GitHub
+
+Raku from `guprecords.raku`:
+
+```AUTO
+sub do-it(Str:D \stats-dir, Reporter:D \reporter) {
+ my Aggregator \aggregator .= new;
+ aggregator.add-file($_) for dir(stats-dir, test => { /.records$/ });
+ reporter.aggregates = aggregator.aggregates;
+ reporter.report;
+}
+```
---
### ioriot
-* Languages: C (55.5%), C/C++ (24.0%), Config (19.6%), Make (1.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 50
-* Lines of Code: 12420
-* Lines of Documentation: 610
-* Development Period: 2018-03-01 to 2020-01-22
-* Recent Activity: 2451.8 days (avg. age of last 42 commits)
-* License: Apache-2.0
+* 💻 Languages: C (55.5%), C/C++ (24.0%), Config (19.6%), Make (1.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 50
+* 📈 Lines of Code: 12420
+* 📄 Lines of Documentation: 610
+* 📅 Development Period: 2018-03-01 to 2020-01-22
+* 🔥 Recent Activity: 2451.9 days (avg. age of last 42 commits)
+* ⚖️ License: Apache-2.0
+* 🏷️ Latest Release: 0.5.1 (2019-01-04)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
+=> showcase/ioriot/image-1.png ioriot screenshot
+
**I/O Riot** is a Linux I/O benchmarking tool designed to capture real production I/O operations and replay them on load test machines for performance analysis. Unlike traditional benchmarking tools that use artificial I/O patterns, I/O Riot records actual file system operations from production servers and reproduces them exactly on test hardware. This approach enables accurate performance testing, hardware evaluation, and I/O bottleneck identification without the complexity of distributed test environments.
The tool is implemented in C for minimal overhead and uses SystemTap for efficient kernel-space I/O capture. The architecture consists of five main components: capture (recording I/O operations), initialization (preparing test environment), replay (executing captured operations), analysis (performance evaluation), and iteration (testing different configurations). It supports major Linux file systems (ext2/3/4, xfs) and over 40 syscalls including read, write, open, close, and various file operations. This makes it particularly valuable for optimizing OS configurations, evaluating hardware upgrades, and identifying application-level I/O inefficiencies in production environments.
@@ -674,18 +1116,33 @@ The tool is implemented in C for minimal overhead and uses SystemTap for efficie
=> https://codeberg.org/snonux/ioriot View on Codeberg
=> https://github.com/snonux/ioriot View on GitHub
+C from `ioriot/src/datas/list.c`:
+
+```AUTO
+int list_key_insert_l(list_s *l, const long key, void *data)
+{
+ list_elem_s *current = l->first;
+
+ while (current) {
+ if (current->key_l == key)
+ return 0;
+ current = current->next;
+ }
+```
+
---
### staticfarm-apache-handlers
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 3
-* Lines of Code: 33
-* Lines of Documentation: 12
-* Development Period: 2015-01-02 to 2021-11-04
-* Recent Activity: 2960.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (96.4%), Make (3.6%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 919
+* 📄 Lines of Documentation: 12
+* 📅 Development Period: 2015-01-02 to 2021-11-04
+* 🔥 Recent Activity: 2960.6 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.1.3 (2015-01-02)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -696,17 +1153,29 @@ The system is particularly useful for distributed static content delivery where
=> https://codeberg.org/snonux/staticfarm-apache-handlers View on Codeberg
=> https://github.com/snonux/staticfarm-apache-handlers View on GitHub
+Perl from `debian/staticfarm-apache-handlers/usr/share/staticfarm/apache/handlers/StaticFarm/CacheControl.pm`:
+
+```AUTO
+sub my_warn {
+ my $msg = shift;
+
+ Apache2::ServerRec::warn("CacheControl: $msg");
+}
+```
+
---
### dyndns
-* Documentation: Text (100.0%)
-* Commits: 3
-* Lines of Code: 0
-* Lines of Documentation: 49
-* Development Period: 2014-03-24 to 2021-11-05
-* Recent Activity: 3196.4 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (100.0%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 18
+* 📄 Lines of Documentation: 49
+* 📅 Development Period: 2014-03-24 to 2021-11-05
+* 🔥 Recent Activity: 3196.5 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -721,14 +1190,15 @@ The implementation consists of a shell script (`update-dyndns`) that accepts hos
### mon
-* Languages: Shell (51.4%), Make (35.8%), Config (12.8%)
-* Documentation: Text (100.0%)
-* Commits: 7
-* Lines of Code: 179
-* Lines of Documentation: 789
-* Development Period: 2015-01-02 to 2021-11-05
-* Recent Activity: 3463.1 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (96.5%), Shell (1.8%), Make (1.2%), Config (0.4%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 7
+* 📈 Lines of Code: 5360
+* 📄 Lines of Documentation: 789
+* 📅 Development Period: 2015-01-02 to 2021-11-05
+* 🔥 Recent Activity: 3463.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.0.1 (2015-01-02)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -739,18 +1209,29 @@ The tool is particularly useful for system administrators and DevOps engineers w
=> https://codeberg.org/snonux/mon View on Codeberg
=> https://github.com/snonux/mon View on GitHub
+Perl from `debian/mon/usr/share/mon/lib/MAPI/JSON.pm`:
+
+```AUTO
+sub init {
+ my ($self) = @_;
+
+ return undef;
+}
+```
+
---
### rubyfy
-* Languages: Ruby (98.5%), JSON (1.5%)
-* Documentation: Markdown (100.0%)
-* Commits: 34
-* Lines of Code: 273
-* Lines of Documentation: 32
-* Development Period: 2015-09-29 to 2021-11-05
-* Recent Activity: 3467.3 days (avg. age of last 42 commits)
-* License: Apache-2.0
+* 💻 Languages: Ruby (98.5%), JSON (1.5%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 34
+* 📈 Lines of Code: 273
+* 📄 Lines of Documentation: 32
+* 📅 Development Period: 2015-09-29 to 2021-11-05
+* 🔥 Recent Activity: 3467.4 days (avg. age of last 42 commits)
+* ⚖️ License: Apache-2.0
+* 🏷️ Latest Release: 0 (2015-10-26)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -761,18 +1242,29 @@ The tool is implemented as a single Ruby script that leverages threading for par
=> https://codeberg.org/snonux/rubyfy View on Codeberg
=> https://github.com/snonux/rubyfy View on GitHub
+Ruby from `rubyfy.rb`:
+
+```AUTO
+def log(severity, message)
+ return if severity == :VERBOSE and not $opts["verbose"]
+ return if severity == :DEBUG and not $opts["debug"]
+
+ timestamp = $opts["timestamp"] ? "#{Time.now}|" : ""
+```
+
---
### pingdomfetch
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 9
-* Lines of Code: 49
-* Lines of Documentation: 412
-* Development Period: 2015-01-02 to 2021-11-05
-* Recent Activity: 3546.9 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (97.3%), Make (2.7%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 9
+* 📈 Lines of Code: 1839
+* 📄 Lines of Documentation: 412
+* 📅 Development Period: 2015-01-02 to 2021-11-05
+* 🔥 Recent Activity: 3547.0 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.0.2 (2015-01-02)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -783,18 +1275,32 @@ The project is implemented as a modular Perl application with a clean architectu
=> https://codeberg.org/snonux/pingdomfetch View on Codeberg
=> https://github.com/snonux/pingdomfetch View on GitHub
+Perl from `lib/PINGDOMFETCH/TLS.pm`:
+
+```AUTO
+sub new {
+ my ( $class, %vals ) = @_;
+
+ my $self = bless \%vals, $class;
+ $self->{is_critical} = 0;
+
+ return $self;
+}
+```
+
---
### gotop
-* Languages: Go (98.0%), Make (2.0%)
-* Documentation: Markdown (50.0%), Text (50.0%)
-* Commits: 57
-* Lines of Code: 499
-* Lines of Documentation: 8
-* Development Period: 2015-05-24 to 2021-11-03
-* Recent Activity: 3557.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Go (98.0%), Make (2.0%)
+* 📚 Documentation: Markdown (50.0%), Text (50.0%)
+* 📊 Commits: 57
+* 📈 Lines of Code: 499
+* 📄 Lines of Documentation: 8
+* 📅 Development Period: 2015-05-24 to 2021-11-03
+* 🔥 Recent Activity: 3557.7 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.1 (2015-06-01)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -805,42 +1311,113 @@ The implementation follows a concurrent architecture using Go's goroutines and c
=> https://codeberg.org/snonux/gotop View on Codeberg
=> https://github.com/snonux/gotop View on GitHub
+Go from `gotop/main.go`:
+
+```AUTO
+func receiveD(dRxChan <-chan diskstats.Diskstats) {
+ for d := range dRxChan {
+ _ = d
+ }
+}
+```
+
+---
+
+### xerl
+
+* 💻 Languages: Perl (98.3%), Config (1.2%), Make (0.5%)
+* 📊 Commits: 670
+* 📈 Lines of Code: 1675
+* 📅 Development Period: 2011-03-06 to 2018-12-22
+* 🔥 Recent Activity: 3613.4 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.0.0 (2018-12-22)
+
+⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
+
+Based on my analysis of the project files, here's a summary of Xerl:
+
+**Xerl** is an open-source website template engine with Content Management System (CMS) features, written in object-oriented Perl and powered by FastCGI. It uses XML-based configuration and content files to generate static websites with multiple output formats (HTML5, XHTML, RSS feeds, and plain text).
+
+The system works through a template-driven architecture where content is written in XML files with semantic tags (like `<pagetitle>`, `<text>`, `<enumeration>`) that get transformed into HTML using configurable transformation rules. The `config.xml` file defines how these semantic tags map to HTML elements, supporting variables and dynamic content insertion. Each website can have its own template configuration, content files, and static assets (CSS, images, fonts), making it useful for maintaining multiple related websites with consistent styling and structure while allowing customization per site. The project includes several example sites (paul.buetow.org, xerl.buetow.org) and redirect configurations, demonstrating its practical use for personal or organizational web presence management.
+
+=> https://codeberg.org/snonux/xerl View on Codeberg
+=> https://github.com/snonux/xerl View on GitHub
+
+Perl from `Xerl/Page/Content.pm`:
+
+```AUTO
+sub _insert_special_vars {
+ my $self = $_[0];
+ my $rules = $_[1];
+ my $element = $_[2];
+ my $rtext = $_[3];
+ my $config = $self->get_config();
+
+ $$rtext =~ s/@\@text\@\@/$_=$element->get_text();chomp;$_/geo;
+ $$rtext =~ s/@\@ln\@\@//go;
+
+ if ( $$rtext =~ /@\@(.*?)\@\@/ ) {
+ my $params = $element->get_params();
+ return unless ref $params eq 'HASH';
+ $$rtext =~ s/@\@(.*?)\@\@/$params->{$1}||''/geo;
+ }
+
+ return undef;
+}
+```
+
---
### debroid
-* Languages: Shell (92.0%), Make (8.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 16
-* Lines of Code: 88
-* Lines of Documentation: 148
-* Development Period: 2015-06-18 to 2015-12-05
-* Recent Activity: 3661.4 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (92.0%), Make (8.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 16
+* 📈 Lines of Code: 88
+* 📄 Lines of Documentation: 148
+* 📅 Development Period: 2015-06-18 to 2015-12-05
+* 🔥 Recent Activity: 3661.5 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
=> showcase/debroid/image-1.png debroid screenshot
-**Debroid** is a project that enables running a full Debian GNU/Linux chroot environment on rooted Android devices, specifically targeting the LG G3 D855 running CyanogenMod 13 (Android 6). The project allows users to run a complete Linux distribution alongside Android, providing access to the full Debian package ecosystem and command-line tools while maintaining the Android user interface and functionality.
+**Debroid** is a project that enables running a full Debian GNU/Linux environment on Android devices using a chroot container. Specifically designed for the LG G3 D855 running CyanogenMod 13 (Android 6), it allows users to install and run a complete Debian Jessie system alongside Android. This is particularly useful for developers and power users who want access to a full Linux command-line environment, package management system, and GNU/Linux tools directly on their Android device without dual-booting or replacing the Android system.
-The implementation uses a two-stage debootstrap process: first creating a Debian Jessie base image on a Linux host machine, then completing the installation inside the Android chroot environment. The system leverages loop devices to mount the Debian filesystem image stored on the SD card, bind-mounts essential Android directories (/proc, /dev, /sys) into the chroot, and includes startup scripts (jessie.sh:1, userinit.sh:1) for automatic service initialization and chroot management. This approach provides a powerful Linux development environment on Android without requiring a full dual-boot setup, making it useful for developers who need Linux tools and services on their mobile devices.
+The implementation works by creating a Debian filesystem image using debootstrap on a Linux host machine, then transferring it to the Android device's SD card. The core architecture uses loop devices to mount the Debian image file and bind mounts to share Android's `/proc`, `/dev`, and `/sys` filesystems with the chroot environment. The `jessie.sh` script handles mounting/unmounting the chroot and provides commands to enter the Debian environment or start services, while `userinit.sh` automatically starts Debian services at Android boot time. The project includes automation scripts and a Makefile for easy deployment via ADB.
=> https://codeberg.org/snonux/debroid View on Codeberg
=> https://github.com/snonux/debroid View on GitHub
+Shell from `data/local/userinit.sh`:
+
+```AUTO
+while : ; do
+ if [ -d /storage/sdcard1/Linux/jessie ]; then
+ cd /storage/sdcard1/Linux && /system/bin/sh jessie.sh start_services
+ /system/bin/date
+ exit 0
+ fi
+ /system/bin/sleep 1
+done
+```
+
---
### fapi
-* Languages: Python (92.0%), Make (7.3%), Config (0.7%)
-* Documentation: Text (98.3%), Markdown (1.7%)
-* Commits: 219
-* Lines of Code: 710
-* Lines of Documentation: 539
-* Development Period: 2014-03-10 to 2021-11-03
-* Recent Activity: 3939.4 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Python (96.6%), Make (3.1%), Config (0.3%)
+* 📚 Documentation: Text (98.3%), Markdown (1.7%)
+* 📊 Commits: 219
+* 📈 Lines of Code: 1681
+* 📄 Lines of Documentation: 539
+* 📅 Development Period: 2014-03-10 to 2021-11-03
+* 🔥 Recent Activity: 3939.5 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.0.2 (2014-11-17)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -851,18 +1428,27 @@ The implementation is written in Python and built on top of the bigsuds library,
=> https://codeberg.org/snonux/fapi View on Codeberg
=> https://github.com/snonux/fapi View on GitHub
+Python from `contrib/bigsuds-1.0/bigsuds.py`:
+
+```AUTO
+def _create_client_wrapper(self, client, wsdl_name):
+ client.set_options(headers=self._headers)
+ return super(_BIGIPSession, self)._create_client_wrapper(client, wsdl_name)
+```
+
---
### template
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 22
-* Lines of Code: 58
-* Lines of Documentation: 228
-* Development Period: 2013-03-22 to 2021-11-04
-* Recent Activity: 3993.8 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Make (89.2%), Shell (10.8%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 22
+* 📈 Lines of Code: 65
+* 📄 Lines of Documentation: 228
+* 📅 Development Period: 2013-03-22 to 2021-11-04
+* 🔥 Recent Activity: 3993.9 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.0.0.0 (2013-03-22)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -873,18 +1459,31 @@ The project implements a clean, Make-based build system with automatic versionin
=> https://codeberg.org/snonux/template View on Codeberg
=> https://github.com/snonux/template View on GitHub
+Make from `Makefile`:
+
+```AUTO
+NAME=template
+all: version documentation build
+
+
+build:
+ cp -p ./src/$(NAME) bin/$(NAME)
+ sed -i "s/VERSION_DEVEL/$$(cat .version)/" bin/$(NAME)
+```
+
---
### muttdelay
-* Languages: Make (87.7%), Vim Script (11.0%), Config (1.4%)
-* Documentation: Text (100.0%)
-* Commits: 41
-* Lines of Code: 73
-* Lines of Documentation: 96
-* Development Period: 2013-03-22 to 2021-11-05
-* Recent Activity: 4006.8 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Make (47.1%), Shell (46.3%), Vim Script (5.9%), Config (0.7%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 41
+* 📈 Lines of Code: 136
+* 📄 Lines of Documentation: 96
+* 📅 Development Period: 2013-03-22 to 2021-11-05
+* 🔥 Recent Activity: 4006.9 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.2.0 (2014-07-05)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -895,18 +1494,31 @@ The implementation is elegantly simple, consisting of a bash script that operate
=> https://codeberg.org/snonux/muttdelay View on Codeberg
=> https://github.com/snonux/muttdelay View on GitHub
+Make from `Makefile`:
+
+```AUTO
+NAME=muttdelay
+all: version documentation build
+
+
+build:
+ cp -p ./src/$(NAME) bin/$(NAME)
+ sed -i "s/VERSION_DEVEL/$$(cat .version)/" bin/$(NAME)
+```
+
---
### netdiff
-* Languages: Make (96.9%), Config (3.1%)
-* Documentation: Text (100.0%)
-* Commits: 42
-* Lines of Code: 64
-* Lines of Documentation: 106
-* Development Period: 2013-03-22 to 2021-11-05
-* Recent Activity: 4014.3 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (52.2%), Make (46.3%), Config (1.5%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 42
+* 📈 Lines of Code: 134
+* 📄 Lines of Documentation: 106
+* 📅 Development Period: 2013-03-22 to 2021-11-05
+* 🔥 Recent Activity: 4014.4 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.1.5 (2014-06-22)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -921,14 +1533,15 @@ The tool works by having both hosts run the same command simultaneously - one ac
### pwgrep
-* Languages: Shell (85.0%), Make (15.0%)
-* Documentation: Text (80.8%), Markdown (19.2%)
-* Commits: 142
-* Lines of Code: 493
-* Lines of Documentation: 26
-* Development Period: 2009-09-27 to 2021-11-02
-* Recent Activity: 4057.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (85.0%), Make (15.0%)
+* 📚 Documentation: Text (80.8%), Markdown (19.2%)
+* 📊 Commits: 142
+* 📈 Lines of Code: 493
+* 📄 Lines of Documentation: 26
+* 📅 Development Period: 2009-09-27 to 2021-11-02
+* 🔥 Recent Activity: 4057.7 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.9.3 (2014-06-14)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -939,18 +1552,29 @@ The implementation leverages GPG for strong encryption, ensuring passwords are n
=> https://codeberg.org/snonux/pwgrep View on Codeberg
=> https://github.com/snonux/pwgrep View on GitHub
+Shell from `bin/pwgrep.sh`:
+
+```AUTO
+function pwdbls () {
+ echo Available Databases:
+ _pwdbls
+ echo Current database: $DB
+}
+```
+
---
### japi
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 41
-* Lines of Code: 62
-* Lines of Documentation: 144
-* Development Period: 2013-03-22 to 2021-11-05
-* Recent Activity: 4062.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (78.3%), Make (21.7%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 41
+* 📈 Lines of Code: 286
+* 📄 Lines of Documentation: 144
+* 📅 Development Period: 2013-03-22 to 2021-11-05
+* 🔥 Recent Activity: 4062.7 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.4.3 (2014-06-16)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -965,14 +1589,15 @@ The implementation uses modern Perl with the Moo object system and consists of t
### perl-poetry
-* Languages: Perl (100.0%)
-* Documentation: Markdown (100.0%)
-* Commits: 2
-* Lines of Code: 191
-* Lines of Documentation: 8
-* Development Period: 2014-03-24 to 2014-03-24
-* Recent Activity: 4123.9 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (100.0%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 2
+* 📈 Lines of Code: 191
+* 📄 Lines of Documentation: 8
+* 📅 Development Period: 2014-03-24 to 2014-03-24
+* 🔥 Recent Activity: 4124.0 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🧪 Status: Experimental (no releases yet)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -983,16 +1608,32 @@ Each script explores different themes - Christmas celebrations, mathematical stu
=> https://codeberg.org/snonux/perl-poetry View on Codeberg
=> https://github.com/snonux/perl-poetry View on GitHub
+Perl from `php.pl`:
+
+```AUTO
+require abs Perl and not undef$ined; sub knowledges {};
+
+hell: warn if PHP and not Perl;
+
+heaven: do index all, knowledges unless not Perl
+ and not try { require PHP if defined };
+
+require Switch and delete $evil{PHP};
+
+Oh_Yes: do { PHP => Perl } for all, time;
+```
+
---
### ipv6test
-* Languages: Perl (100.0%)
-* Commits: 7
-* Lines of Code: 80
-* Development Period: 2011-07-09 to 2015-01-13
-* Recent Activity: 4203.9 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Perl (100.0%)
+* 📊 Commits: 7
+* 📈 Lines of Code: 80
+* 📅 Development Period: 2011-07-09 to 2015-01-13
+* 🔥 Recent Activity: 4204.0 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -1003,24 +1644,42 @@ The implementation uses a straightforward approach with three test endpoints: on
=> https://codeberg.org/snonux/ipv6test View on Codeberg
=> https://github.com/snonux/ipv6test View on GitHub
+Perl from `index.pl`:
+
+```AUTO
+Congratulations, you have connected to a server that will display your method of connection, either IPv6 (preferred) or IPv4 (old and crusty). Well IPv6 is already ~15 years old either but not as old as IPv4 ;)
+<br /><br />
+Nevertheless, please choose your destiny:
+<ul>
+ <li><a href="http://ipv6.buetow.org">ipv6.buetow.org</a> for IPv6 & IPv4 Test</li>
+ <li><a href="http://test4.ipv6.buetow.org">test4.ipv6.buetow.org</a> for IPv4 Only Test</li>
+ <li><a href="http://test6.ipv6.buetow.org">test6.ipv6.buetow.org</a> for IPv6 Only Test</li>
+</ul>
+If your browser times-out when trying to connect to this server then you do not have an IPv6 or IPv4 path (depends on which test you are running) to the server. If your browser returns an error that the host cannot be found then the DNS servers you are using are unable to resolve the AAAA or A DNS record (depends on which test you are running again) for the server. If your browser is able to connect to the "IPv6 Only Test", yet using the "IPv6 & IPv4 Test" returns a page stating you are using IPv4, then your browser and/or IP stack in your machine are preferring IPv4 over IPv6. It also might be that your operating system supports IPv6 but your web-browser doesn't.
+END
+
+if ($ENV{SERVER_NAME} eq 'ipv6.buetow.org') {
+```
+
---
### cpuinfo
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 28
-* Lines of Code: 58
-* Lines of Documentation: 75
-* Development Period: 2010-11-05 to 2021-11-05
-* Recent Activity: 4244.6 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Shell (53.2%), Make (46.8%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 28
+* 📈 Lines of Code: 124
+* 📄 Lines of Documentation: 75
+* 📅 Development Period: 2010-11-05 to 2021-11-05
+* 🔥 Recent Activity: 4244.7 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 1.0.2 (2014-06-22)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-**cpuinfo** is a small system utility that provides human-readable CPU information by parsing `/proc/cpuinfo` on Linux systems. It extracts and displays key processor details including the CPU model, physical processors, cores, hyper-threading status, clock speeds, and bogomips in a clean, organized format. The tool is particularly useful for system administrators and developers who need to quickly understand the CPU architecture and capabilities of a system without parsing the raw `/proc/cpuinfo` output manually.
+**cpuinfo** is a small command-line utility that provides a human-readable summary of CPU information on Linux systems. It parses `/proc/cpuinfo` using AWK to extract and display key processor details including the CPU model, cache size, number of physical processors, cores, and whether hyper-threading is enabled. The tool calculates total CPU frequency and bogomips across all cores, making it easier to understand complex multi-core and multi-processor configurations at a glance.
-The implementation is elegantly simple, consisting of a single shell script that uses GNU AWK (gawk) to parse the `/proc/cpuinfo` file. The AWK script intelligently counts physical processors, cores, and logical CPUs, calculates total and per-core frequencies, detects hyper-threading status, and formats the output in a readable way. The project includes proper packaging for Debian systems, comprehensive documentation, and example outputs from different system configurations, making it a well-rounded utility for Linux system analysis.
+The implementation is remarkably simple - a single shell script that uses GNU AWK to parse the kernel's CPU information and format it into a clear, structured output. It's particularly useful for system administrators and developers who need to quickly understand CPU topology, especially on servers with multiple processors or complex threading configurations where the raw `/proc/cpuinfo` output can be overwhelming.
=> https://codeberg.org/snonux/cpuinfo View on Codeberg
=> https://github.com/snonux/cpuinfo View on GitHub
@@ -1029,14 +1688,15 @@ The implementation is elegantly simple, consisting of a single shell script that
### loadbars
-* Languages: Make (100.0%)
-* Documentation: Text (100.0%)
-* Commits: 527
-* Lines of Code: 48
-* Lines of Documentation: 100
-* Development Period: 2010-11-05 to 2015-05-23
-* Recent Activity: 4274.7 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: Perl (97.4%), Make (2.6%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 527
+* 📈 Lines of Code: 1828
+* 📄 Lines of Documentation: 100
+* 📅 Development Period: 2010-11-05 to 2015-05-23
+* 🔥 Recent Activity: 4274.8 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: 0.7.5 (2014-06-22)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -1047,16 +1707,38 @@ The application is implemented using a multi-threaded architecture where each mo
=> https://codeberg.org/snonux/loadbars View on Codeberg
=> https://github.com/snonux/loadbars View on GitHub
+Perl from `lib/Loadbars/Config.pm`:
+
+```AUTO
+sub write () {
+ display_warn( "Overwriting config file " . Loadbars::Constants->CONFFILE )
+ if -f Loadbars::Constants->CONFFILE;
+
+ open my $conffile, '>', Loadbars::Constants->CONFFILE or do {
+ display_warn( "$!: " . Loadbars::Constants->CONFFILE );
+
+ return undef;
+ };
+
+ for ( grep !/title/, keys %C ) {
+ print $conffile "$_=$C{$_}\n";
+ }
+
+ close $conffile;
+}
+```
+
---
### perldaemon
-* Languages: Perl (90.1%), Config (9.9%)
-* Commits: 110
-* Lines of Code: 242
-* Development Period: 2011-02-05 to 2022-04-21
-* Recent Activity: 4324.2 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Perl (72.3%), Shell (23.8%), Config (3.9%)
+* 📊 Commits: 110
+* 📈 Lines of Code: 614
+* 📅 Development Period: 2011-02-05 to 2022-04-21
+* 🔥 Recent Activity: 4324.2 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.4 (2022-04-29)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -1067,40 +1749,63 @@ The architecture centers around a modular plugin system where custom functionali
=> https://codeberg.org/snonux/perldaemon View on Codeberg
=> https://github.com/snonux/perldaemon View on GitHub
+Perl from `lib/PerlDaemon/PerlDaemon.pl`:
+
+```AUTO
+sub trunc ($) {
+ my $file = shift;
+ open my $fh, ">$file" or die "Can't write $file: $!\n";
+ print $fh '';
+ close $fh;
+}
+```
+
---
### awksite
-* Languages: HTML (58.8%), Config (41.2%)
-* Documentation: Text (60.0%), Markdown (40.0%)
-* Commits: 3
-* Lines of Code: 34
-* Lines of Documentation: 10
-* Development Period: 2011-01-27 to 2014-06-22
-* Recent Activity: 4655.2 days (avg. age of last 42 commits)
-* License: No license found
+* 💻 Languages: AWK (72.1%), HTML (16.4%), Config (11.5%)
+* 📚 Documentation: Text (60.0%), Markdown (40.0%)
+* 📊 Commits: 3
+* 📈 Lines of Code: 122
+* 📄 Lines of Documentation: 10
+* 📅 Development Period: 2011-01-27 to 2014-06-22
+* 🔥 Recent Activity: 4655.2 days (avg. age of last 42 commits)
+* ⚖️ License: No license found
+* 🏷️ Latest Release: v0.2 (2011-01-27)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
-**Awksite** is a lightweight CGI application written in GNU AWK that generates dynamic HTML websites. It's designed to be minimal and portable, running on any *NIX system with GNU AWK installed without requiring additional dependencies or complex web frameworks. The application uses a simple templating system where placeholders in HTML templates (marked with `%%key%%`) are replaced with values from a configuration file, making it easy to create dynamic content like server uptime, current date, or sorted file contents.
+**AWKsite** is a lightweight CGI application written in GNU AWK that generates dynamic HTML websites. It's designed to run on Unix-like systems and provides a simple templating system for creating dynamic web content. The application is particularly useful for creating basic dynamic websites without requiring complex web frameworks or databases - it's ideal for simple status pages, basic content management, or educational purposes where you want to demonstrate CGI concepts with minimal dependencies.
-The architecture is elegantly simple: the main CGI script (`index.cgi`) reads configuration values from `awksite.conf`, processes an HTML template file line by line, and replaces template variables with their corresponding values. Configuration values can be static text or dynamic content generated by shell commands (prefixed with `!`). Special template variables like `%%!sort filename%%` can execute operations like sorting file contents. This approach makes it useful for creating simple dynamic websites, system status pages, or basic content management without the overhead of larger web frameworks, particularly appealing for embedded systems or minimalist web setups.
+The implementation consists of a main AWK script (`index.cgi`) that reads configuration from `awksite.conf` and processes an HTML template (`template.html`) by replacing template variables (marked with `%%variable%%`) with values from the configuration file. The system supports both static values and dynamic content generated by executing shell commands (prefixed with `!`). For example, `%%date%%` gets replaced with the output of the `date` command, and `%%uptime%%` shows server uptime. The template engine also supports sorting file contents with a special `!sort filename` syntax, making it easy to display sorted lists of data.
=> https://codeberg.org/snonux/awksite View on Codeberg
=> https://github.com/snonux/awksite View on GitHub
+AWK from `index.cgi`:
+
+```AUTO
+function process_line(line) {
+ if (line ~ /%%.+%%/)
+ return insert_template_value(line)
+ return line
+}
+```
+
---
### jsmstrade
-* Languages: Java (76.0%), Shell (15.4%), XML (8.6%)
-* Documentation: Markdown (100.0%)
-* Commits: 20
-* Lines of Code: 720
-* Lines of Documentation: 6
-* Development Period: 2008-06-21 to 2021-11-03
-* Recent Activity: 4717.8 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Java (76.0%), Shell (15.4%), XML (8.6%)
+* 📚 Documentation: Markdown (100.0%)
+* 📊 Commits: 20
+* 📈 Lines of Code: 720
+* 📄 Lines of Documentation: 6
+* 📅 Development Period: 2008-06-21 to 2021-11-03
+* 🔥 Recent Activity: 4717.9 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v0.3 (2009-02-08)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -1113,18 +1818,35 @@ The implementation follows a clean three-class architecture: `SMain` handles the
=> https://codeberg.org/snonux/jsmstrade View on Codeberg
=> https://github.com/snonux/jsmstrade View on GitHub
+Java from `sources/smstrade/SFrame.java`:
+
+```AUTO
+public void disposeWithParent() {
+ if (!dispose && parent != null && parent instanceof Window) {
+ Window window = (Window) parent;
+ window.addWindowListener(new WindowAdapter() {
+ public void windowClosed(WindowEvent we) {
+ SFrame.this.dispose();
+ }
+ });
+ }
+ dispose = true;
+}
+```
+
---
### netcalendar
-* Languages: Java (83.0%), HTML (12.9%), XML (3.0%), CSS (0.8%), Make (0.2%)
-* Documentation: Text (89.7%), Markdown (10.3%)
-* Commits: 50
-* Lines of Code: 17380
-* Lines of Documentation: 947
-* Development Period: 2009-02-07 to 2021-05-01
-* Recent Activity: 5348.5 days (avg. age of last 42 commits)
-* License: GPL-2.0
+* 💻 Languages: Java (83.0%), HTML (12.9%), XML (3.0%), CSS (0.8%), Make (0.2%)
+* 📚 Documentation: Text (89.7%), Markdown (10.3%)
+* 📊 Commits: 50
+* 📈 Lines of Code: 17380
+* 📄 Lines of Documentation: 947
+* 📅 Development Period: 2009-02-07 to 2021-05-01
+* 🔥 Recent Activity: 5348.6 days (avg. age of last 42 commits)
+* ⚖️ License: GPL-2.0
+* 🏷️ Latest Release: v0.1 (2009-02-08)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -1139,16 +1861,27 @@ The implementation uses a clean separation of concerns with dedicated packages f
=> https://codeberg.org/snonux/netcalendar View on Codeberg
=> https://github.com/snonux/netcalendar View on GitHub
+Java from `sources/shared/MyVector.java`:
+
+```AUTO
+public void appendVector(Vector vecAppend) {
+ Enumeration enumAppend = vecAppend.elements();
+ while (enumAppend.hasMoreElements())
+ this.add(enumAppend.nextElement());
+}
+```
+
---
### hsbot
-* Languages: Haskell (98.5%), Make (1.5%)
-* Commits: 80
-* Lines of Code: 601
-* Development Period: 2009-11-22 to 2011-10-17
-* Recent Activity: 5444.2 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Haskell (98.5%), Make (1.5%)
+* 📊 Commits: 80
+* 📈 Lines of Code: 601
+* 📅 Development Period: 2009-11-22 to 2011-10-17
+* 🔥 Recent Activity: 5444.2 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -1159,18 +1892,34 @@ The implementation uses a clean separation of concerns with modules for IRC conn
=> https://codeberg.org/snonux/hsbot View on Codeberg
=> https://github.com/snonux/hsbot View on GitHub
+Haskell from `HsBot/Plugins/StoreMessages.hs`:
+
+```AUTO
+module HsBot.Plugins.StoreMessages (makeStoreMessages) where
+
+import Control.Exception
+
+import HsBot.Plugins.Base
+
+import HsBot.Base.Env
+import HsBot.Base.State
+
+storeMessages :: CallbackFunction
+```
+
---
### ychat
-* Languages: C++ (63.2%), C/C++ (26.7%), Perl (3.0%), HTML (2.7%), Config (2.5%), Make (1.2%), Shell (0.5%), CSS (0.3%)
-* Documentation: Text (100.0%)
-* Commits: 67
-* Lines of Code: 35610
-* Lines of Documentation: 101
-* Development Period: 2008-05-15 to 2014-06-30
-* Recent Activity: 5554.7 days (avg. age of last 42 commits)
-* License: GPL-2.0
+* 💻 Languages: C++ (48.9%), Shell (22.7%), C/C++ (20.7%), Perl (2.5%), HTML (2.1%), Config (1.9%), Make (0.9%), CSS (0.2%)
+* 📚 Documentation: Text (100.0%)
+* 📊 Commits: 67
+* 📈 Lines of Code: 45956
+* 📄 Lines of Documentation: 101
+* 📅 Development Period: 2008-05-15 to 2014-06-30
+* 🔥 Recent Activity: 5554.8 days (avg. age of last 42 commits)
+* ⚖️ License: GPL-2.0
+* 🏷️ Latest Release: yhttpd-0.7.2 (2013-04-06)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -1183,18 +1932,34 @@ The architecture is built around several key managers: a socket manager for hand
=> https://codeberg.org/snonux/ychat View on Codeberg
=> https://github.com/snonux/ychat View on GitHub
+C++ from `logd.cpp`:
+
+```AUTO
+struct tm *t_m;
+time_t t_cur=time(NULL);
+t_m=gmtime(&t_cur);
+
+char buffer[100];
+strftime(buffer, 100, "[%d/%b/%Y:%H:%M:%S %z]", t_m);
+string s_time=buffer;
+string s_logstr = request["REMOTE_ADDR"] + " - - "+s_time+" \"" + request["QUERY_STRING"]+"\" 200 0 \""+request["request"]+"\" \""+request["User-Agent"]+"\"\n";
+
+s_queue.push(s_logstr);
+```
+
---
### vs-sim
-* Languages: Java (98.8%), Shell (0.7%), XML (0.4%)
-* Documentation: LaTeX (98.4%), Text (1.4%), Markdown (0.2%)
-* Commits: 411
-* Lines of Code: 16303
-* Lines of Documentation: 2903
-* Development Period: 2008-05-15 to 2021-05-01
-* Recent Activity: 5740.6 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: Java (98.8%), Shell (0.7%), XML (0.4%)
+* 📚 Documentation: LaTeX (98.4%), Text (1.4%), Markdown (0.2%)
+* 📊 Commits: 411
+* 📈 Lines of Code: 16303
+* 📄 Lines of Documentation: 2903
+* 📅 Development Period: 2008-05-15 to 2021-05-01
+* 🔥 Recent Activity: 5740.7 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🏷️ Latest Release: v1.0 (2008-08-24)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
@@ -1207,18 +1972,31 @@ The implementation features a modular architecture with separate packages for co
=> https://codeberg.org/snonux/vs-sim View on Codeberg
=> https://github.com/snonux/vs-sim View on GitHub
+Java from `sources/prefs/editors/VSSimulatorEditor.java`:
+
+```AUTO
+public VSSimulatorEditor(VSPrefs prefs, VSSimulatorFrame simulatorFrame,
+ boolean openedNewWindow) {
+ super(prefs, prefs, prefs.getString("lang.en.name")
+ + " - " + prefs.getString("lang.en.prefs"));
+ this.simulatorFrame = simulatorFrame;
+ this.openedNewWindow = openedNewWindow;
+}
+```
+
---
### fype
-* Languages: C (67.9%), C/C++ (23.6%), HTML (6.9%), Make (1.6%)
-* Documentation: Text (61.4%), LaTeX (38.6%)
-* Commits: 99
-* Lines of Code: 8622
-* Lines of Documentation: 1474
-* Development Period: 2008-05-15 to 2014-06-30
-* Recent Activity: 5768.2 days (avg. age of last 42 commits)
-* License: Custom License
+* 💻 Languages: C (67.9%), C/C++ (23.6%), HTML (6.9%), Make (1.6%)
+* 📚 Documentation: Text (61.4%), LaTeX (38.6%)
+* 📊 Commits: 99
+* 📈 Lines of Code: 8622
+* 📄 Lines of Documentation: 1474
+* 📅 Development Period: 2008-05-15 to 2014-06-30
+* 🔥 Recent Activity: 5768.3 days (avg. age of last 42 commits)
+* ⚖️ License: Custom License
+* 🧪 Status: Experimental (no releases yet)
⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.
diff --git a/about/showcase/debroid/image-1.png b/about/showcase/debroid/image-1.png
index d045d3b8..6dc745f6 100644
--- a/about/showcase/debroid/image-1.png
+++ b/about/showcase/debroid/image-1.png
@@ -46,7 +46,7 @@
<script type="application/json" id="client-env">{"locale":"en","featureFlags":["alternate_user_config_repo","api_insights_show_missing_data_banner","appearance_settings","attestations_filtering","attestations_sorting","client_version_header","codespaces_prebuild_region_target_update","contact_requests_implicit_opt_in","contentful_lp_copilot_extensions","contentful_lp_flex_features","contentful_lp_footnotes","copilot_agents_view_v2","copilot_chat_attach_multiple_images","copilot_chat_vision_in_claude","copilot_chat_vision_skip_thread_create","copilot_chat_wholearea_dd","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_free_to_paid_telem","copilot_ftp_settings_upgrade","copilot_ftp_upgrade_to_pro_from_models","copilot_ftp_your_copilot_settings","copilot_immersive_agent_sessions_direct_creation","copilot_immersive_structured_model_picker","copilot_new_immersive_references_ui","copilot_no_floating_button","copilot_read_shared_conversation","copilot_spaces_support_forks","copilot_spark_allow_empty_commit","copilot_spark_single_user_iteration","copilot_spark_use_streaming","copilot_task_oriented_assistive_prompts","copilot_workbench_connection_reload_banner","copilot_workbench_iterate_panel","copilot_workbench_preview_analytics","copilot_workbench_refresh_on_wsod","custom_copilots_128k_window","custom_copilots_capi_mode","custom_copilots_issues_prs","direct_to_salesforce","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","insert_before_patch","issues_catch_non_json_graphql_response","issues_preserve_tokens_in_urls","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_create_milestone","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","issues_react_set_height_in_markdown","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","memex_mwl_filter_field_delimiter","nonreporting_relay_graphql_status_codes","primer_primitives_experimental","primer_react_select_panel_with_modern_action_list","remove_child_patch","sample_network_conn_type","scheduled_reminders_updated_limits","site_homepage_contentful","site_msbuild_hide_integrations","site_msbuild_launch","site_msbuild_webgl_hero","spark_commit_on_default_branch","spark_sync_repository_after_iteration","swp_enterprise_contact_form","use_paginated_repo_picker_cost_center_form","viewscreen_sandbox","workbench_store_readonly"]}</script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/high-contrast-cookie-a58297b2ebf8.js"></script>
-<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-952dcae2a41f.js" defer="defer"></script>
+<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-945310d5217e.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-a8c266e5f126.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-1d3d52-babac9434833.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-f3dd72be4f2c.js" defer="defer"></script>
@@ -60,7 +60,7 @@
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_markdown-toolbar-element_dist_index_js-6a8c7d9a08fe.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-cadbad-aba5025babc7.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-86cb7fc402e2.js" defer="defer"></script>
-<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-68eff60a5be0.js" defer="defer"></script>
+<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-65797218adf2.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-bb80ec-34c4b68b1dd3.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-b93a87060d31.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_morphdom_dist_morphdom-esm_js-300e8e4e0414.js" defer="defer"></script>
@@ -86,13 +86,13 @@
<meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
<meta name="route-controller" content="blob" data-turbo-transient>
<meta name="route-action" content="show" data-turbo-transient>
- <meta name="fetch-nonce" content="v2:0d918447-d906-e6b2-5e15-02f0ebe4d0d9">
+ <meta name="fetch-nonce" content="v2:0a950cfc-c8d9-c0c9-e066-88597b2b30d1">
<meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">
- <meta name="request-id" content="CADE:15B7D7:D6E93E:DCB5CE:686D75DC" data-pjax-transient="true"/><meta name="html-safe-nonce" content="ea48fe31f0a0daacd5653d87c7ec2b1e032bf0885722087acda1dded5c1bc77c" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDQURFOjE1QjdENzpENkU5M0U6RENCNUNFOjY4NkQ3NURDIiwidmlzaXRvcl9pZCI6IjUwMTcyMjE5MDQ2MjQwODg1NDAiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="94689f995eae612df70899bb8975d32da13117f0118f6be1240b6e8507102035" data-pjax-transient="true"/>
+ <meta name="request-id" content="B31C:264D07:4F7349:51CECC:686D91F2" data-pjax-transient="true"/><meta name="html-safe-nonce" content="96a549def022972e39dcff015bb7eb951d63c31b5f3eeeae4f80bdf62bd20dfb" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMzFDOjI2NEQwNzo0RjczNDk6NTFDRUNDOjY4NkQ5MUYyIiwidmlzaXRvcl9pZCI6IjYwMzY0NjIwMDY2ODIwOTYxMTQiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="9626e1718529b2f31836275044a76ab5e08f1a34f8eaccfda6890bf93eba99bf" data-pjax-transient="true"/>
@@ -168,10 +168,10 @@
<meta name="expected-hostname" content="github.com">
- <meta http-equiv="x-pjax-version" content="874cb045be7d1f6909fd0fadc0bec5f74d7e60d66a497b1f5fb0ced975745a2a" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-version" content="131b6b54c3ff57eef78dbde23b313ea5e0b8297c15c44e186afde5e5d234c05b" data-turbo-track="reload">
<meta http-equiv="x-pjax-csp-version" content="352e51c42d5f5727a7c545752bf34d1f83f40219e7036c6959817149a51651bc" data-turbo-track="reload">
<meta http-equiv="x-pjax-css-version" content="1ec14dc41555459fbdfcfe40430bcae4f79bba9df052e253c0ac6d36d6b9da75" data-turbo-track="reload">
- <meta http-equiv="x-pjax-js-version" content="aa89a59aafb9ec87d35df851cda916cb729f5c8ba96fa33c33d6a2e8cc58e34f" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-js-version" content="3406c3bba0cc3ead0d863e5269aed4bc727254941b0c7762cfb60fa215a2b172" data-turbo-track="reload">
<meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">
@@ -195,7 +195,7 @@
<meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
- <meta name="release" content="ec5e6b51beb727070e2a5ea333b207e5773c626a">
+ <meta name="release" content="9899acf579daa3b66a2b87d30a9dde92b82feac3">
<meta name="ui-target" content="full">
<link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
@@ -231,7 +231,7 @@
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_cookie_index_js-node_modules_primer_live-region-element_dist_esm_index_j-1ca8f6-89ab81577c38.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ui-commands_ui-commands_ts-b755d908e0b1.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-b3dd4b1cb532.js" defer="defer"></script>
-<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.8d5e42bdd3cd6a27871d.module.css" />
+<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.5fdb25ed878a5138c363.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.47de85e2c17af43cefd5.module.css" />
<react-partial
@@ -293,22 +293,22 @@
</a>
<div class="AppHeader-appearanceSettings">
<react-partial-anchor>
- <button data-target="react-partial-anchor.anchor" id="icon-button-4f58f963-512a-4bce-af15-58e73635c35e" aria-labelledby="tooltip-a97c9386-1c00-42fe-9cd2-84d3108f4d43" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual">
+ <button data-target="react-partial-anchor.anchor" id="icon-button-e3928bc5-8c3b-465a-96b9-542f99557072" aria-labelledby="tooltip-a5df7685-5914-4525-bc5b-b760f454537d" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual">
<path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path>
</svg>
-</button><tool-tip id="tooltip-a97c9386-1c00-42fe-9cd2-84d3108f4d43" for="icon-button-4f58f963-512a-4bce-af15-58e73635c35e" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip>
+</button><tool-tip id="tooltip-a5df7685-5914-4525-bc5b-b760f454537d" for="icon-button-e3928bc5-8c3b-465a-96b9-542f99557072" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip>
<template data-target="react-partial-anchor.template">
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_document-metadata_document-metadata_ts-ui_packages_promise-with-resolvers-polyfil-1e7a2a-b50af437b812.js" defer="defer"></script>
<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/appearance-settings-631c3b2ed371.js" defer="defer"></script>
-<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.8d5e42bdd3cd6a27871d.module.css" />
+<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.5fdb25ed878a5138c363.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.4e1ca273f504ba849f8c.module.css" />
<react-partial
partial-name="appearance-settings"
data-ssr="false"
data-attempted-ssr="false"
- data-react-profiling="true"
+ data-react-profiling="false"
>
<script type="application/json" data-target="react-partial.embeddedData">{"props":{}}</script>
@@ -970,7 +970,7 @@
-<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="V9G-tBj1-ecY4jjHnoqvqL-e1AOrvsxUuhWdQSS5OLaVa3XHQdCcTAMLKVbcpBmTsvnTAZjmzKWwQNnzKm74uw" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="" data-current-org="" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true">
+<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="Fc-ClUcGVS37cefWITbtaqjtVoClZA2lA14dpzFlpeqqp9hK31LHS9L3lgCS4mdlYN6FYWbGe0iUMjq1PQpCig" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="" data-current-org="" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true">
<div
class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded"
data-action="click:qbsearch-input#searchInputContainerClicked"
@@ -1034,7 +1034,7 @@
></div>
<div class="QueryBuilder-InputWrapper">
<div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div>
- <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-f0ff532f-5b4e-455d-be34-86aab22e478e" data-target="query-builder.input" data-action="
+ <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-98aa9e80-b21e-40a8-9cf3-6444f4192b72" data-target="query-builder.input" data-action="
input:query-builder#inputChange
blur:query-builder#inputBlur
keydown:query-builder#inputKeydown
@@ -1271,7 +1271,7 @@
id="query-builder-test-results"
></ul>
</div>
- <div class="FormControl-inlineValidation" id="validation-f0ff532f-5b4e-455d-be34-86aab22e478e" hidden="hidden">
+ <div class="FormControl-inlineValidation" id="validation-98aa9e80-b21e-40a8-9cf3-6444f4192b72" hidden="hidden">
<span class="FormControl-inlineValidation--visual">
<svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill">
<path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path>
@@ -1312,7 +1312,7 @@
</div>
<scrollable-region data-labelled-by="feedback-dialog-title">
- <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="T1c6R3AGF6KB3SU38DOO3wvYZlrV2oxMzBH/ue2Wp5DlGBjZinwLkeAOYoHZ9BdzrW6T5uetgEZgPmZJ4kVjbQ==" />
+ <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="geAHzdUVzthOksbsJmS3rzBomSHLdWDYcO1KTgyahER59BXtg8A7ccTcm7/KTZQ7LerFroB72bJnVrrNK5g2AQ==" />
<p>We read every piece of feedback, and take your input very seriously.</p>
<textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea>
<input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox">
@@ -1350,7 +1350,7 @@
<div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div>
<div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm">
- <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="+KC6meB/iZhzav7uGZ9DZCZ543popGrpWEgknk+8Kxe1FKm4itHf2R4ji6JIPEgf2sQvhMMWm17Z2R3Vklrn5g==" />
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="3GAqGxSDYJQx1o4prbnu3QNnOFZwVAHmkiAB/8oMfbCSkUxY4nl4ANdxtzAvVAj8GYbTjug9cVPSZ+n7U5Jp7g==" />
<div data-target="custom-scopes.customScopesModalDialogFlash"></div>
<input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField">
@@ -1368,7 +1368,7 @@
placeholder="github-ruby"
required
maxlength="50">
- <input type="hidden" data-csrf="true" value="5arhAdFT7j0jQwYI+Hy0WgaPoZQv3f8IQ78w+xykW7KrJSV1ZHVAF3Rngi28wkD7p5ogzWu6hgvlT9mOWQmWKg==" />
+ <input type="hidden" data-csrf="true" value="MUrdHXivRPGgSQieRufcO3dGBT+a7yzqoJlVeNeMfpZD+smVpfSOZP6Udf8VaEtxYDFMQzs+J+Y782VxQYbr2g==" />
</auto-check>
</div>
@@ -1423,7 +1423,7 @@
<h4 data-view-component="true" class="color-fg-default mb-2"> Sign in to GitHub
</h4>
-<!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/session" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="lB2y8mCztyetGejbBWi8DmKbwwMayJM9he6E2995fjOinqNkkuBf1rkD6unM/cSbMiKeZSA+t6vr99kz6dw3tQ==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" />
+<!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/session" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="O1dUS+KTaBRWgWakhs4W/2/YONipsochQRj5KM8D2URmEhsH7LHcAwAn+7+8C9icupchRQPO/0rDQmt9xIxBwg==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" />
<label for="login_field">
Username or email address
@@ -1445,9 +1445,9 @@
<input type="hidden" name="allow_signup" id="allow_signup" autocomplete="off" class="form-control" />
<input type="hidden" name="client_id" id="client_id" autocomplete="off" class="form-control" />
<input type="hidden" name="integration" id="integration" autocomplete="off" class="form-control" />
-<input class="form-control" type="text" name="required_field_6133" hidden="hidden" />
-<input class="form-control" type="hidden" name="timestamp" value="1752004060231" />
-<input class="form-control" type="hidden" name="timestamp_secret" value="13da1ee1740f0af77d8c2aaf54468b982794f94a84748ac87bb82efc1604c1c0" />
+<input class="form-control" type="text" name="required_field_120f" hidden="hidden" />
+<input class="form-control" type="hidden" name="timestamp" value="1752011250457" />
+<input class="form-control" type="hidden" name="timestamp_secret" value="62d2ffac64d47b2dd350816c1040084f14d21b014c0c0f2e900987d74c3dac96" />
<input type="submit" name="commit" value="Sign in" class="btn btn-primary btn-block js-sign-in-button" data-disable-with="Signing in…" data-signin-label="Sign in" data-sso-label="Sign in with your identity provider" development="false" disable-emu-sso="false" />
@@ -1474,20 +1474,20 @@
<div class="AppHeader-appearanceSettings">
<react-partial-anchor>
- <button data-target="react-partial-anchor.anchor" id="icon-button-7cc0864c-adb5-42f4-b86f-fc92201759ab" aria-labelledby="tooltip-e67e5f0d-aeb9-4e1a-bf8c-4c3375170774" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual">
+ <button data-target="react-partial-anchor.anchor" id="icon-button-2d52a861-1280-443f-9e6c-8b643b4b8b2b" aria-labelledby="tooltip-b4553d51-de07-46ca-9366-e5ae7878b754" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual">
<path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path>
</svg>
-</button><tool-tip id="tooltip-e67e5f0d-aeb9-4e1a-bf8c-4c3375170774" for="icon-button-7cc0864c-adb5-42f4-b86f-fc92201759ab" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip>
+</button><tool-tip id="tooltip-b4553d51-de07-46ca-9366-e5ae7878b754" for="icon-button-2d52a861-1280-443f-9e6c-8b643b4b8b2b" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip>
<template data-target="react-partial-anchor.template">
- <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.8d5e42bdd3cd6a27871d.module.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.5fdb25ed878a5138c363.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.4e1ca273f504ba849f8c.module.css" />
<react-partial
partial-name="appearance-settings"
data-ssr="false"
data-attempted-ssr="false"
- data-react-profiling="false"
+ data-react-profiling="true"
>
<script type="application/json" data-target="react-partial.embeddedData">{"props":{}}</script>
@@ -1514,10 +1514,10 @@
<span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
<span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
- <button id="icon-button-4b7c55f8-ff43-4151-9846-883ca9fa46c9" aria-labelledby="tooltip-847297ab-6c04-45bd-92c9-c5a1b47a6487" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
+ <button id="icon-button-c5242a31-ece3-424d-af19-6eafac25a1ef" aria-labelledby="tooltip-983d489e-5115-4af9-a574-961eb85544c2" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
<path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
-</button><tool-tip id="tooltip-847297ab-6c04-45bd-92c9-c5a1b47a6487" for="icon-button-4b7c55f8-ff43-4151-9846-883ca9fa46c9" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>
+</button><tool-tip id="tooltip-983d489e-5115-4af9-a574-961eb85544c2" for="icon-button-c5242a31-ece3-424d-af19-6eafac25a1ef" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>
diff --git a/index.gmi b/index.gmi
index d62b7e45..d2dbaab2 100644
--- a/index.gmi
+++ b/index.gmi
@@ -1,6 +1,6 @@
# Hello!
-> This site was generated at 2025-07-02T00:37:08+03:00 by `Gemtexter`
+> This site was generated at 2025-07-09T00:47:35+03:00 by `Gemtexter`
Welcome to the foo.zone!
diff --git a/stats/20250531.gmi b/stats/20250531.gmi
deleted file mode 100644
index 95223578..00000000
--- a/stats/20250531.gmi
+++ /dev/null
@@ -1,108 +0,0 @@
-## Stats for 2025-05-31
-
-### Summary
-
-* Total requests: 4107
-* Filtered requests: 39949
-* Gemini requests: 63
-* Web requests: 4044
-* IPv4 requests: 3019
-* IPv6 requests: 1088
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 45 |
-| Gemini Gemfeed | 2 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 42 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 137 |
-| standby.foo.zone | 65 |
-| irregular.ninja | 12 |
-| www.foo.zone | 7 |
-| paul.buetow.org | 2 |
-| blowfish.buetow.org | 2 |
-| www.irregular.ninja | 2 |
-| standby.dory.buetow.org | 2 |
-| buetow.org | 1 |
-| standby.paul.buetow.org | 1 |
-| standby.irregular.ninja | 1 |
-| www.dory.buetow.org | 1 |
-| dtail.dev | 1 |
-| alt.irregular.ninja | 1 |
-| www.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|--------------------------------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 15 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 11 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 11 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 9 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 7 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 6 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 6 |
-| standby.foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 4 |
-| foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 4 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 4 |
-| standby.foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 4 |
-| standby.foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 4 |
-| standby.foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 4 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 4 |
-| foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 4 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 4 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 3 |
-| standby.foo.zone/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes... | 3 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 3 |
-| standby.foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 3 |
-| standby.foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 3 |
-| standby.foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 3 |
-| foo.zone/about/novels... | 3 |
-| foo.zone/gemfeed/index... | 3 |
-| standby.foo.zone/gemfeed/2022-04-10-creative-universe... | 3 |
-| standby.foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 3 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 3 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 3 |
-| foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 3 |
-| standby.foo.zone/gemfeed/2023-02-26-how-to-shut-down-after-work... | 3 |
-| foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 2 |
-| foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again... | 2 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 2 |
-| standby.foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 2 |
-| standby.foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 2 |
-| standby.dory.buetow.org/Dorybau... | 2 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 2 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 2 |
-| standby.foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 2 |
-| standby.foo.zone/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta... | 2 |
-| standby.foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 2 |
-| standby.foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 2 |
-| standby.foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 2 |
-| foo.zone/notes/when... | 2 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 2 |
-| standby.foo.zone/gemfeed/2023-08-18-site-reliability-engineering-part-1... | 2 |
-| standby.foo.zone/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250601.gmi b/stats/20250601.gmi
deleted file mode 100644
index 4f0344c2..00000000
--- a/stats/20250601.gmi
+++ /dev/null
@@ -1,105 +0,0 @@
-## Stats for 2025-06-01
-
-### Summary
-
-* Total requests: 3245
-* Filtered requests: 39657
-* Gemini requests: 8
-* Web requests: 3237
-* IPv4 requests: 2610
-* IPv6 requests: 635
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 42 |
-| Gemini Gemfeed | 1 |
-| Gemini Atom | 0 |
-| Web Gemfeed | 0 |
-| Web Atom | 41 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 93 |
-| standby.foo.zone | 66 |
-| irregular.ninja | 17 |
-| www.foo.zone | 7 |
-| www.irregular.ninja | 6 |
-| paul.buetow.org | 1 |
-| buetow.org | 1 |
-| dtail.dev | 1 |
-| www.alt.irregular.ninja | 1 |
-| dory.buetow.org | 1 |
-| standby.alt.irregular.ninja | 1 |
-| standby.irregular.ninja | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|---------------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 7 |
-| foo.zone/gemfeed/2024-07-05-random-weird-things... | 6 |
-| standby.foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 6 |
-| standby.foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 5 |
-| standby.foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 5 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 5 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 5 |
-| standby.foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| standby.foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 4 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 4 |
-| standby.foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 4 |
-| standby.foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 4 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 3 |
-| standby.foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 3 |
-| www.irregular.ninja/html/index... | 3 |
-| foo.zone/uptime-stats... | 3 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| standby.foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again... | 3 |
-| standby.foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 3 |
-| foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 3 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 3 |
-| foo.zone/index... | 3 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 3 |
-| irregular.ninja/html/page-1... | 3 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 3 |
-| foo.zone/gemfeed/2024-12-15-random-helix-themes... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| standby.foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 3 |
-| standby.foo.zone/gemfeed/2008-06-26-perl-poetry... | 3 |
-| standby.foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 2 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 2 |
-| standby.foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 2 |
-| www.irregular.ninja/page-1... | 2 |
-| standby.foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 2 |
-| foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again... | 2 |
-| foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 2 |
-| foo.zone/about/index... | 2 |
-| irregular.ninja/html/index... | 2 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 2 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 2 |
-| foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku... | 2 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 2 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 2 |
-| foo.zone/notes/the-stoic-challenge... | 2 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 2 |
-| standby.foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 2 |
-| standby.foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 2 |
-| standby.foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 2 |
-| foo.zone/about/resources... | 2 |
-| standby.foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250602.gmi b/stats/20250602.gmi
deleted file mode 100644
index d296e056..00000000
--- a/stats/20250602.gmi
+++ /dev/null
@@ -1,103 +0,0 @@
-## Stats for 2025-06-02
-
-### Summary
-
-* Total requests: 4108
-* Filtered requests: 39561
-* Gemini requests: 18
-* Web requests: 4090
-* IPv4 requests: 3050
-* IPv6 requests: 1058
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 44 |
-| Gemini Gemfeed | 1 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 42 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 142 |
-| standby.foo.zone | 52 |
-| irregular.ninja | 27 |
-| standby.dory.buetow.org | 3 |
-| www.foo.zone | 2 |
-| buetow.org | 2 |
-| www.irregular.ninja | 1 |
-| www.dtail.dev | 1 |
-| paul.buetow.org | 1 |
-| www.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 12 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 11 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 10 |
-| foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 10 |
-| foo.zone/about/resources... | 9 |
-| standby.foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 9 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 9 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 7 |
-| foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 7 |
-| standby.foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways... | 6 |
-| standby.foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 5 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 5 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 5 |
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 5 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 4 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 4 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 4 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 4 |
-| irregular.ninja/html/page-1... | 4 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 4 |
-| foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 4 |
-| foo.zone/gemfeed/2023-08-18-site-reliability-engineering-part-1... | 4 |
-| foo.zone/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes... | 4 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 3 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 3 |
-| foo.zone/gemfeed/2024-12-15-random-helix-themes... | 3 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 3 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 3 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 3 |
-| foo.zone/gemfeed/index... | 3 |
-| foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 3 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| foo.zone/about/index... | 3 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 3 |
-| foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep... | 2 |
-| standby.foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 2 |
-| standby.foo.zone/gemfeed/2024-12-15-random-helix-themes... | 2 |
-| foo.zone/gemfeed/2023-11-19-site-reliability-engineering-part-2... | 2 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 2 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 2 |
-| irregular.ninja/html/4-17... | 2 |
-| foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 2 |
-| irregular.ninja/html/2-39... | 2 |
-| standby.foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 2 |
-| standby.foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 2 |
-| foo.zone/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml... | 2 |
-| irregular.ninja/html/6-20... | 2 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 2 |
-| irregular.ninja/html/9-1... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250603.gmi b/stats/20250603.gmi
deleted file mode 100644
index 4d9896e1..00000000
--- a/stats/20250603.gmi
+++ /dev/null
@@ -1,109 +0,0 @@
-## Stats for 2025-06-03
-
-### Summary
-
-* Total requests: 4035
-* Filtered requests: 41061
-* Gemini requests: 12
-* Web requests: 4023
-* IPv4 requests: 3007
-* IPv6 requests: 1028
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 53 |
-| Gemini Gemfeed | 3 |
-| Gemini Atom | 2 |
-| Web Gemfeed | 0 |
-| Web Atom | 48 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 112 |
-| standby.foo.zone | 70 |
-| irregular.ninja | 31 |
-| www.foo.zone | 9 |
-| dory.buetow.org | 2 |
-| paul.buetow.org | 2 |
-| buetow.org | 2 |
-| alt.irregular.ninja | 1 |
-| dtail.dev | 1 |
-| www.buetow.org | 1 |
-| standby.irregular.ninja | 1 |
-| standby.paul.buetow.org | 1 |
-| www.irregular.ninja | 1 |
-| www.dtail.dev | 1 |
-| fishfinger.buetow.org | 1 |
-| blog.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|---------------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 16 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 10 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 7 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 5 |
-| standby.foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 5 |
-| standby.foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 5 |
-| foo.zone/gemfeed/index... | 5 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 5 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 5 |
-| foo.zone/about/resources... | 5 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 4 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 4 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 4 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| standby.foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 3 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| standby.foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 3 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 3 |
-| standby.foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 3 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| irregular.ninja/html/index... | 3 |
-| foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 3 |
-| standby.foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 3 |
-| standby.foo.zone/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud... | 3 |
-| foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 3 |
-| standby.foo.zone/about/index... | 3 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 3 |
-| irregular.ninja/html/3-21... | 2 |
-| irregular.ninja/html/6-21... | 2 |
-| irregular.ninja/html/1-22... | 2 |
-| irregular.ninja/html/5-16... | 2 |
-| standby.foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku... | 2 |
-| irregular.ninja/html/8-21... | 2 |
-| standby.foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 2 |
-| standby.foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 2 |
-| irregular.ninja/html/11-38... | 2 |
-| irregular.ninja/html/5-21... | 2 |
-| standby.foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 2 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 2 |
-| irregular.ninja/html/10-32... | 2 |
-| irregular.ninja/html/3-17... | 2 |
-| irregular.ninja/html/7-15... | 2 |
-| irregular.ninja/html/13-12... | 2 |
-| foo.zone/uptime-stats... | 2 |
-| irregular.ninja/html/6-29... | 2 |
-| irregular.ninja/html/11-23... | 2 |
-| irregular.ninja/html/1-13... | 2 |
-| irregular.ninja/html/2-30... | 2 |
-| irregular.ninja/html/7-23... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250604.gmi b/stats/20250604.gmi
deleted file mode 100644
index 880fdea2..00000000
--- a/stats/20250604.gmi
+++ /dev/null
@@ -1,106 +0,0 @@
-## Stats for 2025-06-04
-
-### Summary
-
-* Total requests: 4076
-* Filtered requests: 41833
-* Gemini requests: 14
-* Web requests: 4062
-* IPv4 requests: 2994
-* IPv6 requests: 1082
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 44 |
-| Gemini Gemfeed | 1 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 42 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 163 |
-| standby.foo.zone | 111 |
-| irregular.ninja | 17 |
-| www.foo.zone | 15 |
-| dory.buetow.org | 4 |
-| www.irregular.ninja | 3 |
-| paul.buetow.org | 3 |
-| dtail.dev | 2 |
-| www.paul.buetow.org | 2 |
-| buetow.org | 2 |
-| www.dtail.dev | 1 |
-| standby.paul.buetow.org | 1 |
-| www.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|--------------------------------------------------------------------------------------------------------------------------------|-----------------|
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 11 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 10 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 9 |
-| foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 9 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 7 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 7 |
-| standby.foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 6 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 6 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 6 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 6 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 5 |
-| foo.zone/about/resources... | 5 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| foo.zone/site-mirrors... | 4 |
-| standby.foo.zone/about/index... | 4 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 4 |
-| standby.foo.zone/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes... | 4 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 4 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 4 |
-| standby.foo.zone/gemfeed/2024-09-07-projects-i-support... | 4 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 4 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 4 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 4 |
-| dory.buetow.org/Erfahrungsberichte... | 4 |
-| standby.foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 3 |
-| standby.foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep... | 3 |
-| foo.zone/gemfeed/index... | 3 |
-| standby.foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-| standby.foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 3 |
-| standby.foo.zone/gemfeed/2024-07-05-random-weird-things... | 3 |
-| foo.zone/gemfeed/2021-10-22-defensive-devops... | 3 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 3 |
-| standby.foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 3 |
-| standby.foo.zone/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes... | 3 |
-| foo.zone/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 3 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| standby.foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 3 |
-| irregular.ninja/html/9-23... | 2 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 2 |
-| irregular.ninja/index... | 2 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 2 |
-| foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 2 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 2 |
-| irregular.ninja/html/13-1... | 2 |
-| foo.zone/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud... | 2 |
-| standby.foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250605.gmi b/stats/20250605.gmi
deleted file mode 100644
index 41c9bd3f..00000000
--- a/stats/20250605.gmi
+++ /dev/null
@@ -1,110 +0,0 @@
-## Stats for 2025-06-05
-
-### Summary
-
-* Total requests: 5598
-* Filtered requests: 48823
-* Gemini requests: 32
-* Web requests: 5566
-* IPv4 requests: 4252
-* IPv6 requests: 1346
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 56 |
-| Gemini Gemfeed | 3 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 52 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 128 |
-| standby.foo.zone | 88 |
-| irregular.ninja | 13 |
-| alt.irregular.ninja | 5 |
-| buetow.org | 5 |
-| www.foo.zone | 4 |
-| standby.alt.irregular.ninja | 3 |
-| dory.buetow.org | 2 |
-| fishfinger.buetow.org | 2 |
-| dtail.dev | 1 |
-| www.blog.buetow.org | 1 |
-| www.buetow.org | 1 |
-| www.dtail.dev | 1 |
-| www.irregular.ninja | 1 |
-| standby.foo.zone:1965 | 1 |
-| paul.buetow.org | 1 |
-| blog.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers... | 10 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 10 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 9 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 9 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 8 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 7 |
-| standby.foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 7 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 6 |
-| standby.foo.zone/about/index... | 6 |
-| foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 5 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 5 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 5 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 5 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 5 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 5 |
-| foo.zone/gemfeed/2021-08-01-on-being-pedantic-about-open-source... | 4 |
-| standby.foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 4 |
-| standby.foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 4 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 4 |
-| foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs... | 4 |
-| standby.foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku... | 4 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 4 |
-| foo.zone/gemfeed/index... | 4 |
-| irregular.ninja/html/page-1... | 4 |
-| foo.zone/gemfeed/2016-04-16-offsite-backup-with-zfs-part2... | 3 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 3 |
-| alt.irregular.ninja/html/index... | 3 |
-| foo.zone/about/index... | 3 |
-| foo.zone/gemfeed/2009-02-13-sgi-onyx-3200... | 3 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 3 |
-| standby.foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 3 |
-| foo.zone/gemfeed/2022-01-23-welcome-to-the-foo.zone... | 3 |
-| foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 3 |
-| foo.zone/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud... | 3 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 3 |
-| standby.foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 3 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 3 |
-| standby.foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 3 |
-| foo.zone/notes/career-guide-and-soft-skills... | 3 |
-| foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| foo.zone/gemfeed/2024-12-15-random-helix-themes... | 3 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 3 |
-| standby.foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 3 |
-| foo.zone/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta... | 3 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250606.gmi b/stats/20250606.gmi
deleted file mode 100644
index 2f3dbca3..00000000
--- a/stats/20250606.gmi
+++ /dev/null
@@ -1,111 +0,0 @@
-## Stats for 2025-06-06
-
-### Summary
-
-* Total requests: 3997
-* Filtered requests: 50776
-* Gemini requests: 24
-* Web requests: 3973
-* IPv4 requests: 2927
-* IPv6 requests: 1070
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 45 |
-| Gemini Gemfeed | 0 |
-| Gemini Atom | 0 |
-| Web Gemfeed | 0 |
-| Web Atom | 45 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 147 |
-| standby.foo.zone | 91 |
-| irregular.ninja | 21 |
-| www.alt.irregular.ninja | 10 |
-| www.foo.zone | 8 |
-| dtail.dev | 6 |
-| buetow.org | 3 |
-| blowfish.buetow.org | 2 |
-| paul.buetow.org | 2 |
-| fishfinger.buetow.org | 2 |
-| www.irregular.ninja | 2 |
-| blog.buetow.org | 1 |
-| www.buetow.org | 1 |
-| alt.irregular.ninja | 1 |
-| standby.foo.zone:1965 | 1 |
-| standby.irregular.ninja | 1 |
-| standby.alt.irregular.ninja | 1 |
-| www.dtail.dev | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|--------------------------------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 11 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 10 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 9 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 8 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 7 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 6 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 6 |
-| www.alt.irregular.ninja/html/index... | 6 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 5 |
-| foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 5 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 5 |
-| standby.foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 5 |
-| standby.foo.zone/about/index... | 5 |
-| foo.zone/about/novels... | 5 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 4 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 4 |
-| standby.foo.zone/gemfeed/2021-10-22-defensive-devops... | 4 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 4 |
-| irregular.ninja/html/index... | 4 |
-| foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways... | 4 |
-| standby.foo.zone/gemfeed/2022-04-10-creative-universe... | 4 |
-| www.alt.irregular.ninja/html/page-1... | 4 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 4 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 4 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 4 |
-| dtail.dev/doc/examples... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| standby.foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 4 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 4 |
-| foo.zone/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 3 |
-| foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 3 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 3 |
-| foo.zone/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| standby.foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 3 |
-| standby.foo.zone/uptime-stats... | 3 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 3 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 3 |
-| foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 3 |
-| standby.foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 3 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 3 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 3 |
-| standby.foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 3 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| standby.foo.zone/gemfeed/2008-06-26-perl-poetry... | 3 |
-| www.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 2 |
-| foo.zone/uptime-stats... | 2 |
-| foo.zone/notes/search-inside-yourself... | 2 |
-| irregular.ninja/html/5-7... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250607.gmi b/stats/20250607.gmi
deleted file mode 100644
index a7f4770e..00000000
--- a/stats/20250607.gmi
+++ /dev/null
@@ -1,109 +0,0 @@
-## Stats for 2025-06-07
-
-### Summary
-
-* Total requests: 4921
-* Filtered requests: 41102
-* Gemini requests: 40
-* Web requests: 4881
-* IPv4 requests: 3670
-* IPv6 requests: 1251
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 48 |
-| Gemini Gemfeed | 2 |
-| Gemini Atom | 0 |
-| Web Gemfeed | 0 |
-| Web Atom | 46 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 147 |
-| standby.foo.zone | 66 |
-| irregular.ninja | 39 |
-| www.foo.zone | 8 |
-| paul.buetow.org | 4 |
-| dory.buetow.org | 3 |
-| buetow.org | 3 |
-| www.irregular.ninja | 2 |
-| standby.irregular.ninja | 1 |
-| standby.foo.zone:1965 | 1 |
-| www.dtail.dev | 1 |
-| foo.zone:1965 | 1 |
-| www.dory.buetow.org | 1 |
-| www.buetow.org | 1 |
-| standby.dory.buetow.org | 1 |
-| fishfinger.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|--------------------------------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 15 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 11 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 8 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 7 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 7 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 6 |
-| standby.foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 6 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 6 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 6 |
-| foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku... | 6 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 5 |
-| standby.foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 5 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 5 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 5 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 5 |
-| foo.zone/gemfeed/index... | 5 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 5 |
-| foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 5 |
-| foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 5 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 4 |
-| foo.zone/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes... | 4 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 4 |
-| irregular.ninja/html/page-1... | 4 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 4 |
-| foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep... | 4 |
-| standby.foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 4 |
-| foo.zone/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes... | 4 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 4 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 3 |
-| foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 3 |
-| standby.foo.zone/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c... | 3 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| standby.foo.zone/about/index... | 3 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 3 |
-| standby.foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 3 |
-| paul.buetow.org/novels... | 3 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 3 |
-| foo.zone/gemfeed/2023-08-18-site-reliability-engineering-part-1... | 3 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 3 |
-| foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 3 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 3 |
-| foo.zone/uptime-stats... | 3 |
-| standby.foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| foo.zone/about/index... | 3 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250608.gmi b/stats/20250608.gmi
deleted file mode 100644
index ad830768..00000000
--- a/stats/20250608.gmi
+++ /dev/null
@@ -1,106 +0,0 @@
-## Stats for 2025-06-08
-
-### Summary
-
-* Total requests: 4160
-* Filtered requests: 41237
-* Gemini requests: 14
-* Web requests: 4146
-* IPv4 requests: 3412
-* IPv6 requests: 748
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 49 |
-| Gemini Gemfeed | 0 |
-| Gemini Atom | 2 |
-| Web Gemfeed | 0 |
-| Web Atom | 47 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 118 |
-| standby.foo.zone | 90 |
-| irregular.ninja | 43 |
-| standby.irregular.ninja | 5 |
-| www.foo.zone | 5 |
-| buetow.org | 3 |
-| dory.buetow.org | 2 |
-| www.irregular.ninja | 1 |
-| www.dtail.dev | 1 |
-| blog.buetow.org | 1 |
-| paul.buetow.org | 1 |
-| foo.zone:1965 | 1 |
-| www.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|---------------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/about/resources... | 10 |
-| standby.foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 7 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 7 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 7 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 6 |
-| standby.foo.zone/gemfeed/2025-04-19-when-book-notes... | 6 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 6 |
-| irregular.ninja/html/index... | 6 |
-| standby.foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 6 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 6 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 6 |
-| foo.zone/uptime-stats... | 5 |
-| standby.foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 5 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 5 |
-| standby.foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 5 |
-| standby.foo.zone/about/index... | 5 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 5 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 4 |
-| standby.foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 4 |
-| standby.foo.zone/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers... | 4 |
-| standby.foo.zone/gemfeed/2024-09-07-projects-i-support... | 4 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 4 |
-| standby.foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 4 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 4 |
-| standby.foo.zone/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes... | 4 |
-| standby.foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 4 |
-| foo.zone/notes/mind-management... | 3 |
-| standby.foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 3 |
-| standby.foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 3 |
-| standby.foo.zone/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes... | 3 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 3 |
-| foo.zone/notes/fluent-forever... | 3 |
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 3 |
-| standby.foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 3 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| standby.foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 3 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 3 |
-| standby.foo.zone/notes/a-monks-guide-to-happiness... | 3 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 3 |
-| standby.foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 3 |
-| standby.foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 3 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 3 |
-| standby.irregular.ninja/html/index... | 3 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250609.gmi b/stats/20250609.gmi
deleted file mode 100644
index ae492625..00000000
--- a/stats/20250609.gmi
+++ /dev/null
@@ -1,106 +0,0 @@
-## Stats for 2025-06-09
-
-### Summary
-
-* Total requests: 3950
-* Filtered requests: 39371
-* Gemini requests: 21
-* Web requests: 3929
-* IPv4 requests: 2808
-* IPv6 requests: 1142
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 55 |
-| Gemini Gemfeed | 3 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 51 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 110 |
-| standby.foo.zone | 71 |
-| irregular.ninja | 30 |
-| www.foo.zone | 6 |
-| foo.zone:1965 | 2 |
-| blowfish.buetow.org | 1 |
-| fishfinger.buetow.org | 1 |
-| www.buetow.org | 1 |
-| dtail.dev | 1 |
-| dory.buetow.org | 1 |
-| standby.alt.irregular.ninja | 1 |
-| www.dtail.dev | 1 |
-| www.irregular.ninja | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|--------------------------------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 9 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 8 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 8 |
-| foo.zone/gemfeed/2024-07-05-random-weird-things... | 7 |
-| foo.zone/gemfeed/index... | 7 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 7 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 6 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 6 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 6 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 6 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 5 |
-| standby.foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 5 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 5 |
-| standby.foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 5 |
-| standby.foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 5 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 5 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 5 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 4 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 4 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 4 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 4 |
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 4 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 4 |
-| standby.foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 4 |
-| foo.zone/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml... | 4 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 4 |
-| foo.zone/index... | 4 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 4 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 4 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 4 |
-| standby.foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep... | 4 |
-| foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 3 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 3 |
-| foo.zone/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c... | 3 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs... | 3 |
-| foo.zone/about/index... | 3 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 3 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| standby.foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 3 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 3 |
-| foo.zone/gemfeed/2021-08-01-on-being-pedantic-about-open-source... | 3 |
-| foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 3 |
-| foo.zone/uptime-stats... | 3 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 3 |
-| standby.foo.zone/gemfeed/2024-07-05-random-weird-things... | 3 |
-| foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 3 |
-| foo.zone/gemfeed/2024-12-15-random-helix-themes... | 3 |
-| standby.foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250610.gmi b/stats/20250610.gmi
deleted file mode 100644
index dc10f554..00000000
--- a/stats/20250610.gmi
+++ /dev/null
@@ -1,107 +0,0 @@
-## Stats for 2025-06-10
-
-### Summary
-
-* Total requests: 4100
-* Filtered requests: 40129
-* Gemini requests: 20
-* Web requests: 4080
-* IPv4 requests: 2891
-* IPv6 requests: 1209
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 48 |
-| Gemini Gemfeed | 2 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 45 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 124 |
-| standby.foo.zone | 58 |
-| irregular.ninja | 29 |
-| buetow.org | 6 |
-| www.foo.zone | 5 |
-| standby.irregular.ninja | 4 |
-| standby.alt.irregular.ninja | 4 |
-| dory.buetow.org | 3 |
-| alt.irregular.ninja | 3 |
-| www.irregular.ninja | 2 |
-| www.buetow.org | 2 |
-| standby.foo.zone:1965 | 1 |
-| foo.zone:1965 | 1 |
-| dtail.dev | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 11 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 9 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 7 |
-| foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 7 |
-| standby.foo.zone/about/index... | 6 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 6 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 6 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 5 |
-| standby.foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 4 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 4 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 4 |
-| foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 4 |
-| standby.foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 4 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 3 |
-| standby.foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 3 |
-| buetow.org/index... | 3 |
-| standby.foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 3 |
-| standby.foo.zone/about/novels... | 3 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 3 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 3 |
-| foo.zone/site-mirrors... | 3 |
-| standby.alt.irregular.ninja/html/index... | 3 |
-| standby.foo.zone/gemfeed/2021-08-01-on-being-pedantic-about-open-source... | 3 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 3 |
-| standby.foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 3 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 3 |
-| alt.irregular.ninja/html/index... | 3 |
-| standby.foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku... | 3 |
-| foo.zone/gemfeed/2008-06-26-perl-poetry... | 3 |
-| irregular.ninja/html/index... | 3 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 3 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 3 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 2 |
-| foo.zone/gemfeed/index... | 2 |
-| standby.irregular.ninja/html/index... | 2 |
-| foo.zone/about/novels... | 2 |
-| foo.zone/notes/site-reliability-engineering... | 2 |
-| foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 2 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 2 |
-| foo.zone/notes/97-things-every-sre-should-know... | 2 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 2 |
-| irregular.ninja/html/10-5... | 2 |
-| buetow.org/form... | 2 |
-| www.irregular.ninja/html/index... | 2 |
-| irregular.ninja/html/2-9... | 2 |
-| standby.foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 2 |
-| foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250611.gmi b/stats/20250611.gmi
deleted file mode 100644
index dbb8122f..00000000
--- a/stats/20250611.gmi
+++ /dev/null
@@ -1,113 +0,0 @@
-## Stats for 2025-06-11
-
-### Summary
-
-* Total requests: 4458
-* Filtered requests: 42022
-* Gemini requests: 20
-* Web requests: 4438
-* IPv4 requests: 3199
-* IPv6 requests: 1259
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 45 |
-| Gemini Gemfeed | 1 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 43 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 176 |
-| standby.foo.zone | 81 |
-| www.foo.zone | 14 |
-| irregular.ninja | 14 |
-| www.irregular.ninja | 7 |
-| www.alt.irregular.ninja | 5 |
-| alt.irregular.ninja | 4 |
-| paul.buetow.org | 4 |
-| dory.buetow.org | 2 |
-| buetow.org | 2 |
-| standby.paul.buetow.org | 1 |
-| www.dtail.dev | 1 |
-| foo.zone:1965 | 1 |
-| snonux.foo | 1 |
-| dtail.dev | 1 |
-| www.foo.zone:1965 | 1 |
-| fishfinger.buetow.org | 1 |
-| www.paul.buetow.org | 1 |
-| blog.buetow.org | 1 |
-| blowfish.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/about/novels... | 11 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 9 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 9 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 6 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 6 |
-| standby.foo.zone/gemfeed/2021-10-22-defensive-devops... | 6 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 6 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 6 |
-| standby.foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 5 |
-| standby.foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 5 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 5 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 4 |
-| standby.foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 4 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 4 |
-| standby.foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 4 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 4 |
-| standby.foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 4 |
-| foo.zone/gemfeed/2016-11-20-object-oriented-programming-with-ansi-c... | 3 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| standby.foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again... | 3 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 3 |
-| foo.zone/uptime-stats... | 3 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| standby.foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 3 |
-| foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 3 |
-| foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 3 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 3 |
-| foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 3 |
-| foo.zone/notes/eat-that-frog... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-| foo.zone/gemfeed/index... | 3 |
-| standby.foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 3 |
-| standby.foo.zone/about/index... | 3 |
-| www.alt.irregular.ninja/html/index... | 3 |
-| foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 3 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 3 |
-| foo.zone/site-mirrors... | 3 |
-| alt.irregular.ninja/html/page-1... | 2 |
-| dory.buetow.org/Erfahrungsberichte... | 2 |
-| foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 2 |
-| irregular.ninja/html/1-36... | 2 |
-| foo.zone/gemfeed/2024-07-05-random-weird-things... | 2 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 2 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 2 |
-| standby.foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 2 |
-| foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs... | 2 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 2 |
-| irregular.ninja/html/7-2... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250612.gmi b/stats/20250612.gmi
deleted file mode 100644
index 5cdb69d6..00000000
--- a/stats/20250612.gmi
+++ /dev/null
@@ -1,107 +0,0 @@
-## Stats for 2025-06-12
-
-### Summary
-
-* Total requests: 5356
-* Filtered requests: 49596
-* Gemini requests: 18
-* Web requests: 5338
-* IPv4 requests: 4220
-* IPv6 requests: 1136
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 43 |
-| Gemini Gemfeed | 0 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 42 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------|-----------------|
-| foo.zone | 184 |
-| standby.foo.zone | 61 |
-| irregular.ninja | 21 |
-| www.foo.zone | 13 |
-| buetow.org | 6 |
-| dory.buetow.org | 2 |
-| fishfinger.buetow.org | 1 |
-| blog.buetow.org | 1 |
-| blowfish.buetow.org | 1 |
-| www.irregular.ninja | 1 |
-| www.dtail.dev | 1 |
-| foo.zone:1965 | 1 |
-| dtail.dev | 1 |
-| www.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 14 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 11 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 9 |
-| foo.zone/about/resources... | 9 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 8 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 8 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 8 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 6 |
-| foo.zone/about/index... | 6 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 6 |
-| foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 6 |
-| standby.foo.zone/gemfeed/2025-04-19-when-book-notes... | 6 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 6 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 6 |
-| irregular.ninja/html/page-1... | 6 |
-| irregular.ninja/html/index... | 5 |
-| standby.foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 5 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 5 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 5 |
-| foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 5 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 5 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 5 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 5 |
-| foo.zone/gemfeed/2021-10-22-defensive-devops... | 5 |
-| standby.foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 5 |
-| foo.zone/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers... | 5 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 5 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 5 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 5 |
-| standby.foo.zone/about/index... | 5 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 5 |
-| foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 4 |
-| foo.zone/gemfeed/2016-04-16-offsite-backup-with-zfs-part2... | 4 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 4 |
-| foo.zone/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes... | 4 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 4 |
-| foo.zone/uptime-stats... | 4 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 4 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 4 |
-| foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 4 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 4 |
-| foo.zone/gemfeed/index... | 4 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 4 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 4 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 3 |
-| buetow.org/druid/index... | 3 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 3 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250613.gmi b/stats/20250613.gmi
deleted file mode 100644
index 1ac8e46e..00000000
--- a/stats/20250613.gmi
+++ /dev/null
@@ -1,106 +0,0 @@
-## Stats for 2025-06-13
-
-### Summary
-
-* Total requests: 3950
-* Filtered requests: 39122
-* Gemini requests: 16
-* Web requests: 3934
-* IPv4 requests: 2913
-* IPv6 requests: 1037
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 47 |
-| Gemini Gemfeed | 5 |
-| Gemini Atom | 2 |
-| Web Gemfeed | 0 |
-| Web Atom | 41 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 137 |
-| standby.foo.zone | 68 |
-| irregular.ninja | 18 |
-| www.foo.zone | 7 |
-| www.irregular.ninja | 4 |
-| buetow.org | 3 |
-| paul.buetow.org | 2 |
-| dory.buetow.org | 2 |
-| www.alt.irregular.ninja | 2 |
-| standby.alt.irregular.ninja | 1 |
-| www.dtail.dev | 1 |
-| dtail.dev | 1 |
-| www.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 11 |
-| foo.zone/gemfeed/index... | 9 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 7 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 7 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 7 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 7 |
-| foo.zone/gemfeed/2022-01-23-welcome-to-the-foo.zone... | 7 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 6 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 6 |
-| foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs... | 6 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 6 |
-| foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 6 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 6 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 6 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 6 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 5 |
-| foo.zone/gemfeed/2024-07-05-random-weird-things... | 5 |
-| foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 5 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 5 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 5 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 5 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 5 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 5 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 5 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 5 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 5 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 5 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 5 |
-| standby.foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 4 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 4 |
-| foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 4 |
-| standby.foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 4 |
-| standby.foo.zone/gemfeed/2025-04-19-when-book-notes... | 4 |
-| foo.zone/gemfeed/2021-08-01-on-being-pedantic-about-open-source... | 4 |
-| foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 4 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 4 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 4 |
-| foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 4 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 4 |
-| foo.zone/gemfeed/2023-11-19-site-reliability-engineering-part-2... | 4 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 4 |
-| standby.foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 4 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 4 |
-| foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 4 |
-| standby.foo.zone/about/index... | 4 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 4 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 4 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250614.gmi b/stats/20250614.gmi
deleted file mode 100644
index ecd22296..00000000
--- a/stats/20250614.gmi
+++ /dev/null
@@ -1,105 +0,0 @@
-## Stats for 2025-06-14
-
-### Summary
-
-* Total requests: 4332
-* Filtered requests: 42286
-* Gemini requests: 12
-* Web requests: 4320
-* IPv4 requests: 3010
-* IPv6 requests: 1322
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 39 |
-| Gemini Gemfeed | 1 |
-| Gemini Atom | 0 |
-| Web Gemfeed | 0 |
-| Web Atom | 38 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 85 |
-| standby.foo.zone | 80 |
-| irregular.ninja | 15 |
-| www.foo.zone | 6 |
-| buetow.org | 4 |
-| paul.buetow.org | 2 |
-| www.irregular.ninja | 1 |
-| standby.alt.irregular.ninja | 1 |
-| snonux.foo | 1 |
-| www.alt.irregular.ninja | 1 |
-| alt.irregular.ninja | 1 |
-| www.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|---------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 9 |
-| standby.foo.zone/about/index... | 7 |
-| standby.foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 6 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 5 |
-| standby.foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 5 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 5 |
-| standby.foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 5 |
-| standby.foo.zone/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes... | 5 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| standby.foo.zone/uptime-stats... | 4 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 4 |
-| standby.foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 4 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 4 |
-| standby.foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| standby.foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 4 |
-| standby.foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 4 |
-| standby.foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 4 |
-| standby.foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 3 |
-| standby.foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 3 |
-| foo.zone/notes/when... | 3 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 3 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 3 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 3 |
-| foo.zone/gemfeed/index... | 3 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 3 |
-| standby.foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 3 |
-| standby.foo.zone/gemfeed/index... | 3 |
-| standby.foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku... | 2 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 2 |
-| standby.foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 2 |
-| foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 2 |
-| standby.foo.zone/gemfeed/2024-09-07-projects-i-support... | 2 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 2 |
-| paul.buetow.org/site-mirrors... | 2 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 2 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 2 |
-| foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 2 |
-| foo.zone/notes/the-science-of-living... | 2 |
-| standby.foo.zone/gemfeed/2024-07-05-random-weird-things... | 2 |
-| foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 2 |
-| foo.zone/gemfeed/2023-11-19-site-reliability-engineering-part-2... | 2 |
-| buetow.org/form... | 2 |
-| standby.foo.zone/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud... | 2 |
-| standby.foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep... | 2 |
-| standby.foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs... | 2 |
-| standby.foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 2 |
-| standby.foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 2 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 2 |
-| irregular.ninja/html/page-1... | 2 |
-| standby.foo.zone/gemfeed/2023-08-18-site-reliability-engineering-part-1... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250615.gmi b/stats/20250615.gmi
deleted file mode 100644
index e7c8ae5a..00000000
--- a/stats/20250615.gmi
+++ /dev/null
@@ -1,104 +0,0 @@
-## Stats for 2025-06-15
-
-### Summary
-
-* Total requests: 3300
-* Filtered requests: 40276
-* Gemini requests: 28
-* Web requests: 3272
-* IPv4 requests: 2736
-* IPv6 requests: 564
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 46 |
-| Gemini Gemfeed | 2 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 43 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------|-----------------|
-| foo.zone | 192 |
-| standby.foo.zone | 66 |
-| irregular.ninja | 15 |
-| www.foo.zone | 12 |
-| buetow.org | 5 |
-| www.irregular.ninja | 3 |
-| fishfinger.buetow.org | 3 |
-| paul.buetow.org | 2 |
-| dory.buetow.org | 1 |
-| foo.zone:1965 | 1 |
-| www.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/about/novels... | 13 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 12 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 12 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 12 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 9 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 9 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 9 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 9 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 8 |
-| foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 8 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 8 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 7 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 7 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 7 |
-| foo.zone/gemfeed/index... | 7 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 6 |
-| standby.foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 6 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 6 |
-| standby.foo.zone/about/index... | 6 |
-| foo.zone/about/index... | 6 |
-| standby.foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 6 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 5 |
-| standby.foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 5 |
-| standby.foo.zone/gemfeed/2021-10-22-defensive-devops... | 5 |
-| standby.foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 5 |
-| foo.zone/gemfeed/2024-07-05-random-weird-things... | 5 |
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 5 |
-| standby.foo.zone/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud... | 4 |
-| foo.zone/gemfeed/2024-12-15-random-helix-themes... | 4 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| foo.zone/gemini:/foo.zone/index... | 4 |
-| foo.zone/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta... | 4 |
-| foo.zone/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml... | 4 |
-| foo.zone/index... | 4 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 4 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 4 |
-| standby.foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 4 |
-| foo.zone/site-mirrors... | 4 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 4 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 4 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 4 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 4 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 4 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| standby.foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 4 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 4 |
-| foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 4 |
-| foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 4 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250616.gmi b/stats/20250616.gmi
deleted file mode 100644
index 4e7e12bb..00000000
--- a/stats/20250616.gmi
+++ /dev/null
@@ -1,103 +0,0 @@
-## Stats for 2025-06-16
-
-### Summary
-
-* Total requests: 3734
-* Filtered requests: 49947
-* Gemini requests: 12
-* Web requests: 3722
-* IPv4 requests: 2528
-* IPv6 requests: 1206
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 39 |
-| Gemini Gemfeed | 1 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 37 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------|-----------------|
-| foo.zone | 132 |
-| standby.foo.zone | 60 |
-| irregular.ninja | 16 |
-| www.foo.zone | 6 |
-| buetow.org | 2 |
-| standby.foo.zone:1965 | 2 |
-| foo.zone:1965 | 1 |
-| dory.buetow.org | 1 |
-| www.dtail.dev | 1 |
-| www.irregular.ninja | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|--------------------------------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 12 |
-| foo.zone/gemfeed/2024-07-05-random-weird-things... | 10 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 9 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 7 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 7 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 6 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 6 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 5 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 5 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 5 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 4 |
-| standby.foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 4 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 4 |
-| standby.foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 4 |
-| standby.foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 4 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 4 |
-| foo.zone/notes/implementing-service-level-objectives... | 4 |
-| foo.zone/notes/search-inside-yourself... | 4 |
-| standby.foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| standby.foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep... | 3 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 3 |
-| foo.zone/notes/the-power-of-neuroplasticity... | 3 |
-| foo.zone/notes/site-reliability-engineering... | 3 |
-| standby.foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 3 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 3 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 3 |
-| standby.foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-| foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways... | 3 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 3 |
-| standby.foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 3 |
-| standby.foo.zone/gemfeed/2021-08-01-on-being-pedantic-about-open-source... | 2 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 2 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 2 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 2 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 2 |
-| foo.zone/notes/eat-that-frog... | 2 |
-| irregular.ninja/html/12-28... | 2 |
-| irregular.ninja/html/4-1... | 2 |
-| standby.foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 2 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 2 |
-| standby.foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 2 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 2 |
-| irregular.ninja/html/page-1... | 2 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 2 |
-| buetow.org/index... | 2 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 2 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 2 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250617.gmi b/stats/20250617.gmi
deleted file mode 100644
index 83df31f6..00000000
--- a/stats/20250617.gmi
+++ /dev/null
@@ -1,112 +0,0 @@
-## Stats for 2025-06-17
-
-### Summary
-
-* Total requests: 4319
-* Filtered requests: 45254
-* Gemini requests: 50
-* Web requests: 4269
-* IPv4 requests: 3309
-* IPv6 requests: 1010
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 52 |
-| Gemini Gemfeed | 4 |
-| Gemini Atom | 2 |
-| Web Gemfeed | 1 |
-| Web Atom | 46 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 156 |
-| standby.foo.zone | 67 |
-| irregular.ninja | 30 |
-| www.foo.zone | 9 |
-| dory.buetow.org | 3 |
-| standby.irregular.ninja | 3 |
-| www.irregular.ninja | 3 |
-| foo.zone:1965 | 2 |
-| standby.alt.irregular.ninja | 2 |
-| standby.paul.buetow.org | 2 |
-| paul.buetow.org | 1 |
-| buetow.org | 1 |
-| www.foo.zone:1965 | 1 |
-| fishfinger.buetow.org | 1 |
-| www.buetow.org | 1 |
-| standby.dory.buetow.org | 1 |
-| alt.irregular.ninja | 1 |
-| www.dory.buetow.org | 1 |
-| dtail.dev | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 21 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 16 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 13 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 9 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 9 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 8 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 8 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 8 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 7 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 6 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 6 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 6 |
-| foo.zone/gemfeed/index... | 6 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 6 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 6 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 6 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 6 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 5 |
-| foo.zone/gemfeed/2024-12-15-random-helix-themes... | 5 |
-| standby.foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 5 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 5 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 4 |
-| foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again... | 4 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 4 |
-| foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 4 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| foo.zone/gemfeed/2024-07-05-random-weird-things... | 4 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 4 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 4 |
-| foo.zone/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml... | 4 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 4 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 4 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 4 |
-| foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 3 |
-| foo.zone/gemfeed/2008-06-26-perl-poetry... | 3 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 3 |
-| foo.zone/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 3 |
-| irregular.ninja/html/page-1... | 3 |
-| foo.zone/gemfeed/2022-01-23-welcome-to-the-foo.zone... | 3 |
-| foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 3 |
-| foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 3 |
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 3 |
-| foo.zone/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes... | 3 |
-| foo.zone/gemfeed/2016-04-16-offsite-backup-with-zfs-part2... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250618.gmi b/stats/20250618.gmi
deleted file mode 100644
index 2f92294a..00000000
--- a/stats/20250618.gmi
+++ /dev/null
@@ -1,111 +0,0 @@
-## Stats for 2025-06-18
-
-### Summary
-
-* Total requests: 3796
-* Filtered requests: 38360
-* Gemini requests: 46
-* Web requests: 3750
-* IPv4 requests: 2751
-* IPv6 requests: 1045
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 49 |
-| Gemini Gemfeed | 3 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 45 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 168 |
-| standby.foo.zone | 113 |
-| irregular.ninja | 13 |
-| www.foo.zone | 8 |
-| buetow.org | 5 |
-| paul.buetow.org | 4 |
-| www.irregular.ninja | 3 |
-| www.alt.irregular.ninja | 2 |
-| dtail.dev | 2 |
-| standby.foo.zone:1965 | 2 |
-| dory.buetow.org | 2 |
-| alt.irregular.ninja | 1 |
-| www.buetow.org | 1 |
-| standby.paul.buetow.org | 1 |
-| www.dtail.dev | 1 |
-| foo.zone:1965 | 1 |
-| www.foo.zone:1965 | 1 |
-| blog.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 13 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 11 |
-| foo.zone/about/resources... | 11 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 8 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 8 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 7 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 7 |
-| standby.foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 6 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 6 |
-| standby.foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 5 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 5 |
-| foo.zone/gemfeed/index... | 5 |
-| standby.foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 5 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 5 |
-| standby.foo.zone/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers... | 4 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 4 |
-| standby.foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 4 |
-| foo.zone/about/index... | 4 |
-| foo.zone/site-mirrors... | 4 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 4 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 4 |
-| standby.foo.zone/gemfeed/2024-07-05-random-weird-things... | 4 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 4 |
-| foo.zone/gemfeed/2023-08-18-site-reliability-engineering-part-1... | 3 |
-| foo.zone/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes... | 3 |
-| foo.zone/notes/fluent-forever... | 3 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 3 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 3 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 3 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 3 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 3 |
-| standby.foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 3 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 3 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 3 |
-| foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 3 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| www.irregular.ninja/index... | 2 |
-| standby.foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 2 |
-| standby.foo.zone/notes/when... | 2 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 2 |
-| foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 2 |
-| irregular.ninja/html/1-3... | 2 |
-| foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again... | 2 |
-| foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 2 |
-| standby.foo.zone/gemfeed/2025-04-19-when-book-notes... | 2 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 2 |
-| irregular.ninja/html/6-10... | 2 |
-| foo.zone/uptime-stats... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250619.gmi b/stats/20250619.gmi
deleted file mode 100644
index 5d2df064..00000000
--- a/stats/20250619.gmi
+++ /dev/null
@@ -1,104 +0,0 @@
-## Stats for 2025-06-19
-
-### Summary
-
-* Total requests: 4117
-* Filtered requests: 44894
-* Gemini requests: 170
-* Web requests: 3947
-* IPv4 requests: 2716
-* IPv6 requests: 1401
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 40 |
-| Gemini Gemfeed | 2 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 37 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 170 |
-| standby.foo.zone | 109 |
-| irregular.ninja | 24 |
-| www.foo.zone | 12 |
-| buetow.org | 4 |
-| paul.buetow.org | 4 |
-| dory.buetow.org | 2 |
-| www.irregular.ninja | 2 |
-| fishfinger.buetow.org | 1 |
-| standby.irregular.ninja | 1 |
-| standby.foo.zone:1965 | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 15 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 10 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 9 |
-| standby.foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 9 |
-| standby.foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 8 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 7 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 6 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 6 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 6 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 6 |
-| foo.zone/gemfeed/index... | 5 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 5 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 5 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 5 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 5 |
-| standby.foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 5 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 4 |
-| foo.zone/site-mirrors... | 4 |
-| standby.foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep... | 4 |
-| standby.foo.zone/about/index... | 4 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 4 |
-| standby.foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 4 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 4 |
-| standby.foo.zone/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes... | 4 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 4 |
-| standby.foo.zone/gemfeed/2024-09-07-projects-i-support... | 4 |
-| foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 4 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| foo.zone/notes/a-monks-guide-to-happiness... | 3 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 3 |
-| foo.zone/index... | 3 |
-| foo.zone/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes... | 3 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 3 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 3 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 3 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 3 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 3 |
-| irregular.ninja/html/page-1... | 3 |
-| foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 3 |
-| foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 3 |
-| standby.foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 3 |
-| foo.zone/about/dtail... | 3 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 3 |
-| standby.foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 3 |
-| foo.zone/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot... | 3 |
-| foo.zone/uptime-stats... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250620.gmi b/stats/20250620.gmi
deleted file mode 100644
index 56ea0f48..00000000
--- a/stats/20250620.gmi
+++ /dev/null
@@ -1,108 +0,0 @@
-## Stats for 2025-06-20
-
-### Summary
-
-* Total requests: 3627
-* Filtered requests: 44209
-* Gemini requests: 30
-* Web requests: 3597
-* IPv4 requests: 2595
-* IPv6 requests: 1032
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 52 |
-| Gemini Gemfeed | 5 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 47 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 167 |
-| standby.foo.zone | 98 |
-| irregular.ninja | 25 |
-| www.foo.zone | 10 |
-| buetow.org | 8 |
-| www.irregular.ninja | 6 |
-| paul.buetow.org | 4 |
-| standby.irregular.ninja | 3 |
-| dory.buetow.org | 3 |
-| alt.irregular.ninja | 2 |
-| standby.alt.irregular.ninja | 2 |
-| dtail.dev | 1 |
-| www.buetow.org | 1 |
-| www.dtail.dev | 1 |
-| www.foo.zone:1965 | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 11 |
-| foo.zone/about/novels... | 11 |
-| standby.foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 10 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 9 |
-| foo.zone/gemfeed/index... | 8 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 8 |
-| foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 7 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 6 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 6 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 6 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 5 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 5 |
-| standby.foo.zone/gemfeed/2023-02-26-how-to-shut-down-after-work... | 5 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 5 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 5 |
-| irregular.ninja/html/index... | 5 |
-| foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 5 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 5 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 4 |
-| foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 4 |
-| standby.foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 4 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 4 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 4 |
-| buetow.org/form... | 4 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 4 |
-| foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 4 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 4 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 4 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 4 |
-| standby.foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 4 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 4 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 4 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 3 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 3 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-| standby.foo.zone/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud... | 3 |
-| foo.zone/contact-information... | 3 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 3 |
-| irregular.ninja/html/page-1... | 3 |
-| standby.irregular.ninja/html/index... | 3 |
-| standby.foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 3 |
-| standby.foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 3 |
-| foo.zone/index... | 3 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 3 |
-| foo.zone/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers... | 3 |
-| foo.zone/site-mirrors... | 3 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 3 |
-| standby.foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 3 |
-| standby.foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250621.gmi b/stats/20250621.gmi
deleted file mode 100644
index a18bfc5b..00000000
--- a/stats/20250621.gmi
+++ /dev/null
@@ -1,106 +0,0 @@
-## Stats for 2025-06-21
-
-### Summary
-
-* Total requests: 3569
-* Filtered requests: 37337
-* Gemini requests: 32
-* Web requests: 3537
-* IPv4 requests: 2428
-* IPv6 requests: 1141
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 44 |
-| Gemini Gemfeed | 2 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 41 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|---------------------|-----------------|
-| foo.zone | 157 |
-| standby.foo.zone | 86 |
-| irregular.ninja | 16 |
-| buetow.org | 9 |
-| www.foo.zone | 9 |
-| paul.buetow.org | 7 |
-| www.irregular.ninja | 6 |
-| www.buetow.org | 2 |
-| blog.buetow.org | 2 |
-| www.paul.buetow.org | 2 |
-| www.blog.buetow.org | 1 |
-| dtail.dev | 1 |
-| www.dtail.dev | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 12 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 10 |
-| standby.foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 8 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 7 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 7 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 6 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 6 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 6 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 6 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 6 |
-| standby.foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 5 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 5 |
-| standby.foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 5 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 5 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 5 |
-| standby.foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 5 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 5 |
-| foo.zone/gemfeed/2021-08-01-on-being-pedantic-about-open-source... | 5 |
-| foo.zone/uptime-stats... | 5 |
-| foo.zone/gemfeed/2024-12-15-random-helix-themes... | 4 |
-| foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 4 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 4 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 4 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 4 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| standby.foo.zone/gemfeed/2022-04-10-creative-universe... | 4 |
-| foo.zone/site-mirrors... | 4 |
-| irregular.ninja/html/page-1... | 4 |
-| foo.zone/gemfeed/index... | 4 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 4 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 4 |
-| foo.zone/about/index... | 4 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 4 |
-| standby.foo.zone/gemfeed/2021-10-22-defensive-devops... | 4 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 4 |
-| standby.foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 4 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 4 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 4 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 4 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 4 |
-| standby.foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 4 |
-| foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 3 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 3 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 3 |
-| foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 3 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 3 |
-| foo.zone/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta... | 3 |
-| foo.zone/gemfeed/2021-10-22-defensive-devops... | 3 |
-| standby.foo.zone/gemfeed/2021-08-01-on-being-pedantic-about-open-source... | 3 |
-| foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250622.gmi b/stats/20250622.gmi
deleted file mode 100644
index e9393d9e..00000000
--- a/stats/20250622.gmi
+++ /dev/null
@@ -1,102 +0,0 @@
-## Stats for 2025-06-22
-
-### Summary
-
-* Total requests: 3173
-* Filtered requests: 41619
-* Gemini requests: 27
-* Web requests: 3146
-* IPv4 requests: 2566
-* IPv6 requests: 607
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 46 |
-| Gemini Gemfeed | 3 |
-| Gemini Atom | 2 |
-| Web Gemfeed | 0 |
-| Web Atom | 41 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------|-----------------|
-| foo.zone | 166 |
-| standby.foo.zone | 78 |
-| irregular.ninja | 21 |
-| www.foo.zone | 8 |
-| paul.buetow.org | 4 |
-| buetow.org | 4 |
-| www.irregular.ninja | 3 |
-| standby.foo.zone:1965 | 1 |
-| dory.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 20 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 15 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 13 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 11 |
-| foo.zone/gemfeed/2025-06-22-task-samurai... | 8 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 8 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 7 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 7 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 6 |
-| irregular.ninja/html/page-1... | 6 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 6 |
-| foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways... | 6 |
-| foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 6 |
-| foo.zone/site-mirrors... | 6 |
-| foo.zone/gemfeed/2025-07-22-task-samurai... | 6 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 6 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 5 |
-| foo.zone/gemfeed/2008-06-26-perl-poetry... | 5 |
-| standby.foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 5 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 5 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 5 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 5 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 5 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 5 |
-| foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 5 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 5 |
-| foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 5 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 4 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 4 |
-| foo.zone/gemfeed/index... | 4 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 4 |
-| foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 4 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 4 |
-| foo.zone/gemfeed/2022-02-04-computer-operating-systems-i-use... | 4 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 4 |
-| standby.foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 4 |
-| foo.zone/notes/never-split-the-difference... | 4 |
-| irregular.ninja/html/index... | 4 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 4 |
-| foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-| foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 3 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 3 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 3 |
-| foo.zone/gemfeed/2021-10-22-defensive-devops... | 3 |
-| foo.zone/notes/the-science-of-living... | 3 |
-| standby.foo.zone/gemfeed/2008-06-26-perl-poetry... | 3 |
-| foo.zone/notes/eat-that-frog... | 3 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250623.gmi b/stats/20250623.gmi
deleted file mode 100644
index 0cc3a09d..00000000
--- a/stats/20250623.gmi
+++ /dev/null
@@ -1,103 +0,0 @@
-## Stats for 2025-06-23
-
-### Summary
-
-* Total requests: 3817
-* Filtered requests: 46619
-* Gemini requests: 18
-* Web requests: 3799
-* IPv4 requests: 2678
-* IPv6 requests: 1139
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 49 |
-| Gemini Gemfeed | 4 |
-| Gemini Atom | 0 |
-| Web Gemfeed | 0 |
-| Web Atom | 45 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 130 |
-| standby.foo.zone | 91 |
-| irregular.ninja | 14 |
-| www.foo.zone | 8 |
-| paul.buetow.org | 6 |
-| buetow.org | 5 |
-| dory.buetow.org | 1 |
-| standby.paul.buetow.org | 1 |
-| www.irregular.ninja | 1 |
-| standby.foo.zone:1965 | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|---------------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2025-06-22-task-samurai... | 18 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 13 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 10 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 8 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 7 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 7 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 7 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 5 |
-| standby.foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 5 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 5 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 5 |
-| standby.foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 5 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 4 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| foo.zone/gemfeed/index... | 4 |
-| foo.zone/about/resources... | 4 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 4 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 4 |
-| foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 4 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 4 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 4 |
-| standby.foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 4 |
-| standby.foo.zone/gemfeed/2025-04-19-when-book-notes... | 4 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 3 |
-| foo.zone/gemfeed/2021-10-22-defensive-devops... | 3 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 3 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 3 |
-| irregular.ninja/html/page-1... | 3 |
-| foo.zone/site-mirrors... | 3 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 3 |
-| standby.foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 3 |
-| foo.zone/about/index... | 3 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 3 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 3 |
-| standby.foo.zone/gemfeed/2024-09-07-projects-i-support... | 3 |
-| foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again... | 3 |
-| standby.foo.zone/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers... | 3 |
-| standby.foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 3 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 3 |
-| foo.zone/uptime-stats... | 3 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 3 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| standby.foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 3 |
-| foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 3 |
-| irregular.ninja/html/2-23... | 2 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 2 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 2 |
-| foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 2 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250624.gmi b/stats/20250624.gmi
deleted file mode 100644
index 4a8b9793..00000000
--- a/stats/20250624.gmi
+++ /dev/null
@@ -1,107 +0,0 @@
-## Stats for 2025-06-24
-
-### Summary
-
-* Total requests: 3997
-* Filtered requests: 43953
-* Gemini requests: 8
-* Web requests: 3989
-* IPv4 requests: 2772
-* IPv6 requests: 1225
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 46 |
-| Gemini Gemfeed | 1 |
-| Gemini Atom | 0 |
-| Web Gemfeed | 0 |
-| Web Atom | 45 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 131 |
-| standby.foo.zone | 85 |
-| irregular.ninja | 15 |
-| www.foo.zone | 6 |
-| www.irregular.ninja | 6 |
-| buetow.org | 4 |
-| blog.buetow.org | 1 |
-| paul.buetow.org | 1 |
-| foo.zone:1965 | 1 |
-| dory.buetow.org | 1 |
-| standby.irregular.ninja | 1 |
-| standby.alt.irregular.ninja | 1 |
-| alt.irregular.ninja | 1 |
-| www.dory.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 15 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 10 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 10 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 9 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 9 |
-| www.irregular.ninja/html/index... | 6 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 6 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 6 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 5 |
-| standby.foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 5 |
-| standby.foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 5 |
-| standby.foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 5 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 4 |
-| foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 4 |
-| foo.zone/gemfeed/2008-06-26-perl-poetry... | 4 |
-| standby.foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep... | 4 |
-| foo.zone/gemfeed/2025-06-22-task-samurai... | 4 |
-| foo.zone/site-mirrors... | 4 |
-| standby.foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 4 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 4 |
-| standby.foo.zone/gemfeed/2025-04-19-when-book-notes... | 3 |
-| standby.foo.zone/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes... | 3 |
-| standby.foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 3 |
-| standby.foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku... | 3 |
-| standby.foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 3 |
-| standby.foo.zone/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta... | 3 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 3 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 3 |
-| standby.foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 3 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 3 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 3 |
-| www.irregular.ninja/html/page-1... | 3 |
-| foo.zone/notes/influence-wihout-authority... | 3 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 3 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 3 |
-| foo.zone/notes/eat-that-frog... | 3 |
-| standby.foo.zone/gemfeed/2023-11-19-site-reliability-engineering-part-2... | 3 |
-| foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 3 |
-| foo.zone/uptime-stats... | 2 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 2 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 2 |
-| standby.foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 2 |
-| standby.foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 2 |
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 2 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 2 |
-| irregular.ninja/html/7-20... | 2 |
-| foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 2 |
-| standby.foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 2 |
-| foo.zone/gemfeed/2024-07-05-random-weird-things... | 2 |
-| foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250625.gmi b/stats/20250625.gmi
deleted file mode 100644
index 512501ff..00000000
--- a/stats/20250625.gmi
+++ /dev/null
@@ -1,111 +0,0 @@
-## Stats for 2025-06-25
-
-### Summary
-
-* Total requests: 4586
-* Filtered requests: 42568
-* Gemini requests: 12
-* Web requests: 4574
-* IPv4 requests: 3163
-* IPv6 requests: 1423
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 50 |
-| Gemini Gemfeed | 5 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 44 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 167 |
-| standby.foo.zone | 90 |
-| irregular.ninja | 31 |
-| www.foo.zone | 13 |
-| buetow.org | 3 |
-| www.dtail.dev | 2 |
-| paul.buetow.org | 2 |
-| www.buetow.org | 1 |
-| dtail.dev | 1 |
-| www.dory.buetow.org | 1 |
-| alt.irregular.ninja | 1 |
-| standby.paul.buetow.org | 1 |
-| www.irregular.ninja | 1 |
-| standby.alt.irregular.ninja | 1 |
-| standby.irregular.ninja | 1 |
-| www.paul.buetow.org | 1 |
-| blog.buetow.org | 1 |
-| www.foo.zone:1965 | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 12 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 8 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 8 |
-| foo.zone/gemfeed/index... | 8 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 8 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 7 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 5 |
-| standby.foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 5 |
-| standby.foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 5 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 5 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 5 |
-| standby.foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 5 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 5 |
-| standby.foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 5 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 5 |
-| standby.foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 5 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 4 |
-| standby.foo.zone/gemfeed/2023-02-26-how-to-shut-down-after-work... | 4 |
-| standby.foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 4 |
-| foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 4 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 4 |
-| standby.foo.zone/gemfeed/2021-08-01-on-being-pedantic-about-open-source... | 4 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 4 |
-| foo.zone/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes... | 4 |
-| foo.zone/gemfeed/2025-06-22-task-samurai... | 4 |
-| foo.zone/about/resources... | 4 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 4 |
-| standby.foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 4 |
-| standby.foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 4 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 4 |
-| foo.zone/gemfeed/2023-02-26-how-to-shut-down-after-work... | 4 |
-| foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 4 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 4 |
-| foo.zone/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes... | 4 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-| standby.foo.zone/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud... | 3 |
-| standby.foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 3 |
-| foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 3 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 3 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 3 |
-| foo.zone/gemfeed/2021-10-22-defensive-devops... | 3 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 3 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 3 |
-| foo.zone/site-mirrors... | 3 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 3 |
-| foo.zone/notes/the-stoic-challenge... | 3 |
-| foo.zone/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers... | 3 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 3 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 3 |
-| standby.foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250626.gmi b/stats/20250626.gmi
deleted file mode 100644
index f03e65f5..00000000
--- a/stats/20250626.gmi
+++ /dev/null
@@ -1,106 +0,0 @@
-## Stats for 2025-06-26
-
-### Summary
-
-* Total requests: 3858
-* Filtered requests: 39068
-* Gemini requests: 35
-* Web requests: 3823
-* IPv4 requests: 2830
-* IPv6 requests: 1028
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 48 |
-| Gemini Gemfeed | 2 |
-| Gemini Atom | 0 |
-| Web Gemfeed | 0 |
-| Web Atom | 46 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 166 |
-| irregular.ninja | 102 |
-| standby.foo.zone | 95 |
-| www.foo.zone | 12 |
-| dory.buetow.org | 7 |
-| buetow.org | 4 |
-| paul.buetow.org | 3 |
-| www.irregular.ninja | 3 |
-| blowfish.buetow.org | 1 |
-| fishfinger.buetow.org | 1 |
-| dtail.dev | 1 |
-| standby.paul.buetow.org | 1 |
-| www.dtail.dev | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 11 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 9 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 9 |
-| standby.foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 9 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 9 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 9 |
-| standby.foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 8 |
-| standby.foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 8 |
-| standby.foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways... | 7 |
-| dory.buetow.org/Dorybau... | 7 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 7 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 7 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 7 |
-| standby.foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 6 |
-| foo.zone/gemfeed/2025-06-22-task-samurai... | 6 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 5 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 5 |
-| standby.foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 5 |
-| standby.foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 5 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 4 |
-| foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs... | 4 |
-| foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku... | 4 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 4 |
-| standby.foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 4 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 4 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 4 |
-| foo.zone/uptime-stats... | 4 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 4 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 4 |
-| foo.zone/gemfeed/index... | 4 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 4 |
-| foo.zone/about/index... | 3 |
-| standby.foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 3 |
-| foo.zone/notes/mind-management... | 3 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 3 |
-| foo.zone/gemfeed/2024-12-15-random-helix-themes... | 3 |
-| foo.zone/notes/97-things-every-sre-should-know... | 3 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 3 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 3 |
-| foo.zone/notes/site-reliability-engineering... | 3 |
-| standby.foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 3 |
-| standby.foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again... | 3 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 3 |
-| foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 3 |
-| foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 3 |
-| foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd... | 3 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 3 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 3 |
-| foo.zone/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta... | 3 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250627.gmi b/stats/20250627.gmi
deleted file mode 100644
index ae6ae3fc..00000000
--- a/stats/20250627.gmi
+++ /dev/null
@@ -1,109 +0,0 @@
-## Stats for 2025-06-27
-
-### Summary
-
-* Total requests: 3879
-* Filtered requests: 38323
-* Gemini requests: 42
-* Web requests: 3837
-* IPv4 requests: 2698
-* IPv6 requests: 1181
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 49 |
-| Gemini Gemfeed | 4 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 44 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------------|-----------------|
-| foo.zone | 214 |
-| standby.foo.zone | 80 |
-| irregular.ninja | 16 |
-| www.foo.zone | 16 |
-| buetow.org | 5 |
-| paul.buetow.org | 4 |
-| www.irregular.ninja | 3 |
-| alt.irregular.ninja | 2 |
-| standby.alt.irregular.ninja | 2 |
-| www.dtail.dev | 2 |
-| blowfish.buetow.org | 1 |
-| blog.buetow.org | 1 |
-| www.paul.buetow.org | 1 |
-| dory.buetow.org | 1 |
-| standby.irregular.ninja | 1 |
-| standby.paul.buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 20 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 12 |
-| foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 12 |
-| foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again... | 11 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 11 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 10 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 10 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 9 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 9 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 9 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 9 |
-| standby.foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 8 |
-| foo.zone/gemfeed/index... | 7 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 7 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 6 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 6 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 6 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 5 |
-| foo.zone/gemfeed/2025-06-22-task-samurai... | 5 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 5 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 5 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 5 |
-| foo.zone/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku... | 5 |
-| foo.zone/site-mirrors... | 4 |
-| standby.foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 4 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 4 |
-| foo.zone/about/novels... | 4 |
-| foo.zone/gemfeed/gemini:/foo.zone/gemfeed/2025-06-22-task-samurai... | 4 |
-| foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0... | 4 |
-| standby.foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 4 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 4 |
-| foo.zone/notes/staff-engineer... | 4 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 4 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 4 |
-| foo.zone/gemfeed/2008-06-26-perl-poetry... | 4 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| standby.foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3... | 3 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 3 |
-| irregular.ninja/html/page-1... | 3 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 3 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 3 |
-| foo.zone/about/resources... | 3 |
-| standby.foo.zone/gemfeed/2023-11-19-site-reliability-engineering-part-2... | 3 |
-| foo.zone/gemfeed/2011-05-07-perl-daemon-service-framework... | 3 |
-| paul.buetow.org/novels... | 3 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 3 |
-| foo.zone/gemfeed/2016-04-03-offsite-backup-with-zfs... | 3 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 3 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 3 |
-| foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250628.gmi b/stats/20250628.gmi
deleted file mode 100644
index 5817fcb5..00000000
--- a/stats/20250628.gmi
+++ /dev/null
@@ -1,106 +0,0 @@
-## Stats for 2025-06-28
-
-### Summary
-
-* Total requests: 4248
-* Filtered requests: 40487
-* Gemini requests: 12
-* Web requests: 4236
-* IPv4 requests: 3008
-* IPv6 requests: 1240
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 45 |
-| Gemini Gemfeed | 3 |
-| Gemini Atom | 1 |
-| Web Gemfeed | 0 |
-| Web Atom | 41 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| irregular.ninja | 170 |
-| foo.zone | 148 |
-| standby.foo.zone | 62 |
-| www.foo.zone | 15 |
-| dtail.dev | 2 |
-| www.irregular.ninja | 2 |
-| www.dtail.dev | 1 |
-| standby.irregular.ninja | 1 |
-| blog.buetow.org | 1 |
-| fishfinger.buetow.org | 1 |
-| www.dory.buetow.org | 1 |
-| www.buetow.org | 1 |
-| buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 16 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 12 |
-| standby.foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 9 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 8 |
-| foo.zone/about/resources... | 8 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 7 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 7 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 7 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 7 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 7 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 7 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 6 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 6 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 6 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 6 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 6 |
-| foo.zone/gemfeed/2025-06-22-task-samurai... | 5 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 5 |
-| standby.foo.zone/gemfeed/2025-06-22-task-samurai... | 5 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 5 |
-| foo.zone/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios... | 5 |
-| foo.zone/gemfeed/index... | 5 |
-| foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 4 |
-| irregular.ninja/html/page-1... | 4 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 4 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 4 |
-| foo.zone/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes... | 4 |
-| foo.zone/gemfeed/2008-06-26-perl-poetry... | 4 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 4 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 4 |
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 4 |
-| foo.zone/site-mirrors... | 4 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 4 |
-| foo.zone/uptime-stats... | 4 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 4 |
-| foo.zone/gemfeed/2023-08-18-site-reliability-engineering-part-1... | 3 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 3 |
-| foo.zone/gemfeed/2021-10-22-defensive-devops... | 3 |
-| foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux... | 3 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 3 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 3 |
-| foo.zone/gemfeed/2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4... | 3 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 3 |
-| foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways... | 3 |
-| foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 3 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 3 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 3 |
-| foo.zone/gemfeed/2023-12-10-bash-golf-part-3... | 3 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 3 |
-| foo.zone/gemfeed/2024-09-07-projects-i-support... | 3 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250629.gmi b/stats/20250629.gmi
deleted file mode 100644
index 040b794e..00000000
--- a/stats/20250629.gmi
+++ /dev/null
@@ -1,105 +0,0 @@
-## Stats for 2025-06-29
-
-### Summary
-
-* Total requests: 2922
-* Filtered requests: 40449
-* Gemini requests: 28
-* Web requests: 2894
-* IPv4 requests: 2207
-* IPv6 requests: 715
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 43 |
-| Gemini Gemfeed | 3 |
-| Gemini Atom | 0 |
-| Web Gemfeed | 0 |
-| Web Atom | 40 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-------------------------|-----------------|
-| foo.zone | 140 |
-| standby.foo.zone | 34 |
-| irregular.ninja | 19 |
-| www.foo.zone | 8 |
-| www.irregular.ninja | 5 |
-| www.paul.buetow.org | 2 |
-| fishfinger.buetow.org | 1 |
-| blog.buetow.org | 1 |
-| standby.irregular.ninja | 1 |
-| paul.buetow.org | 1 |
-| blowfish.buetow.org | 1 |
-| buetow.org | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 18 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 15 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 10 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 9 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 6 |
-| foo.zone/gemfeed/2025-06-22-task-samurai... | 6 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 6 |
-| foo.zone/about/resources... | 5 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 5 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 4 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 4 |
-| foo.zone/site-mirrors... | 4 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 4 |
-| foo.zone/uptime-stats... | 4 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 4 |
-| irregular.ninja/html/page-1... | 4 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 4 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 4 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 3 |
-| foo.zone/gemfeed/2023-11-11-mind-management-book-notes... | 3 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 3 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 3 |
-| irregular.ninja/html/index... | 3 |
-| foo.zone/gemfeed/index... | 3 |
-| foo.zone/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2... | 3 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 3 |
-| foo.zone/gemfeed/2008-06-26-perl-poetry... | 3 |
-| standby.foo.zone/gemfeed/2023-03-16-the-pragmatic-programmer-book-notes... | 2 |
-| foo.zone/gemfeed/2023-11-19-site-reliability-engineering-part-2... | 2 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 2 |
-| www.foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 2 |
-| foo.zone/about/index... | 2 |
-| foo.zone/other-resources... | 2 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 2 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 2 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 2 |
-| foo.zone/gemfeed/2022-01-01-bash-golf-part-2... | 2 |
-| foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd... | 2 |
-| foo.zone/gemfeed/2023-04-01-never-split-the-difference-book-notes... | 2 |
-| foo.zone/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for... | 2 |
-| www.paul.buetow.org/resources... | 2 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 2 |
-| irregular.ninja/html/11-27... | 2 |
-| foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 2 |
-| standby.foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 2 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 2 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 2 |
-| foo.zone/gemfeed/2024-09-07-site-reliability-engineering-part-4... | 2 |
-| foo.zone/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3... | 2 |
-| foo.zone/notes/97-things-every-sre-should-know... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/20250630.gmi b/stats/20250630.gmi
deleted file mode 100644
index 49e57d1e..00000000
--- a/stats/20250630.gmi
+++ /dev/null
@@ -1,101 +0,0 @@
-## Stats for 2025-06-30
-
-### Summary
-
-* Total requests: 2609
-* Filtered requests: 3220
-* Gemini requests: 81
-* Web requests: 2528
-* IPv4 requests: 1673
-* IPv6 requests: 936
-
-### Feed Statistics
-
-```
-| Feed Type | Count |
-|----------------|-------|
-| Total | 34 |
-| Gemini Gemfeed | 6 |
-| Gemini Atom | 3 |
-| Web Gemfeed | 0 |
-| Web Atom | 25 |
-```
-
-### Page Statistics (by Host)
-
-```
-| Host | Unique Visitors |
-|-----------------------|-----------------|
-| foo.zone | 52 |
-| irregular.ninja | 21 |
-| standby.foo.zone | 13 |
-| www.foo.zone | 5 |
-| buetow.org | 2 |
-| standby.foo.zone:1965 | 1 |
-| paul.buetow.org | 1 |
-| www.dtail.dev | 1 |
-```
-
-### Page Statistics (by URL)
-
-```
-| URL | Unique Visitors |
-|----------------------------------------------------------------------------|-----------------|
-| foo.zone/gemfeed/index... | 6 |
-| foo.zone/gemfeed/2025-06-22-task-samurai... | 3 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 3 |
-| irregular.ninja/html/8-20... | 2 |
-| irregular.ninja/html/5-18... | 2 |
-| irregular.ninja/html/4-7... | 2 |
-| foo.zone/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all... | 2 |
-| irregular.ninja/html/9-39... | 2 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 2 |
-| irregular.ninja/html/12-29... | 2 |
-| irregular.ninja/html/6-18... | 2 |
-| irregular.ninja/html/10-34... | 2 |
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 2 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 2 |
-| irregular.ninja/html/12-9... | 2 |
-| irregular.ninja/html/4-39... | 2 |
-| irregular.ninja/html/9-32... | 2 |
-| irregular.ninja/html/9-16... | 2 |
-| irregular.ninja/html/11-26... | 2 |
-| irregular.ninja/html/4-12... | 2 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 2 |
-| irregular.ninja/html/10-23... | 2 |
-| irregular.ninja/html/2-17... | 2 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 2 |
-| foo.zone/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet... | 2 |
-| irregular.ninja/html/6-21... | 2 |
-| irregular.ninja/html/6-33... | 2 |
-| irregular.ninja/html/12-14... | 2 |
-| irregular.ninja/html/10-31... | 2 |
-| irregular.ninja/html/11-29... | 2 |
-| irregular.ninja/html/1-1... | 2 |
-| irregular.ninja/html/10-27... | 2 |
-| irregular.ninja/html/2-31... | 2 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 2 |
-| irregular.ninja/html/10-18... | 2 |
-| irregular.ninja/html/1-14... | 2 |
-| irregular.ninja/html/11-39... | 2 |
-| foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 2 |
-| irregular.ninja/html/5-37... | 2 |
-| irregular.ninja/html/page-12... | 2 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 2 |
-| irregular.ninja/html/index... | 2 |
-| irregular.ninja/html/4-1... | 2 |
-| irregular.ninja/html/1-11... | 2 |
-| irregular.ninja/html/1-10... | 2 |
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 2 |
-| irregular.ninja/html/6-34... | 2 |
-| irregular.ninja/html/11-2... | 2 |
-| irregular.ninja/html/13-18... | 2 |
-| irregular.ninja/html/4-4... | 2 |
-```
-
-... and more (truncated to 50 entries).
-
-## Related Reports
-
-=> ./30day_summary_20250630.gmi 30-Day Summary Report
-
diff --git a/stats/30day_summary_20250630.gmi b/stats/30day_summary_20250630.gmi
deleted file mode 100644
index aefa07ed..00000000
--- a/stats/30day_summary_20250630.gmi
+++ /dev/null
@@ -1,202 +0,0 @@
-# 30-Day Summary Report
-## Generated on 2025-06-30
-
-## Daily Summary Evolution (Last 30 Days)
-
-### Total Requests by Day
-
-```
-| Date | Total | Filtered | Gemini | Web | IPv4 | IPv6 |
-|------------|-------|----------|--------|------|------|------|
-| 2025-06-01 | 3245 | 39657 | 8 | 3237 | 2610 | 635 |
-| 2025-06-02 | 4108 | 39561 | 18 | 4090 | 3050 | 1058 |
-| 2025-06-03 | 4035 | 41061 | 12 | 4023 | 3007 | 1028 |
-| 2025-06-04 | 4076 | 41833 | 14 | 4062 | 2994 | 1082 |
-| 2025-06-05 | 5598 | 48823 | 32 | 5566 | 4252 | 1346 |
-| 2025-06-06 | 3997 | 50776 | 24 | 3973 | 2927 | 1070 |
-| 2025-06-07 | 4921 | 41102 | 40 | 4881 | 3670 | 1251 |
-| 2025-06-08 | 4160 | 41237 | 14 | 4146 | 3412 | 748 |
-| 2025-06-09 | 3950 | 39371 | 21 | 3929 | 2808 | 1142 |
-| 2025-06-10 | 4100 | 40129 | 20 | 4080 | 2891 | 1209 |
-| 2025-06-11 | 4458 | 42022 | 20 | 4438 | 3199 | 1259 |
-| 2025-06-12 | 5356 | 49596 | 18 | 5338 | 4220 | 1136 |
-| 2025-06-13 | 3950 | 39122 | 16 | 3934 | 2913 | 1037 |
-| 2025-06-14 | 4332 | 42286 | 12 | 4320 | 3010 | 1322 |
-| 2025-06-15 | 3300 | 40276 | 28 | 3272 | 2736 | 564 |
-| 2025-06-16 | 3734 | 49947 | 12 | 3722 | 2528 | 1206 |
-| 2025-06-17 | 4319 | 45254 | 50 | 4269 | 3309 | 1010 |
-| 2025-06-18 | 3796 | 38360 | 46 | 3750 | 2751 | 1045 |
-| 2025-06-19 | 4117 | 44894 | 170 | 3947 | 2716 | 1401 |
-| 2025-06-20 | 3627 | 44209 | 30 | 3597 | 2595 | 1032 |
-| 2025-06-21 | 3569 | 37337 | 32 | 3537 | 2428 | 1141 |
-| 2025-06-22 | 3173 | 41619 | 27 | 3146 | 2566 | 607 |
-| 2025-06-23 | 3817 | 46619 | 18 | 3799 | 2678 | 1139 |
-| 2025-06-24 | 3997 | 43953 | 8 | 3989 | 2772 | 1225 |
-| 2025-06-25 | 4586 | 42568 | 12 | 4574 | 3163 | 1423 |
-| 2025-06-26 | 3858 | 39068 | 35 | 3823 | 2830 | 1028 |
-| 2025-06-27 | 3879 | 38323 | 42 | 3837 | 2698 | 1181 |
-| 2025-06-28 | 4248 | 40487 | 12 | 4236 | 3008 | 1240 |
-| 2025-06-29 | 2922 | 40449 | 28 | 2894 | 2207 | 715 |
-| 2025-06-30 | 2618 | 3563 | 82 | 2536 | 1681 | 937 |
-```
-
-### Feed Statistics Evolution
-
-```
-| Date | Total | Gem Feed | Gem Atom | Web Feed | Web Atom |
-|------------|-------|----------|----------|----------|----------|
-| 2025-06-01 | 42 | 1 | 0 | 0 | 41 |
-| 2025-06-02 | 44 | 1 | 1 | 0 | 42 |
-| 2025-06-03 | 53 | 3 | 2 | 0 | 48 |
-| 2025-06-04 | 44 | 1 | 1 | 0 | 42 |
-| 2025-06-05 | 56 | 3 | 1 | 0 | 52 |
-| 2025-06-06 | 45 | 0 | 0 | 0 | 45 |
-| 2025-06-07 | 48 | 2 | 0 | 0 | 46 |
-| 2025-06-08 | 49 | 0 | 2 | 0 | 47 |
-| 2025-06-09 | 55 | 3 | 1 | 0 | 51 |
-| 2025-06-10 | 48 | 2 | 1 | 0 | 45 |
-| 2025-06-11 | 45 | 1 | 1 | 0 | 43 |
-| 2025-06-12 | 43 | 0 | 1 | 0 | 42 |
-| 2025-06-13 | 47 | 5 | 2 | 0 | 41 |
-| 2025-06-14 | 39 | 1 | 0 | 0 | 38 |
-| 2025-06-15 | 46 | 2 | 1 | 0 | 43 |
-| 2025-06-16 | 39 | 1 | 1 | 0 | 37 |
-| 2025-06-17 | 52 | 4 | 2 | 1 | 46 |
-| 2025-06-18 | 49 | 3 | 1 | 0 | 45 |
-| 2025-06-19 | 40 | 2 | 1 | 0 | 37 |
-| 2025-06-20 | 52 | 5 | 1 | 0 | 47 |
-| 2025-06-21 | 44 | 2 | 1 | 0 | 41 |
-| 2025-06-22 | 46 | 3 | 2 | 0 | 41 |
-| 2025-06-23 | 49 | 4 | 0 | 0 | 45 |
-| 2025-06-24 | 46 | 1 | 0 | 0 | 45 |
-| 2025-06-25 | 50 | 5 | 1 | 0 | 44 |
-| 2025-06-26 | 48 | 2 | 0 | 0 | 46 |
-| 2025-06-27 | 49 | 4 | 1 | 0 | 44 |
-| 2025-06-28 | 45 | 3 | 1 | 0 | 41 |
-| 2025-06-29 | 43 | 3 | 0 | 0 | 40 |
-| 2025-06-30 | 35 | 6 | 3 | 0 | 26 |
-```
-
-## Top 50 Hosts (30-Day Total)
-
-```
-| Host | Total Unique Visitors |
-|-----------------------------|-----------------------|
-| foo.zone | 4322 |
-| standby.foo.zone | 2280 |
-| irregular.ninja | 883 |
-| www.foo.zone | 266 |
-| buetow.org | 105 |
-| www.irregular.ninja | 81 |
-| paul.buetow.org | 67 |
-| dory.buetow.org | 47 |
-| dtail.dev | 25 |
-| standby.irregular.ninja | 25 |
-| alt.irregular.ninja | 23 |
-| www.dtail.dev | 22 |
-| www.alt.irregular.ninja | 21 |
-| www.buetow.org | 21 |
-| standby.alt.irregular.ninja | 20 |
-| fishfinger.buetow.org | 17 |
-| blog.buetow.org | 14 |
-| foo.zone:1965 | 13 |
-| standby.foo.zone:1965 | 12 |
-| standby.paul.buetow.org | 10 |
-| www.paul.buetow.org | 9 |
-| blowfish.buetow.org | 8 |
-| www.dory.buetow.org | 5 |
-| www.foo.zone:1965 | 5 |
-| standby.dory.buetow.org | 5 |
-| snonux.foo | 2 |
-| www.blog.buetow.org | 2 |
-```
-
-## Top 50 URLs (30-Day Total)
-
-```
-| URL | Total Unique Visitors |
-|-------------------------------------------------------------------------------------------------------|-----------------------|
-| foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim... | 252 |
-| foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 237 |
-| foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD... | 206 |
-| foo.zone/gemfeed/2024-05-01-slow-productivity-book-notes... | 144 |
-| foo.zone/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang... | 144 |
-| foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid... | 144 |
-| foo.zone/gemfeed/2021-05-16-personal-bash-coding-style-guide... | 131 |
-| foo.zone/gemfeed/index... | 129 |
-| standby.foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 123 |
-| foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 123 |
-| foo.zone/gemfeed/2025-05-02-terminal-multiplexing-with-tmux-fish-edition... | 117 |
-| foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program... | 113 |
-| foo.zone/gemfeed/2024-08-05-typing-127.1-words-per-minute... | 109 |
-| foo.zone/gemfeed/2021-04-24-welcome-to-the-geminispace... | 103 |
-| foo.zone/gemfeed/2023-01-23-why-grapheneos-rox... | 103 |
-| foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2... | 92 |
-| standby.foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1... | 91 |
-| foo.zone/gemfeed/2025-02-08-random-weird-things-ii... | 91 |
-| foo.zone/gemfeed/2025-04-05-f3s-kubernetes-with-freebsd-part-4... | 90 |
-| foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice... | 88 |
-| foo.zone/gemfeed/2025-01-15-working-with-an-sre-interview... | 88 |
-| foo.zone/about/resources... | 87 |
-| foo.zone/gemfeed/2025-06-07-a-monks-guide-to-happiness-book-notes... | 86 |
-| foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff... | 85 |
-| foo.zone/gemfeed/2010-05-09-the-fype-programming-language... | 84 |
-| standby.foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex... | 84 |
-| foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 82 |
-| foo.zone/gemfeed/2023-09-25-dtail-usage-examples... | 82 |
-| irregular.ninja/html/page-1... | 81 |
-| foo.zone/site-mirrors... | 78 |
-| standby.foo.zone/gemfeed/2025-05-11-f3s-kubernetes-with-freebsd-part-5... | 76 |
-| foo.zone/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3... | 76 |
-| standby.foo.zone/gemfeed/2025-03-05-sharing-on-social-media-with-gos... | 75 |
-| foo.zone/gemfeed/2024-07-07-the-stoic-challenge-book-notes... | 75 |
-| foo.zone/gemfeed/2025-04-19-when-book-notes... | 73 |
-| foo.zone/gemfeed/2024-06-23-terminal-multiplexing-with-tmux... | 71 |
-| standby.foo.zone/about/index... | 71 |
-| foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes... | 71 |
-| foo.zone/gemfeed/2021-07-04-the-well-grounded-rubyist... | 71 |
-| foo.zone/gemfeed/2010-04-09-standard-ml-and-haskell... | 70 |
-| foo.zone/uptime-stats... | 70 |
-| foo.zone/gemfeed/2025-01-01-posts-from-october-to-december-2024... | 70 |
-| foo.zone/gemfeed/2022-04-10-creative-universe... | 69 |
-| foo.zone/gemfeed/2021-11-29-bash-golf-part-1... | 69 |
-| foo.zone/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person... | 68 |
-| foo.zone/about/index... | 68 |
-| foo.zone/gemfeed/2024-07-05-random-weird-things... | 67 |
-| foo.zone/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid... | 66 |
-| foo.zone/about/novels... | 65 |
-| foo.zone/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh... | 65 |
-```
-
-## Daily Reports
-
-=> ./20250630.gmi 2025-06-30 Daily Report
-=> ./20250629.gmi 2025-06-29 Daily Report
-=> ./20250628.gmi 2025-06-28 Daily Report
-=> ./20250627.gmi 2025-06-27 Daily Report
-=> ./20250626.gmi 2025-06-26 Daily Report
-=> ./20250625.gmi 2025-06-25 Daily Report
-=> ./20250624.gmi 2025-06-24 Daily Report
-=> ./20250623.gmi 2025-06-23 Daily Report
-=> ./20250622.gmi 2025-06-22 Daily Report
-=> ./20250621.gmi 2025-06-21 Daily Report
-=> ./20250620.gmi 2025-06-20 Daily Report
-=> ./20250619.gmi 2025-06-19 Daily Report
-=> ./20250618.gmi 2025-06-18 Daily Report
-=> ./20250617.gmi 2025-06-17 Daily Report
-=> ./20250616.gmi 2025-06-16 Daily Report
-=> ./20250615.gmi 2025-06-15 Daily Report
-=> ./20250614.gmi 2025-06-14 Daily Report
-=> ./20250613.gmi 2025-06-13 Daily Report
-=> ./20250612.gmi 2025-06-12 Daily Report
-=> ./20250611.gmi 2025-06-11 Daily Report
-=> ./20250610.gmi 2025-06-10 Daily Report
-=> ./20250609.gmi 2025-06-09 Daily Report
-=> ./20250608.gmi 2025-06-08 Daily Report
-=> ./20250607.gmi 2025-06-07 Daily Report
-=> ./20250606.gmi 2025-06-06 Daily Report
-=> ./20250605.gmi 2025-06-05 Daily Report
-=> ./20250604.gmi 2025-06-04 Daily Report
-=> ./20250603.gmi 2025-06-03 Daily Report
-=> ./20250602.gmi 2025-06-02 Daily Report
-=> ./20250601.gmi 2025-06-01 Daily Report
diff --git a/uptime-stats.gmi b/uptime-stats.gmi
index 4c9b9571..de0b138f 100644
--- a/uptime-stats.gmi
+++ b/uptime-stats.gmi
@@ -1,6 +1,6 @@
# My machine uptime stats
-> This site was last updated at 2025-07-02T00:37:08+03:00
+> This site was last updated at 2025-07-09T00:47:35+03:00
The following stats were collected via `uptimed` on all of my personal computers over many years and the output was generated by `guprecords`, the global uptime records stats analyser of mine.
@@ -23,7 +23,7 @@ Boots is the total number of host boots over the entire lifespan.
+-----+----------------+-------+------------------------------+
| 1. | alphacentauri | 671 | FreeBSD 11.4-RELEASE-p7 |
| 2. | mars | 207 | Linux 3.2.0-4-amd64 |
-| 3. | *earth | 189 | Linux 6.15.3-200.fc42.x86_64 |
+| 3. | *earth | 190 | Linux 6.15.4-200.fc42.x86_64 |
| 4. | callisto | 153 | Linux 4.0.4-303.fc22.x86_64 |
| 5. | dionysus | 136 | FreeBSD 13.0-RELEASE-p11 |
| 6. | tauceti-e | 120 | Linux 3.2.0-4-amd64 |
@@ -32,14 +32,14 @@ Boots is the total number of host boots over the entire lifespan.
| 9. | pluto | 51 | Linux 3.2.0-4-amd64 |
| 10. | mega15289 | 50 | Darwin 23.4.0 |
| 11. | *mega-m3-pro | 50 | Darwin 24.5.0 |
-| 12. | *t450 | 43 | FreeBSD 14.2-RELEASE |
-| 13. | *fishfinger | 43 | OpenBSD 7.6 |
-| 14. | mega8477 | 40 | Darwin 13.4.0 |
-| 15. | phobos | 40 | Linux 3.4.0-CM-g1dd7cdf |
+| 12. | *fishfinger | 43 | OpenBSD 7.6 |
+| 13. | *t450 | 43 | FreeBSD 14.2-RELEASE |
+| 14. | phobos | 40 | Linux 3.4.0-CM-g1dd7cdf |
+| 15. | mega8477 | 40 | Darwin 13.4.0 |
| 16. | *blowfish | 38 | OpenBSD 7.6 |
| 17. | sun | 33 | FreeBSD 10.3-RELEASE-p24 |
-| 18. | *f2 | 25 | FreeBSD 14.2-RELEASE-p1 |
-| 19. | *f1 | 20 | FreeBSD 14.2-RELEASE-p1 |
+| 18. | f2 | 25 | FreeBSD 14.2-RELEASE-p1 |
+| 19. | f1 | 20 | FreeBSD 14.2-RELEASE-p1 |
| 20. | moon | 20 | FreeBSD 14.0-RELEASE-p3 |
+-----+----------------+-------+------------------------------+
```
@@ -55,7 +55,7 @@ Uptime is the total uptime of a host over the entire lifespan.
| 1. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 |
| 2. | sun | 3 years, 9 months, 26 days | FreeBSD 10.3-RELEASE-p24 |
| 3. | *uranus | 3 years, 9 months, 5 days | NetBSD 10.1 |
-| 4. | *earth | 3 years, 6 months, 20 days | Linux 6.15.3-200.fc42.x86_64 |
+| 4. | *earth | 3 years, 6 months, 26 days | Linux 6.15.4-200.fc42.x86_64 |
| 5. | *blowfish | 3 years, 5 months, 16 days | OpenBSD 7.6 |
| 6. | uugrn | 3 years, 5 months, 5 days | FreeBSD 11.2-RELEASE-p4 |
| 7. | deltavega | 3 years, 1 months, 21 days | Linux 3.10.0-1160.11.1.el7.x86_64 |
@@ -85,7 +85,7 @@ Score is calculated by combining all other metrics.
+-----+----------------+-------+-----------------------------------+
| 1. | *uranus | 342 | NetBSD 10.1 |
| 2. | vulcan | 275 | Linux 3.10.0-1160.81.1.el7.x86_64 |
-| 3. | *earth | 244 | Linux 6.15.3-200.fc42.x86_64 |
+| 3. | *earth | 245 | Linux 6.15.4-200.fc42.x86_64 |
| 4. | sun | 238 | FreeBSD 10.3-RELEASE-p24 |
| 5. | *blowfish | 218 | OpenBSD 7.6 |
| 6. | uugrn | 211 | FreeBSD 11.2-RELEASE-p4 |
@@ -125,11 +125,11 @@ Downtime is the total downtime of a host over the entire lifespan.
| 9. | mars | 1 years, 2 months, 10 days | Linux 3.2.0-4-amd64 |
| 10. | tauceti-e | 0 years, 12 months, 9 days | Linux 3.2.0-4-amd64 |
| 11. | sirius | 0 years, 8 months, 20 days | Linux 2.6.32-042stab111.12 |
-| 12. | *earth | 0 years, 6 months, 20 days | Linux 6.15.3-200.fc42.x86_64 |
+| 12. | *earth | 0 years, 6 months, 20 days | Linux 6.15.4-200.fc42.x86_64 |
| 13. | deimos | 0 years, 5 months, 15 days | Linux 4.4.5-300.fc23.x86_64 |
-| 14. | *f0 | 0 years, 4 months, 20 days | FreeBSD 14.2-RELEASE-p1 |
-| 15. | *f2 | 0 years, 4 months, 19 days | FreeBSD 14.2-RELEASE-p1 |
-| 16. | *f1 | 0 years, 4 months, 18 days | FreeBSD 14.2-RELEASE-p1 |
+| 14. | f0 | 0 years, 4 months, 20 days | FreeBSD 14.2-RELEASE-p1 |
+| 15. | f2 | 0 years, 4 months, 19 days | FreeBSD 14.2-RELEASE-p1 |
+| 16. | f1 | 0 years, 4 months, 18 days | FreeBSD 14.2-RELEASE-p1 |
| 17. | joghurt | 0 years, 2 months, 9 days | FreeBSD 7.0-PRERELEASE |
| 18. | host0 | 0 years, 2 months, 1 days | FreeBSD 6.2-RELEASE-p5 |
| 19. | fibonacci | 0 years, 1 months, 11 days | FreeBSD 5.3-RELEASE-p15 |
@@ -150,7 +150,7 @@ Lifespan is the total uptime + the total downtime of a host.
| 3. | alphacentauri | 6 years, 9 months, 13 days | FreeBSD 11.4-RELEASE-p7 |
| 4. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 |
| 5. | *makemake | 4 years, 4 months, 7 days | Linux 6.9.9-200.fc40.x86_64 |
-| 6. | *earth | 3 years, 12 months, 7 days | Linux 6.15.3-200.fc42.x86_64 |
+| 6. | *earth | 3 years, 12 months, 13 days | Linux 6.15.4-200.fc42.x86_64 |
| 7. | sun | 3 years, 10 months, 2 days | FreeBSD 10.3-RELEASE-p24 |
| 8. | *blowfish | 3 years, 5 months, 17 days | OpenBSD 7.6 |
| 9. | uugrn | 3 years, 5 months, 5 days | FreeBSD 11.2-RELEASE-p4 |
@@ -178,7 +178,7 @@ Boots is the total number of host boots over the entire lifespan.
+-----+----------------+-------+
| 1. | FreeBSD 10... | 551 |
| 2. | Linux 3... | 550 |
-| 3. | *Linux 6... | 169 |
+| 3. | *Linux 6... | 170 |
| 4. | Linux 5... | 162 |
| 5. | Linux 4... | 161 |
| 6. | FreeBSD 11... | 153 |
@@ -211,7 +211,7 @@ Uptime is the total uptime of a host over the entire lifespan.
| 2. | *OpenBSD 7... | 6 years, 9 months, 24 days |
| 3. | FreeBSD 10... | 5 years, 9 months, 9 days |
| 4. | Linux 5... | 4 years, 10 months, 21 days |
-| 5. | *Linux 6... | 2 years, 9 months, 16 days |
+| 5. | *Linux 6... | 2 years, 9 months, 22 days |
| 6. | Linux 4... | 2 years, 7 months, 22 days |
| 7. | FreeBSD 11... | 2 years, 4 months, 28 days |
| 8. | Linux 2... | 1 years, 11 months, 21 days |
@@ -242,7 +242,7 @@ Score is calculated by combining all other metrics.
| 2. | *OpenBSD 7... | 435 |
| 3. | FreeBSD 10... | 406 |
| 4. | Linux 5... | 317 |
-| 5. | *Linux 6... | 188 |
+| 5. | *Linux 6... | 189 |
| 6. | Linux 4... | 175 |
| 7. | FreeBSD 11... | 159 |
| 8. | Linux 2... | 121 |
@@ -269,7 +269,7 @@ Boots is the total number of host boots over the entire lifespan.
+-----+------------+-------+
| Pos | KernelName | Boots |
+-----+------------+-------+
-| 1. | *Linux | 1064 |
+| 1. | *Linux | 1065 |
| 2. | *FreeBSD | 944 |
| 3. | *Darwin | 155 |
| 4. | *OpenBSD | 101 |
@@ -282,15 +282,15 @@ Boots is the total number of host boots over the entire lifespan.
Uptime is the total uptime of a host over the entire lifespan.
```
-+-----+------------+-----------------------------+
-| Pos | KernelName | Uptime |
-+-----+------------+-----------------------------+
-| 1. | *Linux | 27 years, 10 months, 9 days |
-| 2. | *FreeBSD | 11 years, 5 months, 3 days |
-| 3. | *OpenBSD | 7 years, 5 months, 5 days |
-| 4. | *Darwin | 4 years, 9 months, 17 days |
-| 5. | *NetBSD | 0 years, 1 months, 1 days |
-+-----+------------+-----------------------------+
++-----+------------+------------------------------+
+| Pos | KernelName | Uptime |
++-----+------------+------------------------------+
+| 1. | *Linux | 27 years, 10 months, 15 days |
+| 2. | *FreeBSD | 11 years, 5 months, 3 days |
+| 3. | *OpenBSD | 7 years, 5 months, 5 days |
+| 4. | *Darwin | 4 years, 9 months, 17 days |
+| 5. | *NetBSD | 0 years, 1 months, 1 days |
++-----+------------+------------------------------+
```
## Top 20 Score's by KernelName
@@ -301,7 +301,7 @@ Score is calculated by combining all other metrics.
+-----+------------+-------+
| Pos | KernelName | Score |
+-----+------------+-------+
-| 1. | *Linux | 1847 |
+| 1. | *Linux | 1848 |
| 2. | *FreeBSD | 799 |
| 3. | *OpenBSD | 474 |
| 4. | *Darwin | 313 |