diff options
| author | Paul Buetow <paul@buetow.org> | 2025-08-16 09:51:47 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-08-16 09:51:47 +0300 |
| commit | aee51283bbc0dcf1e84c772188d6b80a691afc93 (patch) | |
| tree | 51f8e4879fba02f5bfc8d98af2f3553127591fe4 | |
| parent | 50ba608e5ce00b828d5e8be6f2fa89e4d5ed55e8 (diff) | |
Update content for md
| -rw-r--r-- | about/resources.md | 186 | ||||
| -rw-r--r-- | about/showcase.md | 425 | ||||
| -rw-r--r-- | about/showcase/debroid/image-1.png | 107 | ||||
| -rw-r--r-- | gemfeed/2022-06-15-sweating-the-small-stuff.md | 2 | ||||
| -rw-r--r-- | gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md | 2 | ||||
| -rw-r--r-- | gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md | 6 | ||||
| -rw-r--r-- | index.md | 2 | ||||
| -rw-r--r-- | uptime-stats.md | 26 |
8 files changed, 377 insertions, 379 deletions
diff --git a/about/resources.md b/about/resources.md index 8b91d218..dd3d3247 100644 --- a/about/resources.md +++ b/about/resources.md @@ -35,105 +35,105 @@ You won't find any links on this site because, over time, the links will break. In random order: -* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible -* 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 +* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly +* DNS and BIND; Cricket Liu; O'Reilly * The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton -* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press -* Raku Fundamentals; Moritz Lenz; Apress +* Concurrency in Go; Katherine Cox-Buday; O'Reilly +* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible * Ultimate Go Notebook; Bill Kennedy +* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook +* Java ist auch eine Insel; Christian Ullenboom; +* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications * Effective Java; Joshua Bloch; Addison-Wesley Professional -* Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers -* Leanring eBPF; Liz Rice; O'Reilly * Systemprogrammierung in Go; Frank Müller; dpunkt -* The Pragmatic Programmer; David Thomas; Addison-Wesley -* Funktionale Programmierung; Peter Pepper; Springer -* C++ Programming Language; Bjarne Stroustrup; -* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly -* Perl New Features; Joshua McAdams, brian d foy; Perl School -* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt -* The Docker Book; James Turnbull; Kindle -* Raku Recipes; J.J. Merelo; Apress -* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly -* Data Science at the Command Line; Jeroen Janssens; O'Reilly -* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications * Site Reliability Engineering; How Google runs production systems; O'Reilly -* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly -* Higher Order Perl; Mark Dominus; Morgan Kaufmann -* Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf -* 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 +* Higher Order Perl; Mark Dominus; Morgan Kaufmann +* Data Science at the Command Line; Jeroen Janssens; O'Reilly * Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson -* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional -* Developing Games in Java; David Brackeen and others...; New Riders -* Concurrency in Go; Katherine Cox-Buday; O'Reilly -* Effective awk programming; Arnold Robbins; O'Reilly -* Terraform Cookbook; Mikael Krief; Packt Publishing +* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly +* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible +* Leanring eBPF; Liz Rice; O'Reilly * Polished Ruby Programming; Jeremy Evans; Packt Publishing -* Pro Puppet; James Turnbull, Jeffrey McCune; Apress +* Raku Fundamentals; Moritz Lenz; Apress +* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional +* 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 +* The Docker Book; James Turnbull; Kindle +* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner +* Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf +* The Pragmatic Programmer; David Thomas; Addison-Wesley * Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications +* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly +* Pro Puppet; James Turnbull, Jeffrey McCune; Apress +* Funktionale Programmierung; Peter Pepper; Springer * Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press +* Terraform Cookbook; Mikael Krief; Packt Publishing +* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers +* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly +* Developing Games in Java; David Brackeen and others...; New Riders +* Modern Perl; Chromatic ; Onyx Neon Press * Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly -* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner +* Perl New Features; Joshua McAdams, brian d foy; Perl School +* Effective awk programming; Arnold Robbins; O'Reilly +* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press +* C++ Programming Language; Bjarne Stroustrup; +* Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers * Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly -* Modern Perl; Chromatic ; Onyx Neon Press -* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook -* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly -* Java ist auch eine Insel; Christian Ullenboom; -* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible -* DNS and BIND; Cricket Liu; O'Reilly +* Raku Recipes; J.J. Merelo; Apress +* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt ## 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: -* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly +* Relayd and Httpd Mastery; Michael W Lucas +* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly +* The Linux Programming Interface; Michael Kerrisk; No Starch Press +* BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley * Go: Design Patterns for Real-World Projects; Mat Ryer; Packt +* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly * Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley -* Relayd and Httpd Mastery; Michael W Lucas * Implementing Service Level Objectives; Alex Hidalgo; O'Reilly -* BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley -* The Linux Programming Interface; Michael Kerrisk; No Starch Press -* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly ## Self-development and soft-skills books In random order: -* Influence without Authority; A. Cohen, D. Bradford; Wiley -* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books -* Digital Minimalism; Cal Newport; Portofolio Penguin -* The Bullet Journal Method; Ryder Carroll; Fourth Estate -* Solve for Happy; Mo Gawdat (RE-READ 1ST TIME) -* 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 * The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd -* Ultralearning; Anna Laurent; Self-published via Amazon -* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook -* Eat That Frog!; Brian Tracy; Hodder Paperbacks +* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business * Meditation for Mortals, Oliver Burkeman, Audiobook -* So Good They Can't Ignore You; Cal Newport; Business Plus -* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion * Soft Skills; John Sommez; Manning Publications +* The Power of Now; Eckhard Tolle; Yellow Kite * Psycho-Cybernetics; Maxwell Maltz; Perigee Books -* Eat That Frog; Brian Tracy +* Deep Work; Cal Newport; Piatkus +* Getting Things Done; David Allen +* Stop starting, start finishing; Arne Roock; Lean-Kanban University * Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing -* Atomic Habits; James Clear; Random House Business -* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business -* The Joy of Missing Out; Christina Crook; New Society Publishers -* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK -* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly -* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME) * Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press -* Deep Work; Cal Newport; Piatkus +* Influence without Authority; A. Cohen, D. Bradford; Wiley +* Eat That Frog; Brian Tracy * Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook -* 101 Essays that change the way you think; Brianna Wiest; Audiobook -* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne -* The Power of Now; Eckhard Tolle; Yellow Kite -* Slow Productivity; Cal Newport; Penguin Random House -* Stop starting, start finishing; Arne Roock; Lean-Kanban University +* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME) +* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook * Ultralearning; Scott Young; Thorsons * The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook +* Solve for Happy; Mo Gawdat (RE-READ 1ST TIME) +* The Bullet Journal Method; Ryder Carroll; Fourth Estate +* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK +* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books +* Digital Minimalism; Cal Newport; Portofolio Penguin +* The Joy of Missing Out; Christina Crook; New Society Publishers +* Atomic Habits; James Clear; Random House Business +* So Good They Can't Ignore You; Cal Newport; Business Plus +* Eat That Frog!; Brian Tracy; Hodder Paperbacks * The Good Enough Job; Simone Stolzoff; Ebury Edge +* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne +* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly +* Ultralearning; Anna Laurent; Self-published via Amazon +* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion +* Slow Productivity; Cal Newport; Penguin Random House +* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select +* 101 Essays that change the way you think; Brianna Wiest; Audiobook [Here are notes of mine for some of the books](../notes/index.md) @@ -141,29 +141,29 @@ In random order: Some of these were in-person with exams; others were online learning lectures only. In random order: -* Ultimate Go Programming; Bill Kennedy; O'Reilly Online -* Functional programming lecture; Remote University of Hagen -* 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 * 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) +* MySQL Deep Dive Workshop; 2-day on-site training +* Functional programming lecture; Remote University of Hagen * 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 +* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online +* F5 Loadbalancers Training; 2-day on-site training; F5, Inc. * Apache Tomcat Best Practises; 3-day on-site training -* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online -* AWS Immersion Day; Amazon; 1-day interactive online training * Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training -* Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon -* MySQL Deep Dive Workshop; 2-day on-site training -* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online -* Developing IaC with Terraform (with Live Lessons); O'Reilly Online * Protocol buffers; O'Reilly Online -* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online * Structure and Interpretation of Computer Programs; Harold Abelson and more...; +* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online +* AWS Immersion Day; Amazon; 1-day interactive online training +* Ultimate Go Programming; Bill Kennedy; O'Reilly Online ## 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 +* Raku Guide at https://raku.guide * Advanced Bash-Scripting Guide ## Podcasts @@ -173,47 +173,47 @@ These are not whole books, but guides (smaller or larger) which I found very use In random order: * The Changelog Podcast(s) -* Fork Around And Find Out -* Dev Interrupted * Backend Banter -* Pratical AI -* Modern Mentor +* The Pragmatic Engineer Podcast +* Deep Questions with Cal Newport * BSD Now [BSD] * Hidden Brain +* Maintainable +* The ProdCast (Google SRE Podcast) +* Pratical AI * Cup o' Go [Golang] * Fallthrough [Golang] -* The Pragmatic Engineer Podcast -* The ProdCast (Google SRE Podcast) -* Maintainable -* Deep Questions with Cal Newport +* Dev Interrupted +* Fork Around And Find Out +* Modern Mentor ### 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. * Go Time (predecessor of fallthrough) -* Java Pub House -* CRE: Chaosradio Express [german] -* Modern Mentor * FLOSS weekly +* Modern Mentor * Ship It (predecessor of Fork Around And Find Out) +* Java Pub House +* CRE: Chaosradio Express [german] ## Newsletters I like This is a mix of tech and non-tech newsletters I am subscribed to. In random order: +* Applied Go Weekly Newsletter * The Imperfectionist -* Andreas Brandhorst Newsletter (Sci-Fi author) +* The Valuable Dev * Register Spill +* Andreas Brandhorst Newsletter (Sci-Fi author) +* Ruby Weekly +* byteSizeGo * Monospace Mentor +* VK Newsletter * Golang Weekly -* byteSizeGo -* Ruby Weekly * Changelog News -* VK Newsletter * The Pragmatic Engineer -* The Valuable Dev -* Applied Go Weekly Newsletter ## Magazines I like(d) @@ -221,8 +221,8 @@ This is a mix of tech I like(d). I may not be a current subscriber, but now and * freeX (not published anymore) * LWN (online only) -* Linux Magazine * Linux User +* Linux Magazine # Formal education diff --git a/about/showcase.md b/about/showcase.md index 6568ed0e..d6a62580 100644 --- a/about/showcase.md +++ b/about/showcase.md @@ -1,6 +1,6 @@ # Project Showcase -Generated on: 2025-08-08 +Generated on: 2025-08-16 This page showcases my side 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. @@ -10,7 +10,6 @@ This page showcases my side projects, providing an overview of what each project * [⇢ ⇢ Overall Statistics](#overall-statistics) * [⇢ ⇢ Projects](#projects) * [⇢ ⇢ ⇢ rexfiles](#rexfiles) -* [⇢ ⇢ ⇢ foo.zone](#foozone) * [⇢ ⇢ ⇢ totalrecall](#totalrecall) * [⇢ ⇢ ⇢ gitsyncer](#gitsyncer) * [⇢ ⇢ ⇢ timr](#timr) @@ -20,15 +19,15 @@ This page showcases my side projects, providing an overview of what each project * [⇢ ⇢ ⇢ wireguardmeshgenerator](#wireguardmeshgenerator) * [⇢ ⇢ ⇢ ds-sim](#ds-sim) * [⇢ ⇢ ⇢ sillybench](#sillybench) -* [⇢ ⇢ ⇢ gos](#gos) * [⇢ ⇢ ⇢ foostats](#foostats) +* [⇢ ⇢ ⇢ gos](#gos) * [⇢ ⇢ ⇢ rcm](#rcm) -* [⇢ ⇢ ⇢ quicklogger](#quicklogger) * [⇢ ⇢ ⇢ docker-gpodder-sync-server](#docker-gpodder-sync-server) -* [⇢ ⇢ ⇢ docker-anki-sync-server](#docker-anki-sync-server) +* [⇢ ⇢ ⇢ docker-radicale-server](#docker-radicale-server) +* [⇢ ⇢ ⇢ quicklogger](#quicklogger) * [⇢ ⇢ ⇢ terraform](#terraform) +* [⇢ ⇢ ⇢ docker-anki-sync-server](#docker-anki-sync-server) * [⇢ ⇢ ⇢ gogios](#gogios) -* [⇢ ⇢ ⇢ docker-radicale-server](#docker-radicale-server) * [⇢ ⇢ ⇢ gorum](#gorum) * [⇢ ⇢ ⇢ guprecords](#guprecords) * [⇢ ⇢ ⇢ randomjournalpage](#randomjournalpage) @@ -37,6 +36,7 @@ This page showcases my side projects, providing an overview of what each project * [⇢ ⇢ ⇢ photoalbum](#photoalbum) * [⇢ ⇢ ⇢ algorithms](#algorithms) * [⇢ ⇢ ⇢ geheim](#geheim) +* [⇢ ⇢ ⇢ foo.zone](#foozone) * [⇢ ⇢ ⇢ perl-c-fibonacci](#perl-c-fibonacci) * [⇢ ⇢ ⇢ ioriot](#ioriot) * [⇢ ⇢ ⇢ staticfarm-apache-handlers](#staticfarm-apache-handlers) @@ -60,35 +60,35 @@ This page showcases my side projects, providing an overview of what each project * [⇢ ⇢ ⇢ perldaemon](#perldaemon) * [⇢ ⇢ ⇢ awksite](#awksite) * [⇢ ⇢ ⇢ jsmstrade](#jsmstrade) -* [⇢ ⇢ ⇢ ychat](#ychat) * [⇢ ⇢ ⇢ netcalendar](#netcalendar) * [⇢ ⇢ ⇢ hsbot](#hsbot) -* [⇢ ⇢ ⇢ fype](#fype) +* [⇢ ⇢ ⇢ ychat](#ychat) * [⇢ ⇢ ⇢ vs-sim](#vs-sim) +* [⇢ ⇢ ⇢ fype](#fype) ## Overall Statistics * 📦 Total Projects: 56 -* 📊 Total Commits: 10,717 -* 📈 Total Lines of Code: 215,469 -* 📄 Total Lines of Documentation: 22,558 -* 💻 Languages: Go (28.8%), Java (18.8%), C (9.4%), C++ (8.2%), Perl (7.4%), XML (6.3%), C/C++ (5.8%), Shell (5.6%), HTML (1.7%), Config (1.7%), Ruby (1.3%), HCL (1.3%), Python (0.8%), Make (0.7%), YAML (0.6%), Raku (0.4%), JSON (0.4%), CSS (0.3%), Haskell (0.3%), TOML (0.2%) -* 📚 Documentation: Text (50.8%), Markdown (47.0%), LaTeX (2.2%) +* 📊 Total Commits: 10,762 +* 📈 Total Lines of Code: 208,392 +* 📄 Total Lines of Documentation: 22,008 +* 💻 Languages: Go (29.7%), Java (19.4%), C++ (9.7%), C (9.2%), Perl (7.9%), Shell (6.7%), C/C++ (6.4%), Config (1.9%), HTML (1.8%), Ruby (1.4%), HCL (1.3%), YAML (0.9%), Make (0.9%), Python (0.8%), Raku (0.4%), CSS (0.4%), JSON (0.4%), XML (0.3%), Haskell (0.3%), TOML (0.2%) +* 📚 Documentation: Text (49.0%), Markdown (48.4%), LaTeX (2.6%) * 🎵 Vibe-Coded Projects: 4 out of 56 (7.1%) -* 🤖 AI-Assisted Projects (including vibe-coded): 9 out of 56 (16.1% AI-assisted, 83.9% human-only) +* 🤖 AI-Assisted Projects (including vibe-coded): 8 out of 56 (14.3% AI-assisted, 85.7% human-only) * 🚀 Release Status: 34 released, 22 experimental (60.7% with releases, 39.3% experimental) ## Projects ### rexfiles -* 💻 Languages: Perl (30.7%), Shell (25.7%), YAML (15.7%), TOML (6.9%), Config (6.4%), CSS (6.3%), Ruby (4.7%), Lua (1.4%), Make (0.8%), Docker (0.8%), JSON (0.5%), INI (0.1%) -* 📚 Documentation: Text (77.7%), Markdown (22.3%) -* 📊 Commits: 922 -* 📈 Lines of Code: 5167 -* 📄 Lines of Documentation: 1069 -* 📅 Development Period: 2021-12-28 to 2025-08-07 -* 🔥 Recent Activity: 7.3 days (avg. age of last 42 commits) +* 💻 Languages: Perl (28.0%), YAML (24.3%), Shell (23.3%), TOML (6.2%), Config (5.8%), CSS (5.7%), Ruby (4.3%), Lua (1.2%), Docker (0.7%), JSON (0.5%), INI (0.1%) +* 📚 Documentation: Text (70.2%), Markdown (29.8%) +* 📊 Commits: 947 +* 📈 Lines of Code: 5715 +* 📄 Lines of Documentation: 1183 +* 📅 Development Period: 2021-12-28 to 2025-08-13 +* 🔥 Recent Activity: 7.4 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -97,31 +97,8 @@ Based on my analysis of the codebase, **rexfiles** is a comprehensive infrastruc The project consists of three main components: **dotfiles** management for personal development environment configuration (bash, fish shell, helix editor, tmux, etc.), **frontends** for managing production OpenBSD servers with services like DNS (nsd), web servers (httpd), mail (OpenSMTPD), SSL certificates (ACME), and monitoring systems, and **babylon5** containing Docker container startup scripts for self-hosted applications. The implementation leverages Rex's declarative syntax to define tasks for package installation, file management, service configuration, and system state management, with templates for configuration files and support for multiple operating systems (OpenBSD, FreeBSD, Fedora Linux, Termux). This approach provides a KISS (Keep It Simple, Stupid) alternative to more complex configuration management tools while maintaining the ability to manage both local development environments and production infrastructure consistently. -[View on Codeberg](https://codeberg.org/snonux/rexfiles) -[View on GitHub](https://github.com/snonux/rexfiles) - ---- - -### foo.zone - -* 💻 Languages: XML (98.3%), Shell (1.2%), Go (0.5%) -* 📚 Documentation: Text (75.3%), Markdown (24.7%) -* 📊 Commits: 3017 -* 📈 Lines of Code: 13274 -* 📄 Lines of Documentation: 295 -* 📅 Development Period: 2021-04-29 to 2025-08-07 -* 🔥 Recent Activity: 9.5 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. - -The site is built using **Gemtexter**, a static site generator that creates both HTML and Gemini protocol content from markdown sources. The architecture is refreshingly simple and follows KISS principles, with content organized into several key sections: a main blog feed (gemfeed) with over 100 technical posts dating back to 2008, detailed book notes and summaries, project documentation (including tools like DTail for distributed log tailing), and personal resources. The website is served by OpenBSD using relayd and httpd, demonstrating the author's preference for robust, security-focused Unix systems. The project emphasizes clean, semantic HTML, custom CSS styling, and accessibility, while maintaining both web and Gemini protocol compatibility for broader reach across different internet communities. - -[View on Codeberg](https://codeberg.org/snonux/foo.zone) -[View on GitHub](https://github.com/snonux/foo.zone) +[View on Codeberg](https://codeberg.org/snonux/conf) +[View on GitHub](https://github.com/snonux/conf) --- @@ -133,7 +110,7 @@ The site is built using **Gemtexter**, a static site generator that creates both * 📈 Lines of Code: 12003 * 📄 Lines of Documentation: 361 * 📅 Development Period: 2025-07-14 to 2025-08-02 -* 🔥 Recent Activity: 17.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 24.8 days (avg. age of last 42 commits) * ⚖️ License: MIT * 🏷️ Latest Release: v0.7.5 (2025-08-02) * 🎵 Vibe-Coded: This project has been vibe coded @@ -160,7 +137,7 @@ The project is implemented in Go with a modular architecture featuring both CLI * 📈 Lines of Code: 9166 * 📄 Lines of Documentation: 2484 * 📅 Development Period: 2025-06-23 to 2025-07-25 -* 🔥 Recent Activity: 24.7 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 32.4 days (avg. age of last 42 commits) * ⚖️ License: BSD-2-Clause * 🏷️ Latest Release: v0.8.6 (2025-07-25) * 🎵 Vibe-Coded: This project has been vibe coded @@ -183,7 +160,7 @@ The tool is implemented in Go with a clean architecture that supports both indiv * 📈 Lines of Code: 873 * 📄 Lines of Documentation: 137 * 📅 Development Period: 2025-06-25 to 2025-07-19 -* 🔥 Recent Activity: 41.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 48.8 days (avg. age of last 42 commits) * ⚖️ License: BSD-2-Clause * 🏷️ Latest Release: v0.0.0 (2025-06-29) * 🎵 Vibe-Coded: This project has been vibe coded @@ -206,7 +183,7 @@ The project is implemented using a clean modular architecture with the CLI entry * 📈 Lines of Code: 6160 * 📄 Lines of Documentation: 162 * 📅 Development Period: 2025-06-19 to 2025-07-12 -* 🔥 Recent Activity: 42.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 50.6 days (avg. age of last 42 commits) * ⚖️ License: BSD-2-Clause * 🏷️ Latest Release: v0.9.2 (2025-07-02) * 🎵 Vibe-Coded: This project has been vibe coded @@ -233,7 +210,7 @@ The implementation follows a clean architecture with clear separation of concern * 📈 Lines of Code: 12762 * 📄 Lines of Documentation: 742 * 📅 Development Period: 2024-01-18 to 2025-07-14 -* 🔥 Recent Activity: 80.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 88.6 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 @@ -262,7 +239,7 @@ The architecture combines kernel-level tracing with user-space analysis: eBPF pr * 📈 Lines of Code: 20091 * 📄 Lines of Documentation: 5674 * 📅 Development Period: 2020-01-09 to 2025-06-20 -* 🔥 Recent Activity: 82.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 90.1 days (avg. age of last 42 commits) * ⚖️ License: Apache-2.0 * 🏷️ Latest Release: v4.3.3 (2024-08-23) * 🤖 AI-Assisted: This project was partially created with the help of generative AI @@ -289,7 +266,7 @@ The system uses a client-server architecture where dtail servers run on target m * 📈 Lines of Code: 396 * 📄 Lines of Documentation: 24 * 📅 Development Period: 2025-04-18 to 2025-05-11 -* 🔥 Recent Activity: 101.7 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 109.4 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.0.0 (2025-05-11) @@ -311,7 +288,7 @@ The implementation uses a YAML configuration file to define the network topology * 📈 Lines of Code: 25762 * 📄 Lines of Documentation: 3101 * 📅 Development Period: 2008-05-15 to 2025-06-27 -* 🔥 Recent Activity: 115.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 122.8 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 @@ -336,7 +313,7 @@ The project is built on an event-driven architecture with clear component separa * 📈 Lines of Code: 33 * 📄 Lines of Documentation: 3 * 📅 Development Period: 2025-04-03 to 2025-04-03 -* 🔥 Recent Activity: 127.7 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 135.4 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -350,6 +327,28 @@ The implementation is minimal and focused, consisting of a basic Go module with --- +### foostats + +* 💻 Languages: Perl (100.0%) +* 📚 Documentation: Markdown (85.1%), Text (14.9%) +* 📊 Commits: 72 +* 📈 Lines of Code: 1599 +* 📄 Lines of Documentation: 154 +* 📅 Development Period: 2023-01-02 to 2025-08-09 +* 🔥 Recent Activity: 144.6 days (avg. age of last 42 commits) +* ⚖️ License: Custom License +* 🏷️ Latest Release: v0.1.0 (2025-07-12) + + +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. + +The project implements a modular architecture with seven core components: FileHelper for I/O operations, DateHelper for date management, Logreader for log parsing, Filter for security filtering, Aggregator for statistics collection, FileOutputter for compressed JSON storage, Replicator for multi-node data sharing, Merger for combining statistics, and Reporter for generating human-readable Gemtext reports. It supports distributed deployments with replication between partner nodes and includes security features like suspicious request filtering based on configurable patterns (blocking common attack vectors like WordPress admin paths and PHP files). + +[View on Codeberg](https://codeberg.org/snonux/foostats) +[View on GitHub](https://github.com/snonux/foostats) + +--- + ### gos * 💻 Languages: Go (98.6%), YAML (1.1%), JSON (0.2%) @@ -358,7 +357,7 @@ The implementation is minimal and focused, consisting of a basic Go module with * 📈 Lines of Code: 3967 * 📄 Lines of Documentation: 324 * 📅 Development Period: 2024-05-04 to 2025-07-12 -* 🔥 Recent Activity: 140.8 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 148.5 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.0.0 (2025-03-04) @@ -376,28 +375,6 @@ The tool is architected around a file-based queueing system where posts progress --- -### foostats - -* 💻 Languages: Perl (100.0%) -* 📚 Documentation: Markdown (85.1%), Text (14.9%) -* 📊 Commits: 70 -* 📈 Lines of Code: 1586 -* 📄 Lines of Documentation: 154 -* 📅 Development Period: 2023-01-02 to 2025-07-12 -* 🔥 Recent Activity: 148.6 days (avg. age of last 42 commits) -* ⚖️ License: Custom License -* 🏷️ Latest Release: v0.1.0 (2025-07-12) - - -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. - -The project implements a modular architecture with seven core components: FileHelper for I/O operations, DateHelper for date management, Logreader for log parsing, Filter for security filtering, Aggregator for statistics collection, FileOutputter for compressed JSON storage, Replicator for multi-node data sharing, Merger for combining statistics, and Reporter for generating human-readable Gemtext reports. It supports distributed deployments with replication between partner nodes and includes security features like suspicious request filtering based on configurable patterns (blocking common attack vectors like WordPress admin paths and PHP files). - -[View on Codeberg](https://codeberg.org/snonux/foostats) -[View on GitHub](https://github.com/snonux/foostats) - ---- - ### rcm * 💻 Languages: Ruby (99.8%), TOML (0.2%) @@ -406,7 +383,7 @@ The project implements a modular architecture with seven core components: FileHe * 📈 Lines of Code: 1373 * 📄 Lines of Documentation: 48 * 📅 Development Period: 2024-12-05 to 2025-02-28 -* 🔥 Recent Activity: 168.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 176.1 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -420,6 +397,50 @@ The system is implemented with a modular architecture centered around a DSL clas --- +### docker-gpodder-sync-server + +* 💻 Languages: Make (100.0%) +* 📚 Documentation: Markdown (100.0%) +* 📊 Commits: 4 +* 📈 Lines of Code: 17 +* 📄 Lines of Documentation: 3 +* 📅 Development Period: 2024-03-24 to 2025-08-08 +* 🔥 Recent Activity: 384.3 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. + +The project is implemented as a simple Docker build system with a Makefile that provides convenient commands for building, running, and deploying the containerized service. The actual server code is included as a git submodule, while this wrapper provides infrastructure automation including data persistence through volume mounting (`./data` to `/var/www/server/data`), network configuration (port 8080 exposure), and AWS ECR deployment capabilities. This approach makes it easy to deploy a self-hosted GPodder sync server with minimal setup, useful for podcast enthusiasts who want to maintain their own synchronization service rather than relying on third-party services. + +[View on Codeberg](https://codeberg.org/snonux/docker-gpodder-sync-server) +[View on GitHub](https://github.com/snonux/docker-gpodder-sync-server) + +--- + +### docker-radicale-server + +* 💻 Languages: Make (57.5%), Docker (42.5%) +* 📚 Documentation: Markdown (100.0%) +* 📊 Commits: 5 +* 📈 Lines of Code: 40 +* 📄 Lines of Documentation: 3 +* 📅 Development Period: 2023-12-31 to 2025-08-11 +* 🔥 Recent Activity: 475.7 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. + +The implementation uses Alpine Linux as the base image for a minimal footprint, installs Python 3 and Radicale via pip, and configures the server with HTTP basic authentication using htpasswd. The setup includes persistent storage for collections (calendars/contacts) and authentication data through Docker volumes, exposes the service on port 8080, and includes a Makefile for easy building and deployment. The project also supports pushing to AWS ECR for cloud deployment, making it suitable for both local development and production use cases where you need a self-hosted alternative to cloud-based calendar services. + +[View on Codeberg](https://codeberg.org/snonux/docker-radicale-server) +[View on GitHub](https://github.com/snonux/docker-radicale-server) + +--- + ### quicklogger * 💻 Languages: Go (97.6%), Shell (1.5%), TOML (0.9%) @@ -428,7 +449,7 @@ The system is implemented with a modular architecture centered around a DSL clas * 📈 Lines of Code: 917 * 📄 Lines of Documentation: 33 * 📅 Development Period: 2024-01-20 to 2025-07-06 -* 🔥 Recent Activity: 478.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 486.1 days (avg. age of last 42 commits) * ⚖️ License: MIT * 🏷️ Latest Release: v0.0.3 (2025-07-06) @@ -446,25 +467,25 @@ The project follows a clean, single-file architecture with all functionality con --- -### docker-gpodder-sync-server +### terraform -* 💻 Languages: Make (100.0%) +* 💻 Languages: HCL (96.6%), Make (1.9%), YAML (1.5%) * 📚 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: 502.2 days (avg. age of last 42 commits) -* ⚖️ License: Custom License +* 📊 Commits: 125 +* 📈 Lines of Code: 2851 +* 📄 Lines of Documentation: 52 +* 📅 Development Period: 2023-08-27 to 2025-08-08 +* 🔥 Recent Activity: 511.8 days (avg. age of last 42 commits) +* ⚖️ License: MIT * 🧪 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. +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. -The project is implemented as a simple Docker build system with a Makefile that provides convenient commands for building, running, and deploying the containerized service. The actual server code is included as a git submodule, while this wrapper provides infrastructure automation including data persistence through volume mounting (`./data` to `/var/www/server/data`), network configuration (port 8080 exposure), and AWS ECR deployment capabilities. This approach makes it easy to deploy a self-hosted GPodder sync server with minimal setup, useful for podcast enthusiasts who want to maintain their own synchronization service rather than relying on third-party services. +The system is designed to host multiple personal services including Anki sync server, Audiobookshelf, Vaultwarden, Syncthing, Radicale (CalDAV/CardDAV), and others, all with persistent storage via EFS and secure TLS termination. The architecture follows AWS best practices with remote state management in S3, proper networking isolation, and automated backups, making it useful for individuals wanting to run their own private cloud services with enterprise-grade reliability and security. -[View on Codeberg](https://codeberg.org/snonux/docker-gpodder-sync-server) -[View on GitHub](https://github.com/snonux/docker-gpodder-sync-server) +[View on Codeberg](https://codeberg.org/snonux/terraform) +[View on GitHub](https://github.com/snonux/terraform) --- @@ -476,7 +497,7 @@ The project is implemented as a simple Docker build system with a Makefile that * 📈 Lines of Code: 33 * 📄 Lines of Documentation: 3 * 📅 Development Period: 2023-08-13 to 2025-07-31 -* 🔥 Recent Activity: 511.2 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 518.9 days (avg. age of last 42 commits) * ⚖️ License: MIT * 🧪 Status: Experimental (no releases yet) @@ -490,28 +511,6 @@ The implementation is built using a Rocky Linux base image with Python 3.9, and --- -### terraform - -* 💻 Languages: HCL (96.6%), Make (1.9%), YAML (1.5%) -* 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 124 -* 📈 Lines of Code: 2850 -* 📄 Lines of Documentation: 52 -* 📅 Development Period: 2023-08-27 to 2025-08-07 -* 🔥 Recent Activity: 518.2 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. - -The system is designed to host multiple personal services including Anki sync server, Audiobookshelf, Vaultwarden, Syncthing, Radicale (CalDAV/CardDAV), and others, all with persistent storage via EFS and secure TLS termination. The architecture follows AWS best practices with remote state management in S3, proper networking isolation, and automated backups, making it useful for individuals wanting to run their own private cloud services with enterprise-grade reliability and security. - -[View on Codeberg](https://codeberg.org/snonux/terraform) -[View on GitHub](https://github.com/snonux/terraform) - ---- - ### gogios * 💻 Languages: Go (94.4%), YAML (3.4%), JSON (2.2%) @@ -520,7 +519,7 @@ The system is designed to host multiple personal services including Anki sync se * 📈 Lines of Code: 1096 * 📄 Lines of Documentation: 287 * 📅 Development Period: 2023-04-17 to 2025-06-12 -* 🔥 Recent Activity: 545.0 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 552.7 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 @@ -537,28 +536,6 @@ The implementation follows a clean architecture with concurrent check execution, --- -### 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: 585.7 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. - -The implementation uses Alpine Linux as the base image for a minimal footprint, installs Python 3 and Radicale via pip, and configures the server with HTTP basic authentication using htpasswd. The setup includes persistent storage for collections (calendars/contacts) and authentication data through Docker volumes, exposes the service on port 8080, and includes a Makefile for easy building and deployment. The project also supports pushing to AWS ECR for cloud deployment, making it suitable for both local development and production use cases where you need a self-hosted alternative to cloud-based calendar services. - -[View on Codeberg](https://codeberg.org/snonux/docker-radicale-server) -[View on GitHub](https://github.com/snonux/docker-radicale-server) - ---- - ### gorum * 💻 Languages: Go (91.3%), JSON (6.4%), YAML (2.3%) @@ -567,7 +544,7 @@ The implementation uses Alpine Linux as the base image for a minimal footprint, * 📈 Lines of Code: 1525 * 📄 Lines of Documentation: 15 * 📅 Development Period: 2023-04-17 to 2023-11-19 -* 🔥 Recent Activity: 731.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 738.8 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -590,7 +567,7 @@ The architecture consists of several key components: a quorum manager that handl * 📈 Lines of Code: 312 * 📄 Lines of Documentation: 416 * 📅 Development Period: 2013-03-22 to 2025-05-18 -* 🔥 Recent Activity: 781.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 788.8 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: v1.0.0 (2023-04-29) @@ -612,7 +589,7 @@ The tool is implemented with a clean object-oriented architecture featuring an A * 📈 Lines of Code: 51 * 📄 Lines of Documentation: 26 * 📅 Development Period: 2022-06-02 to 2024-04-20 -* 🔥 Recent Activity: 795.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 803.5 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -635,7 +612,7 @@ The implementation is straightforward - a bash script that uses `find` to locate * 📈 Lines of Code: 1585 * 📄 Lines of Documentation: 778 * 📅 Development Period: 2021-05-21 to 2023-07-17 -* 🔥 Recent Activity: 844.5 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 852.2 days (avg. age of last 42 commits) * ⚖️ License: GPL-3.0 * 🏷️ Latest Release: 3.0.0 (2024-10-01) @@ -658,7 +635,7 @@ The implementation is built entirely in Bash (version 5.x+) using a modular libr * 📈 Lines of Code: 41 * 📄 Lines of Documentation: 17 * 📅 Development Period: 2020-01-30 to 2025-04-30 -* 🔥 Recent Activity: 1089.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 1097.1 days (avg. age of last 42 commits) * ⚖️ License: GPL-3.0 * 🧪 Status: Experimental (no releases yet) @@ -680,7 +657,7 @@ The implementation consists of two main components: `autorotate.sh` monitors the * 📈 Lines of Code: 342 * 📄 Lines of Documentation: 39 * 📅 Development Period: 2011-11-19 to 2022-04-02 -* 🔥 Recent Activity: 1309.0 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 1316.6 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.5.0 (2022-02-21) @@ -703,7 +680,7 @@ The implementation centers around a single Bash script (`photoalbum.sh`) that us * 📈 Lines of Code: 1728 * 📄 Lines of Documentation: 18 * 📅 Development Period: 2020-07-12 to 2023-04-09 -* 🔥 Recent Activity: 1460.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 1467.8 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -726,7 +703,7 @@ The project leverages Go's generics system to provide type-safe implementations * 📈 Lines of Code: 671 * 📄 Lines of Documentation: 19 * 📅 Development Period: 2018-05-26 to 2025-01-21 -* 🔥 Recent Activity: 1461.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 1469.6 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -742,6 +719,28 @@ The system is architected around several key components: a configuration system --- +### foo.zone + +* 📚 Documentation: Markdown (100.0%) +* 📊 Commits: 3032 +* 📈 Lines of Code: 0 +* 📄 Lines of Documentation: 23 +* 📅 Development Period: 2021-05-21 to 2022-04-02 +* 🔥 Recent Activity: 1483.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. + +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. + +The site is built using **Gemtexter**, a static site generator that creates both HTML and Gemini protocol content from markdown sources. The architecture is refreshingly simple and follows KISS principles, with content organized into several key sections: a main blog feed (gemfeed) with over 100 technical posts dating back to 2008, detailed book notes and summaries, project documentation (including tools like DTail for distributed log tailing), and personal resources. The website is served by OpenBSD using relayd and httpd, demonstrating the author's preference for robust, security-focused Unix systems. The project emphasizes clean, semantic HTML, custom CSS styling, and accessibility, while maintaining both web and Gemini protocol compatibility for broader reach across different internet communities. + +[View on Codeberg](https://codeberg.org/snonux/foo.zone) +[View on GitHub](https://github.com/snonux/foo.zone) + +--- + ### perl-c-fibonacci * 💻 Languages: C (80.4%), Make (19.6%) @@ -750,7 +749,7 @@ The system is architected around several key components: a configuration system * 📈 Lines of Code: 51 * 📄 Lines of Documentation: 69 * 📅 Development Period: 2014-03-24 to 2022-04-23 -* 🔥 Recent Activity: 1941.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 1948.7 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -773,7 +772,7 @@ The project is useful as an educational tool for understanding language syntax s * 📈 Lines of Code: 12420 * 📄 Lines of Documentation: 610 * 📅 Development Period: 2018-03-01 to 2020-01-22 -* 🔥 Recent Activity: 2482.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 2490.3 days (avg. age of last 42 commits) * ⚖️ License: Apache-2.0 * 🏷️ Latest Release: 0.5.1 (2019-01-04) @@ -798,7 +797,7 @@ The tool is implemented in C for minimal overhead and uses SystemTap for efficie * 📈 Lines of Code: 919 * 📄 Lines of Documentation: 12 * 📅 Development Period: 2015-01-02 to 2021-11-04 -* 🔥 Recent Activity: 2991.3 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 2999.0 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.1.3 (2015-01-02) @@ -821,7 +820,7 @@ The system is particularly useful for distributed static content delivery where * 📈 Lines of Code: 18 * 📄 Lines of Documentation: 49 * 📅 Development Period: 2014-03-24 to 2021-11-05 -* 🔥 Recent Activity: 3227.2 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3234.9 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -844,7 +843,7 @@ The implementation consists of a shell script (`update-dyndns`) that accepts hos * 📈 Lines of Code: 5360 * 📄 Lines of Documentation: 789 * 📅 Development Period: 2015-01-02 to 2021-11-05 -* 🔥 Recent Activity: 3493.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3501.6 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.0.1 (2015-01-02) @@ -867,7 +866,7 @@ The tool is particularly useful for system administrators and DevOps engineers w * 📈 Lines of Code: 273 * 📄 Lines of Documentation: 32 * 📅 Development Period: 2015-09-29 to 2021-11-05 -* 🔥 Recent Activity: 3498.0 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3505.7 days (avg. age of last 42 commits) * ⚖️ License: Apache-2.0 * 🏷️ Latest Release: 0 (2015-10-26) @@ -890,7 +889,7 @@ The tool is implemented as a single Ruby script that leverages threading for par * 📈 Lines of Code: 1839 * 📄 Lines of Documentation: 412 * 📅 Development Period: 2015-01-02 to 2021-11-05 -* 🔥 Recent Activity: 3577.7 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3585.4 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.0.2 (2015-01-02) @@ -913,7 +912,7 @@ The project is implemented as a modular Perl application with a clean architectu * 📈 Lines of Code: 499 * 📄 Lines of Documentation: 8 * 📅 Development Period: 2015-05-24 to 2021-11-03 -* 🔥 Recent Activity: 3588.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3596.1 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.1 (2015-06-01) @@ -934,7 +933,7 @@ The implementation follows a concurrent architecture using Go's goroutines and c * 📊 Commits: 670 * 📈 Lines of Code: 1675 * 📅 Development Period: 2011-03-06 to 2018-12-22 -* 🔥 Recent Activity: 3644.0 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3651.7 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.0.0 (2018-12-22) @@ -959,7 +958,7 @@ The system works through a template-driven architecture where content is written * 📈 Lines of Code: 88 * 📄 Lines of Documentation: 148 * 📅 Development Period: 2015-06-18 to 2015-12-05 -* 🔥 Recent Activity: 3692.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3699.8 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -984,7 +983,7 @@ The implementation works by creating a Debian filesystem image using debootstrap * 📈 Lines of Code: 1681 * 📄 Lines of Documentation: 539 * 📅 Development Period: 2014-03-10 to 2021-11-03 -* 🔥 Recent Activity: 3970.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3977.8 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.0.2 (2014-11-17) @@ -1007,7 +1006,7 @@ The implementation is written in Python and built on top of the bigsuds library, * 📈 Lines of Code: 65 * 📄 Lines of Documentation: 228 * 📅 Development Period: 2013-03-22 to 2021-11-04 -* 🔥 Recent Activity: 4024.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4032.3 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.0.0.0 (2013-03-22) @@ -1030,7 +1029,7 @@ The project implements a clean, Make-based build system with automatic versionin * 📈 Lines of Code: 136 * 📄 Lines of Documentation: 96 * 📅 Development Period: 2013-03-22 to 2021-11-05 -* 🔥 Recent Activity: 4037.5 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4045.2 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.2.0 (2014-07-05) @@ -1053,7 +1052,7 @@ The implementation is elegantly simple, consisting of a bash script that operate * 📈 Lines of Code: 134 * 📄 Lines of Documentation: 106 * 📅 Development Period: 2013-03-22 to 2021-11-05 -* 🔥 Recent Activity: 4045.0 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4052.7 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.1.5 (2014-06-22) @@ -1076,7 +1075,7 @@ The tool works by having both hosts run the same command simultaneously - one ac * 📈 Lines of Code: 493 * 📄 Lines of Documentation: 26 * 📅 Development Period: 2009-09-27 to 2021-11-02 -* 🔥 Recent Activity: 4088.3 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4096.0 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.9.3 (2014-06-14) @@ -1099,7 +1098,7 @@ The implementation leverages GPG for strong encryption, ensuring passwords are n * 📈 Lines of Code: 286 * 📄 Lines of Documentation: 144 * 📅 Development Period: 2013-03-22 to 2021-11-05 -* 🔥 Recent Activity: 4093.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4101.1 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.4.3 (2014-06-16) @@ -1122,7 +1121,7 @@ The implementation uses modern Perl with the Moo object system and consists of t * 📈 Lines of Code: 191 * 📄 Lines of Documentation: 8 * 📅 Development Period: 2014-03-24 to 2014-03-24 -* 🔥 Recent Activity: 4154.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4162.3 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -1143,7 +1142,7 @@ Each script explores different themes - Christmas celebrations, mathematical stu * 📊 Commits: 7 * 📈 Lines of Code: 80 * 📅 Development Period: 2011-07-09 to 2015-01-13 -* 🔥 Recent Activity: 4234.7 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4242.4 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -1166,7 +1165,7 @@ The implementation uses a straightforward approach with three test endpoints: on * 📈 Lines of Code: 124 * 📄 Lines of Documentation: 75 * 📅 Development Period: 2010-11-05 to 2021-11-05 -* 🔥 Recent Activity: 4275.3 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4283.0 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.0.2 (2014-06-22) @@ -1189,7 +1188,7 @@ The implementation is remarkably simple - a single shell script that uses GNU AW * 📈 Lines of Code: 1828 * 📄 Lines of Documentation: 100 * 📅 Development Period: 2010-11-05 to 2015-05-23 -* 🔥 Recent Activity: 4305.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4313.1 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.7.5 (2014-06-22) @@ -1206,11 +1205,11 @@ The application is implemented using a multi-threaded architecture where each mo ### perldaemon -* 💻 Languages: Perl (74.2%), Shell (22.2%), Config (3.6%) +* 💻 Languages: Perl (72.3%), Shell (23.8%), Config (3.9%) * 📊 Commits: 110 -* 📈 Lines of Code: 659 +* 📈 Lines of Code: 614 * 📅 Development Period: 2011-02-05 to 2022-04-21 -* 🔥 Recent Activity: 4449.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4362.6 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.4 (2022-04-29) @@ -1233,7 +1232,7 @@ The architecture centers around a modular plugin system where custom functionali * 📈 Lines of Code: 122 * 📄 Lines of Documentation: 10 * 📅 Development Period: 2011-01-27 to 2014-06-22 -* 🔥 Recent Activity: 4685.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4693.6 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: v0.2 (2011-01-27) @@ -1256,7 +1255,7 @@ The implementation consists of a main AWK script (`index.cgi`) that reads config * 📈 Lines of Code: 720 * 📄 Lines of Documentation: 6 * 📅 Development Period: 2008-06-21 to 2021-11-03 -* 🔥 Recent Activity: 4748.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4756.3 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v0.3 (2009-02-08) @@ -1273,31 +1272,6 @@ The implementation follows a clean three-class architecture: `SMain` handles the --- -### ychat - -* 💻 Languages: C++ (52.1%), C/C++ (21.3%), Shell (20.1%), HTML (2.5%), Config (2.1%), Perl (1.5%), Make (0.3%) -* 📚 Documentation: Text (100.0%) -* 📊 Commits: 67 -* 📈 Lines of Code: 33823 -* 📄 Lines of Documentation: 109 -* 📅 Development Period: 2008-05-15 to 2014-07-01 -* 🔥 Recent Activity: 5303.4 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: - -**yChat** is a web-based chat server written in C++ that functions as a standalone HTTP server without requiring external web server dependencies. It allows users to participate in multi-room chat sessions using standard web browsers, with no special client software needed. The system supports user registration, authentication via session IDs, customizable HTML templates, and multi-language support through XML configuration files. - -The architecture is built around several key managers: a socket manager for handling HTTP connections, a chat manager for core functionality, an HTML template manager for dynamic content generation, and a modular system supporting dynamically loadable command modules. It uses hash maps for efficient O(1) data retrieval, POSIX threads for concurrent request handling, and includes advanced features like SSL support, MySQL database integration, garbage collection for memory management, and comprehensive logging. The codebase also includes related projects like yhttpd (a lightweight HTTP server) and ycurses (a terminal interface library), making it a comprehensive communication platform designed for performance and extensibility. - -[View on Codeberg](https://codeberg.org/snonux/ychat) -[View on GitHub](https://github.com/snonux/ychat) - ---- - ### netcalendar * 💻 Languages: Java (83.0%), HTML (12.9%), XML (3.0%), CSS (0.8%), Make (0.2%) @@ -1306,7 +1280,7 @@ The architecture is built around several key managers: a socket manager for hand * 📈 Lines of Code: 17380 * 📄 Lines of Documentation: 947 * 📅 Development Period: 2009-02-07 to 2021-05-01 -* 🔥 Recent Activity: 5379.3 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 5387.0 days (avg. age of last 42 commits) * ⚖️ License: GPL-2.0 * 🏷️ Latest Release: v0.1 (2009-02-08) @@ -1331,7 +1305,7 @@ The implementation uses a clean separation of concerns with dedicated packages f * 📊 Commits: 80 * 📈 Lines of Code: 601 * 📅 Development Period: 2009-11-22 to 2011-10-17 -* 🔥 Recent Activity: 5474.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 5482.6 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -1346,26 +1320,28 @@ The implementation uses a clean separation of concerns with modules for IRC conn --- -### fype +### ychat -* 💻 Languages: C (72.1%), C/C++ (20.7%), HTML (5.7%), Make (1.5%) -* 📚 Documentation: Text (71.3%), LaTeX (28.7%) -* 📊 Commits: 99 -* 📈 Lines of Code: 10196 -* 📄 Lines of Documentation: 1741 -* 📅 Development Period: 2008-05-15 to 2021-11-03 -* 🔥 Recent Activity: 5636.6 days (avg. age of last 42 commits) -* ⚖️ License: Custom License -* 🧪 Status: Experimental (no releases yet) +* 💻 Languages: C++ (49.6%), Shell (21.8%), C/C++ (20.3%), Perl (2.8%), Config (2.2%), HTML (2.0%), Make (1.1%), CSS (0.2%) +* 📚 Documentation: Text (100.0%) +* 📊 Commits: 67 +* 📈 Lines of Code: 40780 +* 📄 Lines of Documentation: 27 +* 📅 Development Period: 2008-05-15 to 2010-11-21 +* 🔥 Recent Activity: 5727.0 days (avg. age of last 42 commits) +* ⚖️ License: No license found +* 🏷️ 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. -**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. +Based on my analysis of the codebase, here's a concise summary of the yChat project: -The implementation is built using a straightforward top-down parser with a maximum lookahead of 1 token, simultaneously parsing and interpreting code (meaning syntax errors are only detected at runtime). The architecture is modular with separate components for scanning/tokenization, symbol management, garbage collection, type conversion, and data structures (including arrays, lists, hash tables, stacks, and trees). The interpreter is designed for Unix-like systems (BSD/Linux) and includes built-in functions for I/O, math operations, bitwise operations, system calls like `fork`, and memory management with garbage collection. +**yChat** is a web-based chat server written in C++ that functions as a standalone HTTP server without requiring external web server dependencies. It allows users to participate in multi-room chat sessions using standard web browsers, with no special client software needed. The system supports user registration, authentication via session IDs, customizable HTML templates, and multi-language support through XML configuration files. -[View on Codeberg](https://codeberg.org/snonux/fype) -[View on GitHub](https://github.com/snonux/fype) +The architecture is built around several key managers: a socket manager for handling HTTP connections, a chat manager for core functionality, an HTML template manager for dynamic content generation, and a modular system supporting dynamically loadable command modules. It uses hash maps for efficient O(1) data retrieval, POSIX threads for concurrent request handling, and includes advanced features like SSL support, MySQL database integration, garbage collection for memory management, and comprehensive logging. The codebase also includes related projects like yhttpd (a lightweight HTTP server) and ycurses (a terminal interface library), making it a comprehensive communication platform designed for performance and extensibility. + +[View on Codeberg](https://codeberg.org/snonux/ychat) +[View on GitHub](https://github.com/snonux/ychat) --- @@ -1376,7 +1352,7 @@ The implementation is built using a straightforward top-down parser with a maxim * 📈 Lines of Code: 0 * 📄 Lines of Documentation: 7 * 📅 Development Period: 2008-05-15 to 2015-05-23 -* 🔥 Recent Activity: 5835.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 5843.6 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: v1.0 (2008-08-24) @@ -1388,3 +1364,26 @@ The implementation features a modular architecture with separate packages for co [View on Codeberg](https://codeberg.org/snonux/vs-sim) [View on GitHub](https://github.com/snonux/vs-sim) + +--- + +### fype + +* 💻 Languages: C (71.3%), C/C++ (20.6%), HTML (6.6%), Make (1.5%) +* 📚 Documentation: Text (60.2%), LaTeX (39.8%) +* 📊 Commits: 99 +* 📈 Lines of Code: 8906 +* 📄 Lines of Documentation: 1431 +* 📅 Development Period: 2008-05-15 to 2021-04-29 +* 🔥 Recent Activity: 5889.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. + +**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. + +The implementation is built using a straightforward top-down parser with a maximum lookahead of 1 token, simultaneously parsing and interpreting code (meaning syntax errors are only detected at runtime). The architecture is modular with separate components for scanning/tokenization, symbol management, garbage collection, type conversion, and data structures (including arrays, lists, hash tables, stacks, and trees). The interpreter is designed for Unix-like systems (BSD/Linux) and includes built-in functions for I/O, math operations, bitwise operations, system calls like `fork`, and memory management with garbage collection. + +[View on Codeberg](https://codeberg.org/snonux/fype) +[View on GitHub](https://github.com/snonux/fype) diff --git a/about/showcase/debroid/image-1.png b/about/showcase/debroid/image-1.png index fd968ef4..67f36bb5 100644 --- a/about/showcase/debroid/image-1.png +++ b/about/showcase/debroid/image-1.png @@ -27,7 +27,7 @@ <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> - <link crossorigin="anonymous" rel="preload" as="script" href="https://github.githubassets.com/assets/global-banner-disable-59fed23c5fc1.js" /> + <link crossorigin="anonymous" rel="preload" as="script" href="https://github.githubassets.com/assets/global-banner-disable-004f523e017c.js" /> <link rel="preload" href="https://github.githubassets.com/assets/mona-sans-d1bf285e9b9b.woff2" as="font" type="font/woff2" crossorigin> @@ -46,44 +46,43 @@ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-dc7ca6859caf.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-e11b50dc0d94.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-9eed6aa4fd31.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-1936c2fb5b22.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-8aaa35f12547.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-ce246942b490.css" /> - - <script type="application/json" id="client-env">{"locale":"en","featureFlags":["alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","client_version_header","code_scanning_security_configuration_ternary_state","codespaces_prebuild_region_target_update","contact_requests_implicit_opt_in","contentful_lp_copilot_extensions","contentful_lp_flex_features","contentful_lp_footnotes","copilot_chat_attach_multiple_images","copilot_chat_file_redirect","copilot_chat_group_notifications","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_vision_in_claude","copilot_chat_vision_skip_thread_create","copilot_chat_wholearea_dd","copilot_chat_wholearea_dd_overlay","copilot_coding_agent_task_creation_banner","copilot_custom_copilots_feature_preview","copilot_custom_copilots_images","copilot_duplicate_thread","copilot_free_to_paid_telem","copilot_ftp_hyperspace_upgrade_prompt","copilot_ftp_settings_upgrade","copilot_ftp_upgrade_to_pro_from_models","copilot_ftp_your_copilot_settings","copilot_immersive_agent_branch_selection","copilot_immersive_draft_issue_consolidated_create_handler","copilot_immersive_draft_issue_tree_validation","copilot_immersive_structured_model_picker","copilot_no_floating_button","copilot_read_shared_conversation","copilot_spaces_input_menu_select","copilot_spaces_permissions_tab","copilot_spaces_upsert_reload_in_background","copilot_spark_allow_empty_commit","copilot_spark_single_user_iteration","copilot_spark_use_billing_headers","copilot_spark_write_iteration_history_to_git","copilot_task_oriented_assistive_prompts","copilot_workbench_agent_seed_tool","copilot_workbench_cache","copilot_workbench_connection_reload_banner","copilot_workbench_preview_analytics","copilot_workbench_ratelimit_fallback","copilot_workbench_refresh_on_wsod","copilot_workbench_synthetic_generation","custom_copilots_128k_window","custom_copilots_capi_mode","custom_copilots_file_uploads","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","github_models_render_external_errors","hpc_improve_dom_insertion_observer","insert_before_patch","issue_fields_report_usage","issues_preserve_tokens_in_urls","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_fullstory_sampling","marketing_pages_search_explore_provider","memex_mwl_filter_field_delimiter","nonreporting_relay_graphql_status_codes","primer_react_segmented_control_tooltip","record_sso_banner_metrics","remove_child_patch","sample_network_conn_type","scheduled_reminders_updated_limits","site_copilot_plans_emphasize_pro","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","viewscreen_sandbox","wiki_editor_insertion_buttons","workbench_default_sonnet4","workbench_store_readonly"],"copilotApiOverrideUrl":null}</script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/high-contrast-cookie-43044cc98e23.js"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-9afd47637d45.js" defer="defer"></script> + <script type="application/json" id="client-env">{"locale":"en","featureFlags":["alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","client_version_header","code_scanning_security_configuration_ternary_state","codespaces_prebuild_region_target_update","contact_requests_implicit_opt_in","contentful_lp_copilot_extensions","contentful_lp_flex_features","contentful_lp_footnotes","copilot_chat_attach_multiple_images","copilot_chat_file_redirect","copilot_chat_group_notifications","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_vision_in_claude","copilot_chat_vision_skip_thread_create","copilot_custom_copilots_feature_preview","copilot_custom_copilots_images","copilot_duplicate_thread","copilot_free_to_paid_telem","copilot_ftp_hyperspace_upgrade_prompt","copilot_ftp_settings_upgrade","copilot_ftp_upgrade_to_pro_from_models","copilot_ftp_your_copilot_settings","copilot_gpt5_promotion_banner","copilot_immersive_agent_branch_selection","copilot_immersive_structured_model_picker","copilot_no_floating_button","copilot_read_shared_conversation","copilot_spaces_input_menu_select","copilot_spaces_permissions_tab","copilot_spaces_repo_context","copilot_spaces_upsert_reload_in_background","copilot_spaces_v3_ui","copilot_spark_allow_empty_commit","copilot_spark_single_user_iteration","copilot_spark_use_billing_headers","copilot_spark_write_iteration_history_to_git","copilot_task_oriented_assistive_prompts","copilot_workbench_agent_seed_tool","copilot_workbench_cache","copilot_workbench_connection_reload_banner","copilot_workbench_preview_analytics","copilot_workbench_ratelimit_fallback","copilot_workbench_refresh_on_wsod","copilot_workbench_synthetic_generation","costcenter_members_ui","custom_copilots_128k_window","custom_copilots_capi_mode","custom_copilots_file_uploads","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","hpc_improve_dom_insertion_observer","insert_before_patch","issue_dependencies_issue_index_pill_click","issue_fields_report_usage","issues_preserve_tokens_in_urls","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","memex_mwl_filter_field_delimiter","migrate_toasts_to_banners_web_notifications","primer_react_segmented_control_tooltip","record_sso_banner_metrics","remove_child_patch","role_assignment_list_radio","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","viewscreen_sandbox","workbench_default_sonnet4","workbench_store_readonly"],"copilotApiOverrideUrl":null}</script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/high-contrast-cookie-be6f6fc272bd.js"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-615a2256f603.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-63979392733d.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-290ee401187e.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-60434be97762.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-0825a7514813.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-f35dd522ae2e.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-c44edfed7f0d.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-3bc735efc2fb.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-e43198c9c229.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-8e9f78-c1e2fb329866.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-0d7d60-e7c651f2037f.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-e50fb7a5fe8c.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-514a92c925f0.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-665e70-03ac9ce9c364.js" defer="defer"></script> <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-f03a40-d944abd5f7c0.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-f9923b9251dd.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-1fcf03d57e0a.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-777ce2-1dd746215ae3.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-5cffbf1169b0.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-69e290ba7f3c.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-422a87d68b40.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-65504f81abf2.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_morphdom_dist_morphdom-esm_js-node_modules_swc_helpers_esm__define_property_js-457369b2bc79.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-595819d3686f.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-8351bc3b1582.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-c39857-80b7561055c5.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-19a9ffc8367b.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-f59ef568265a.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-d3ee0b-54a0d20a9ae1.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-1cf7991389b4.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-eef525613171.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-c9618dd6662a.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-d0d0a6-a7da4270c5f4.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-d0d0a6-f1c40b7e9d92.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-54f5b4a90315.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-0600723b6196.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-ea8eaa-a4bd0b8e9717.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-3b61f3f3d9a0.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-ac4fa2002966.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-ef6d0f-3a56c06b9620.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-33a139fab0d9.js" defer="defer"></script> <title>Page not found · GitHub · GitHub</title> @@ -93,13 +92,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:30a19060-3768-2f63-37a6-956c6e5253e7"> + <meta name="fetch-nonce" content="v2:a17a6a9d-8e0d-d420-2b36-29ec2fef98e4"> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> - <meta name="request-id" content="A542:38136F:111778A:EC2BF1:6895FD17" data-pjax-transient="true"/><meta name="html-safe-nonce" content="7e1f491dfbe42b9efb518a61935f70355cdd7ee105fec7c2053b62a32f2fdca1" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBNTQyOjM4MTM2RjoxMTE3NzhBOkVDMkJGMTo2ODk1RkQxNyIsInZpc2l0b3JfaWQiOiI0MjA2MzQ0NTI1OTU3MTY4NDA3IiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="f7d674fb3095c8febf9279b7c2acdeecccd909f1d3b1bafa2e21c2c197265df9" data-pjax-transient="true"/> + <meta name="request-id" content="B698:2BC486:5B1B93:4E11EF:68A02233" data-pjax-transient="true"/><meta name="html-safe-nonce" content="6ba2c47587a668965b24f17c0a4d18ff637c05fedf2e17d5c2c4d514fa776581" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNjk4OjJCQzQ4Njo1QjFCOTM6NEUxMUVGOjY4QTAyMjMzIiwidmlzaXRvcl9pZCI6IjY1MDk4ODAxMzI3MTEyMjc5NTYiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="1d43accbe9bf151e3d8fa2132fd1d1c113b7afb8e0c17f087ceb298c48546eb1" data-pjax-transient="true"/> @@ -175,10 +174,10 @@ <meta name="expected-hostname" content="github.com"> - <meta http-equiv="x-pjax-version" content="fc2270cd01c8bc2d93e020dd6126922e9b027b2ef9afe933315d9f218bb52b0d" data-turbo-track="reload"> + <meta http-equiv="x-pjax-version" content="97e0d4c53bead02905fdb3519893299999651b7ab4589d484a6db6decc543cf2" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="8fba9c9418de26103e6176951dd0c38780be21b972f2019085dee08622fdb843" data-turbo-track="reload"> - <meta http-equiv="x-pjax-css-version" content="682bd362ae4926152d952d8ef54b3b1f0b754fee6dfb6b128d5c3c6b062a7ef2" data-turbo-track="reload"> - <meta http-equiv="x-pjax-js-version" content="d558098d832beb014efc7eda10c9027f70db5a22d5498b2906be1943b7daa278" data-turbo-track="reload"> + <meta http-equiv="x-pjax-css-version" content="307db642b0254d0f77ba28913bb311dc9490e7feacc8d5246d396b23d5e6c4ea" data-turbo-track="reload"> + <meta http-equiv="x-pjax-js-version" content="80179f78bfe6a2afa104d221ec6ae27e01e8946d84193d5312948a67339627c4" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> @@ -202,7 +201,7 @@ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> - <meta name="release" content="79a36ac83ceb6347eb88d59063b202fcc6be542a"> + <meta name="release" content="fbfdf359fa0ee54413d3ee370f9dddedf65e434e"> <meta name="ui-target" content="full"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> @@ -230,7 +229,7 @@ <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.6e741486b8c74caf5d85.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.c869ee9cf4c55200cc46.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.f8fba3bd67fe74f9227b.module.css" /> <react-partial @@ -254,8 +253,8 @@ <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_gsap_index_js-028cb2a18f5a.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-094296912333.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-993c483b0f4e.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-5a370a947905.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-06e5a2cf5cc8.js" defer="defer"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> @@ -294,13 +293,13 @@ </a> <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-424db5e6-3667-4a36-80de-d83a6131cc34" aria-labelledby="tooltip-8a1b0ef0-a955-4483-8b24-eefa9018c25e" 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-f09c9b4b-1a4b-4279-9706-2f3f64f74644" aria-labelledby="tooltip-6e7a8f58-8c24-401e-9119-9cd016276bed" 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-8a1b0ef0-a955-4483-8b24-eefa9018c25e" for="icon-button-424db5e6-3667-4a36-80de-d83a6131cc34" 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-6e7a8f58-8c24-401e-9119-9cd016276bed" for="icon-button-f09c9b4b-1a4b-4279-9706-2f3f64f74644" 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.6e741486b8c74caf5d85.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.c869ee9cf4c55200cc46.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.76259b61ecc822265749.module.css" /> <react-partial @@ -987,7 +986,7 @@ -<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="DSMlVB8Uk4WQ_Q_QMzsi-f5BwUFdqKBchHmmzHdwT0XR-Vbmdo0G5jeP4t47_8X6dlE3jvnA9QHzXjgSoApTyA" 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="RxPtuHZnCm8C5PwuISzT4SXt_OnioHSHToYfRF1jndJTlZaIB5KCgG9Ehxqk36Jp9lH7thrkjw8aQYZur4dssg" 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" @@ -1051,7 +1050,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-a41b50d9-583a-4080-896c-56ac8b514072" 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-57ba1cb5-4cec-4c64-8b79-69a6af10a83b" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown @@ -1289,7 +1288,7 @@ tabindex="-1" ></ul> </div> - <div class="FormControl-inlineValidation" id="validation-a41b50d9-583a-4080-896c-56ac8b514072" hidden="hidden"> + <div class="FormControl-inlineValidation" id="validation-57ba1cb5-4cec-4c64-8b79-69a6af10a83b" 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> @@ -1330,7 +1329,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="v25DT3yt7Q3a1QayrNKdpR/bFuHZw6y8XT73nX1xCXMoV4B5/z5YoJktY/BMWzfbXR63KmPjXMo9sCrxOmtCcA==" /> + <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="vbIE2ApYQ8R8TyMMcGGWvPr1WBROkJ6ye5FtVNmXP7ZU+v24216mQdxLfeMWtcCa/PScyymVkG3mclosAeoqYg==" /> <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"> @@ -1368,7 +1367,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="GH7NSksjcoDGFJoR6XD/oI2PqWnSJ8NGdGOAHSc06X69+AEaIBX8/VrKCykU+QbKQV8xWQvu6occeJFQ1foXcA==" /> + <!-- '"` --><!-- </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="eTi9eRYShRVFgZrvLeqfRmcTjcTHssttTawFbi/rLyVu3YpGGtP/DGy/MXkuACqebBZiVGilr4wcpgkcO+mtaw==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> @@ -1386,7 +1385,7 @@ placeholder="github-ruby" required maxlength="50"> - <input type="hidden" data-csrf="true" value="KbqTWfx8wCOa9DiSqeAJhxeQURDwN50OqtA44vFyFywRYlXzsRG/sw4xN3Gnp21cHSWGUQtAzJV/2DkYIO1v3Q==" /> + <input type="hidden" data-csrf="true" value="httKiZoq0wFqLa0yPXsH942ZHsK6tniOg19cnxbZ9Pt23GqV3POmxBw0c/GpRIUer7+Veg8wTdtD8FxptnAZnQ==" /> </auto-check> </div> @@ -1441,7 +1440,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="i1r6EzC22fLP2tLOpqhxPhnFaVcjYSDQK96bGAhD2MdFA4SSx7Y9pFzxBk9kppVT0x4EoAM0TbNM2qCOkYBNxA==" /> <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="auPPNoZAM8gSZJykmuqHguCbTNMRh8kjb17/BFkLZmcckF78YHkbQCaupynbaQ/rv5RWGKywZNzVKeLW94pLNQ==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" /> <label for="login_field"> Username or email address @@ -1463,9 +1462,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_e4e3" hidden="hidden" /> -<input class="form-control" type="hidden" name="timestamp" value="1754660119728" /> -<input class="form-control" type="hidden" name="timestamp_secret" value="066e5ba16e979fc228d497afbaf0df6ef02c7edb3dbbe2fd43da7183ca6214a9" /> +<input class="form-control" type="text" name="required_field_61c5" hidden="hidden" /> +<input class="form-control" type="hidden" name="timestamp" value="1755324980181" /> +<input class="form-control" type="hidden" name="timestamp_secret" value="dcb25910f45aa4740dacf0d2913f662168afc0225525d168d2a8f02559cef9af" /> <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" /> @@ -1492,13 +1491,13 @@ <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-b217d8fd-6aaf-417d-b24a-361495a0898d" aria-labelledby="tooltip-b9778916-3091-4413-9f60-0e599a623444" 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-8ffc3fc3-d80b-4943-8fcf-b6d0b2acd154" aria-labelledby="tooltip-8d0154d4-1863-404b-a42e-2efb27d646f7" 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-b9778916-3091-4413-9f60-0e599a623444" for="icon-button-b217d8fd-6aaf-417d-b24a-361495a0898d" 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-8d0154d4-1863-404b-a42e-2efb27d646f7" for="icon-button-8ffc3fc3-d80b-4943-8fcf-b6d0b2acd154" 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.6e741486b8c74caf5d85.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.c869ee9cf4c55200cc46.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.76259b61ecc822265749.module.css" /> <react-partial @@ -1533,10 +1532,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-960677fe-e964-4211-b798-8d00efc87b01" aria-labelledby="tooltip-efef7f53-c5d3-48aa-82e0-94543fd85bce" 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-895a0a48-c966-4122-b84d-6097a80911c0" aria-labelledby="tooltip-e32b3666-d19f-4f64-8f9d-a65e99c9a0da" 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-efef7f53-c5d3-48aa-82e0-94543fd85bce" for="icon-button-960677fe-e964-4211-b798-8d00efc87b01" 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-e32b3666-d19f-4f64-8f9d-a65e99c9a0da" for="icon-button-895a0a48-c966-4122-b84d-6097a80911c0" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> @@ -1929,7 +1928,7 @@ <div class="Overlay-body Overlay-body--paddingNone"> <ul class="ActionList" id="locale-selector-list" role="menu" aria-labelledby="locale-selector-text"> <li role="none" data-view-component="true" class="ActionList-item"> - <a href="" selected="selected" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="en-us" data-analytics-click="{"category":"Locale Picker","action":"select language","label":"locale:en-us"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> + <a href="" selected="selected" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="en-us" data-analytics-event="{"category":"Locale Picker","action":"click_to_select_language","label":"locale:en-us"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> <span class="ActionList-item-label"> <div style="width: 16px; display: inline-block; text-align: center; margin-right: 8px; flex-shrink: 0;"> @@ -1942,7 +1941,7 @@ </span> </a></li> <li role="none" data-view-component="true" class="ActionList-item"> - <a href="" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="pt-br" data-analytics-click="{"category":"Locale Picker","action":"select language","label":"locale:pt-br"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> + <a href="" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="pt-br" data-analytics-event="{"category":"Locale Picker","action":"click_to_select_language","label":"locale:pt-br"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> <span class="ActionList-item-label"> <div style="width: 16px; display: inline-block; text-align: center; margin-right: 8px; flex-shrink: 0;"> @@ -1953,7 +1952,7 @@ </span> </a></li> <li role="none" data-view-component="true" class="ActionList-item"> - <a href="" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="es-419" data-analytics-click="{"category":"Locale Picker","action":"select language","label":"locale:es-419"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> + <a href="" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="es-419" data-analytics-event="{"category":"Locale Picker","action":"click_to_select_language","label":"locale:es-419"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> <span class="ActionList-item-label"> <div style="width: 16px; display: inline-block; text-align: center; margin-right: 8px; flex-shrink: 0;"> @@ -1964,7 +1963,7 @@ </span> </a></li> <li role="none" data-view-component="true" class="ActionList-item"> - <a href="" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="ja" data-analytics-click="{"category":"Locale Picker","action":"select language","label":"locale:ja"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> + <a href="" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="ja" data-analytics-event="{"category":"Locale Picker","action":"click_to_select_language","label":"locale:ja"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> <span class="ActionList-item-label"> <div style="width: 16px; display: inline-block; text-align: center; margin-right: 8px; flex-shrink: 0;"> @@ -1975,7 +1974,7 @@ </span> </a></li> <li role="none" data-view-component="true" class="ActionList-item"> - <a href="" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="ko-kr" data-analytics-click="{"category":"Locale Picker","action":"select language","label":"locale:ko-kr"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> + <a href="" style="white-space: normal;" data-action="click:locale-selector#handleSelectLocale" data-locale="ko-kr" data-analytics-event="{"category":"Locale Picker","action":"click_to_select_language","label":"locale:ko-kr"}" role="menuitem" tabindex="-1" data-view-component="true" class="footer-social-locale ActionList-content"> <span class="ActionList-item-label"> <div style="width: 16px; display: inline-block; text-align: center; margin-right: 8px; flex-shrink: 0;"> diff --git a/gemfeed/2022-06-15-sweating-the-small-stuff.md b/gemfeed/2022-06-15-sweating-the-small-stuff.md index 43807184..1f7d8b3b 100644 --- a/gemfeed/2022-06-15-sweating-the-small-stuff.md +++ b/gemfeed/2022-06-15-sweating-the-small-stuff.md @@ -160,7 +160,7 @@ This all is of no real practical use but fun! The `rexfiles` project contains all Rex files for my (personal) server setup automation. A `Rexfile` is written in a Perl DSL run by the Rex configuration management system. It's pretty much KISS and that's why I love it. It suits my personal needs perfectly. -[https://codeberg.org/snonux/rexfiles](https://codeberg.org/snonux/rexfiles) +[https://codeberg.org/snonux/conf](https://codeberg.org/snonux/conf) [https://www.rexify.org](https://www.rexify.org) This is an E-Mail I posted to the Rex mailing list: diff --git a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md index f70661ff..89733b51 100644 --- a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md +++ b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md @@ -654,7 +654,7 @@ match from local for any action outbound For the complete `Rexfile` example and all the templates, please look at the Git repository: -[https://codeberg.org/snonux/rexfiles](https://codeberg.org/snonux/rexfiles) +[https://codeberg.org/snonux/conf](https://codeberg.org/snonux/conf) Besides ACME, other things, such as DNS servers, are also rexified. The following command will run all the Rex tasks and configure everything on my frontend machines automatically: diff --git a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md index adf3ef55..0c8455af 100644 --- a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md +++ b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md @@ -205,7 +205,7 @@ The authorative nameserver for my domains runs on both VMs, and both are configu Check out the whole script here: -[dns-failover.ksh](https://codeberg.org/snonux/rexfiles/src/branch/master/frontends/scripts/dns-failover.ksh) +[dns-failover.ksh](https://codeberg.org/snonux/conf/src/branch/master/frontends/scripts/dns-failover.ksh) ### Fairly cheap and geo-redundant @@ -264,7 +264,7 @@ The ACME automation is yet another daily CRON script `/usr/local/bin/acme.sh`. I Let's encrypt certificates usually expire after 3 months, so a weekly failover of my VMs is plenty. -[`acme.sh.tpl` - Rex template for the `acme.sh` script of mine.](https://codeberg.org/snonux/rexfiles/src/branch/master/frontends/scripts/acme.sh.tpl) +[`acme.sh.tpl` - Rex template for the `acme.sh` script of mine.](https://codeberg.org/snonux/conf/src/branch/master/frontends/scripts/acme.sh.tpl) [https://man.OpenBSD.org/acme-client.1](https://man.OpenBSD.org/acme-client.1) [Let's Encrypt with OpenBSD and Rex](./2022-07-30-lets-encrypt-with-openbsd-and-rex.md) @@ -282,7 +282,7 @@ Gogios, as I developed it by myself, isn't part of the OpenBSD base system. I use Rexify, a friendly configuration management system that allows automatic deployment and configuration. [https://www.rexify.org](https://www.rexify.org) -[codeberg.org/snonux/rexfiles/frontends](https://codeberg.org/snonux/rexfiles/src/branch/master/frontends) +[codeberg.org/snonux/rexfiles/frontends](https://codeberg.org/snonux/conf/src/branch/master/frontends) Rex isn't part of the OpenBSD base system, but I didn't need to install any external software on OpenBSD either as Rex is invoked from my Laptop! @@ -1,6 +1,6 @@ # Hello! -> This site was generated at 2025-08-14T23:30:12+03:00 by `Gemtexter` +> This site was generated at 2025-08-16T09:50:24+03:00 by `Gemtexter` Welcome to the foo.zone! diff --git a/uptime-stats.md b/uptime-stats.md index eb45c61a..bf86e807 100644 --- a/uptime-stats.md +++ b/uptime-stats.md @@ -1,6 +1,6 @@ # My machine uptime stats -> This site was last updated at 2025-08-14T23:30:11+03:00 +> This site was last updated at 2025-08-16T09:50:23+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. @@ -34,8 +34,8 @@ Boots is the total number of host boots over the entire lifespan. | 11. | mega15289 | 50 | Darwin 23.4.0 | | 12. | *t450 | 44 | FreeBSD 14.2-RELEASE | | 13. | fishfinger | 43 | OpenBSD 7.6 | -| 14. | phobos | 40 | Linux 3.4.0-CM-g1dd7cdf | -| 15. | mega8477 | 40 | Darwin 13.4.0 | +| 14. | mega8477 | 40 | Darwin 13.4.0 | +| 15. | phobos | 40 | Linux 3.4.0-CM-g1dd7cdf | | 16. | blowfish | 38 | OpenBSD 7.6 | | 17. | sun | 33 | FreeBSD 10.3-RELEASE-p24 | | 18. | f2 | 25 | FreeBSD 14.2-RELEASE-p1 | @@ -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, 8 months, 2 days | Linux 6.15.9-201.fc42.x86_64 | +| 4. | *earth | 3 years, 8 months, 3 days | Linux 6.15.9-201.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 | @@ -66,7 +66,7 @@ Uptime is the total uptime of a host over the entire lifespan. | 12. | tauceti-f | 1 years, 9 months, 18 days | Linux 3.2.0-3-amd64 | | 13. | *t450 | 1 years, 7 months, 26 days | FreeBSD 14.2-RELEASE | | 14. | mega8477 | 1 years, 3 months, 25 days | Darwin 13.4.0 | -| 15. | *mega-m3-pro | 1 years, 3 months, 9 days | Darwin 24.6.0 | +| 15. | *mega-m3-pro | 1 years, 3 months, 10 days | Darwin 24.6.0 | | 16. | host0 | 1 years, 3 months, 9 days | FreeBSD 6.2-RELEASE-p5 | | 17. | makemake | 1 years, 3 months, 5 days | Linux 6.9.9-200.fc40.x86_64 | | 18. | tauceti-e | 1 years, 2 months, 20 days | Linux 3.2.0-4-amd64 | @@ -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 | 4 years, 1 months, 20 days | Linux 6.15.9-201.fc42.x86_64 | +| 6. | *earth | 4 years, 1 months, 21 days | Linux 6.15.9-201.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 | @@ -187,15 +187,15 @@ Boots is the total number of host boots over the entire lifespan. | 9. | *FreeBSD 14... | 80 | | 10. | Darwin 13... | 40 | | 11. | Darwin 23... | 30 | -| 12. | *Darwin 24... | 25 | -| 13. | FreeBSD 5... | 25 | +| 12. | FreeBSD 5... | 25 | +| 13. | *Darwin 24... | 25 | | 14. | Linux 2... | 22 | | 15. | Darwin 21... | 17 | | 16. | Darwin 15... | 15 | | 17. | Darwin 22... | 12 | | 18. | Darwin 18... | 11 | | 19. | OpenBSD 4... | 10 | -| 20. | FreeBSD 6... | 10 | +| 20. | FreeBSD 7... | 10 | +-----+----------------+-------+ ``` @@ -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, 10 months, 29 days | +| 5. | *Linux 6... | 2 years, 10 months, 31 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 | @@ -221,7 +221,7 @@ Uptime is the total uptime of a host over the entire lifespan. | 12. | Darwin 23... | 0 years, 11 months, 9 days | | 13. | OpenBSD 4... | 0 years, 8 months, 12 days | | 14. | Darwin 21... | 0 years, 8 months, 2 days | -| 15. | *Darwin 24... | 0 years, 7 months, 11 days | +| 15. | *Darwin 24... | 0 years, 7 months, 12 days | | 16. | Darwin 18... | 0 years, 7 months, 5 days | | 17. | Darwin 22... | 0 years, 6 months, 22 days | | 18. | Darwin 15... | 0 years, 6 months, 15 days | @@ -285,7 +285,7 @@ Uptime is the total uptime of a host over the entire lifespan. +-----+------------+------------------------------+ | Pos | KernelName | Uptime | +-----+------------+------------------------------+ -| 1. | *Linux | 27 years, 11 months, 21 days | +| 1. | *Linux | 27 years, 11 months, 23 days | | 2. | *FreeBSD | 11 years, 7 months, 30 days | | 3. | OpenBSD | 7 years, 5 months, 5 days | | 4. | *Darwin | 4 years, 10 months, 29 days | @@ -301,7 +301,7 @@ Score is calculated by combining all other metrics. +-----+------------+-------+ | Pos | KernelName | Score | +-----+------------+-------+ -| 1. | *Linux | 1855 | +| 1. | *Linux | 1856 | | 2. | *FreeBSD | 814 | | 3. | OpenBSD | 472 | | 4. | *Darwin | 320 | |
