diff options
| -rw-r--r-- | about/index.md | 27 | ||||
| -rw-r--r-- | about/resources.md | 201 | ||||
| -rw-r--r-- | about/showcase.md | 385 | ||||
| -rw-r--r-- | about/showcase/debroid/image-1.png | 130 | ||||
| -rw-r--r-- | about/technical-books.txt | 1 | ||||
| -rw-r--r-- | gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md | 2 | ||||
| -rw-r--r-- | gemfeed/2025-02-08-random-weird-things-ii.md | 2 | ||||
| -rw-r--r-- | index.md | 2 | ||||
| -rw-r--r-- | uptime-stats.md | 70 |
9 files changed, 420 insertions, 400 deletions
diff --git a/about/index.md b/about/index.md index 4d2fce77..d41c5777 100644 --- a/about/index.md +++ b/about/index.md @@ -29,30 +29,45 @@ ## Books -### Books I am currently reading / listening +### Books I am currently reading / listening (4) -* Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook (Kobo kePub) -* Sapiens: A Brief History of Humankind; Yuval Noah Harari; Audiobook (Libro.fm) +* 97 Things Every Cloud Engineer Should Know: Collective Wisdom from the Experts; Emily Freeman, Nathen Harvey; eBook (ePub) +* How to talk so kids will listen & Listen so kids will talk; Audiobook (Audible) * 2005 - Okular; Alastair Reynolds; eBook (Kobo kePub) * 2021 - Inhibitor Phase; Alastair Reynolds; Audiobook (Libro.fm) -### Next books already in my shelf +### Next books already in my shelf (8) -* 97 Things Every Cloud Engineer Should Know: Collective Wisdom from the Experts; Emily Freeman, Nathen Harvey; eBook (ePub) +* Clean Code; Audiobook (Audible) +* Bash it out +* Positiv Wirkt: Wie du mit positivem Denken und Handeln aktiv dein Leben gestaltest (german); Armin Schubert; Paperback +* The Courage To Be Happy; Ichiro Kishimi and Fumitake Koga; Paperback * 1992 - A Fire Upon the Deep (german: Ein Feuer auf der Tiefe); Vernor Vinge; eBook (buecher.de) * 2025 - Origin: Die Entdecknug (german); Andreas Brandhorst; eBook (buecher.de) * 2025 - Origin: Die Erweckung (german); Joschua Tree; eBook (buecher.de) * 2025 - Origin: Die Erloesung (german); Brandon Q. Morris; eBook (buecher.de) -### Book wishlist +### Book wishlist (3) * 2025 - Gateway - Frederik Pohl (german) +* Bozo Loop - https://rachelbythebay.gumroad.com/l/bozo-loop-epub +* Maybe Understanding Distributed Systems - https://understandingdistributed.systems (or do I know most of it already?) ### Books I've read [Resources, Technical Books, Podcasts, Courses and Guides I recommend](./resources.md) [Novels I've read](./novels.md) +## Things I am currently learning + +* Bulgarian language level 4 (A2) + +## Things I want to learn (soon?) + +* `jqlang` - Deep dive into https://jqlang.org +* `d2lant` - Deep dive into https://d2lang.com +* Advanced Prometheus Course at Grafana Labs + That's all for now... [Back to the main site](../) diff --git a/about/resources.md b/about/resources.md index 8e6ec60a..77c61a94 100644 --- a/about/resources.md +++ b/about/resources.md @@ -35,109 +35,110 @@ You won't find any links on this site because, over time, the links will break. In random order: -* The Docker Book; James Turnbull; Kindle -* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly -* Java ist auch eine Insel; Christian Ullenboom; -* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications -* The Pragmatic Programmer; David Thomas; Addison-Wesley -* 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 Kubernetes Book; Nigel Poulton; Unabridged Audiobook -* Funktionale Programmierung; Peter Pepper; Springer -* Raku Recipes; J.J. Merelo; Apress -* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly -* Effective awk programming; Arnold Robbins; O'Reilly -* Terraform Cookbook; Mikael Krief; Packt Publishing -* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner -* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly -* Leanring eBPF; Liz Rice; O'Reilly -* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly -* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press -* Effective Java; Joshua Bloch; Addison-Wesley Professional -* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt -* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional -* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press * The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton -* Developing Games in Java; David Brackeen and others...; New Riders +* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press +* Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers +* Higher Order Perl; Mark Dominus; Morgan Kaufmann +* Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook +* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner +* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible +* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly +* DNS and BIND; Cricket Liu; O'Reilly +* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications * Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson -* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible +* The Pragmatic Programmer; David Thomas; Addison-Wesley * Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf +* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt +* Raku Fundamentals; Moritz Lenz; Apress +* Modern Perl; Chromatic ; Onyx Neon Press +* Raku Recipes; J.J. Merelo; Apress * Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications +* Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly +* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional +* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook +* The Docker Book; James Turnbull; Kindle +* Data Science at the Command Line; Jeroen Janssens; O'Reilly +* Effective Java; Joshua Bloch; Addison-Wesley Professional +* Systemprogrammierung in Go; Frank Müller; dpunkt * Concurrency in Go; Katherine Cox-Buday; O'Reilly -* Polished Ruby Programming; Jeremy Evans; Packt Publishing -* Site Reliability Engineering; How Google runs production systems; O'Reilly +* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers +* Perl New Features; Joshua McAdams, brian d foy; Perl School +* Leanring eBPF; Liz Rice; O'Reilly * Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook -* Higher Order Perl; Mark Dominus; Morgan Kaufmann +* Funktionale Programmierung; Peter Pepper; Springer +* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly +* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly +* Terraform Cookbook; Mikael Krief; Packt Publishing +* Site Reliability Engineering; How Google runs production systems; O'Reilly +* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly * Ultimate Go Notebook; Bill Kennedy -* Data Science at the Command Line; Jeroen Janssens; O'Reilly -* DNS and BIND; Cricket Liu; O'Reilly -* Systemprogrammierung in Go; Frank Müller; dpunkt -* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible -* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly * Pro Puppet; James Turnbull, Jeffrey McCune; Apress -* Raku Fundamentals; Moritz Lenz; Apress -* Perl New Features; Joshua McAdams, brian d foy; Perl School -* Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly +* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press +* Polished Ruby Programming; Jeremy Evans; Packt Publishing +* Java ist auch eine Insel; Christian Ullenboom; +* Effective awk programming; Arnold Robbins; O'Reilly +* 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 * C++ Programming Language; Bjarne Stroustrup; -* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers -* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly -* Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers -* Modern Perl; Chromatic ; Onyx Neon Press +* Developing Games in Java; David Brackeen and others...; New Riders +* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible +* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly +* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly ## 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: -* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly -* The Linux Programming Interface; Michael Kerrisk; No Starch Press +* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly * Relayd and Httpd Mastery; Michael W Lucas * Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly * Go: Design Patterns for Real-World Projects; Mat Ryer; Packt -* BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley -* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly +* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly * Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley +* The Linux Programming Interface; Michael Kerrisk; No Starch Press +* BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley ## Self-development and soft-skills books In random order: +* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK * The Software Engineer's Guidebook: Navigating senior, tech lead, and staff engineer positions at tech companies and startups; Gergely Orosz; Audiobook -* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook * Slow Productivity; Cal Newport; Penguin Random House -* The Bullet Journal Method; Ryder Carroll; Fourth Estate * Influence without Authority; A. Cohen, D. Bradford; Wiley -* Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook -* The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd -* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook +* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing +* Soft Skills; John Sommez; Manning Publications +* Meditation for Mortals, Oliver Burkeman, Audiobook +* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business +* Getting Things Done; David Allen +* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select +* Stop starting, start finishing; Arne Roock; Lean-Kanban University * Eat That Frog!; Brian Tracy; Hodder Paperbacks -* Eat That Frog; Brian Tracy -* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly -* The Joy of Missing Out; Christina Crook; New Society Publishers * The Courage to Be Disliked; Ichiro Kishimi and Fumitake Koga; Audiobook -* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne -* 101 Essays that change the way you think; Brianna Wiest; Audiobook -* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press * Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion -* The Power of Now; Eckhard Tolle; Yellow Kite -* Stop starting, start finishing; Arne Roock; Lean-Kanban University -* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select -* So Good They Can't Ignore You; Cal Newport; Business Plus -* Atomic Habits; James Clear; Random House Business -* Soft Skills; John Sommez; Manning Publications -* 97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook -* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business +* The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd +* Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook +* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne * Ultralearning; Scott Young; Thorsons -* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books -* Getting Things Done; David Allen +* 97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook +* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly +* The Bullet Journal Method; Ryder Carroll; Fourth Estate +* Atomic Habits; James Clear; Random House Business * Digital Minimalism; Cal Newport; Portofolio Penguin -* The Good Enough Job; Simone Stolzoff; Ebury Edge -* Ultralearning; Anna Laurent; Self-published via Amazon -* Meditation for Mortals, Oliver Burkeman, Audiobook * The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME) +* Ultralearning; Anna Laurent; Self-published via Amazon +* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press +* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook +* 101 Essays that change the way you think; Brianna Wiest; Audiobook +* So Good They Can't Ignore You; Cal Newport; Business Plus +* The Power of Now; Eckhard Tolle; Yellow Kite +* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books * Deep Work; Cal Newport; Piatkus * Psycho-Cybernetics; Maxwell Maltz; Perigee Books -* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing +* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook +* Eat That Frog; Brian Tracy * Solve for Happy; Mo Gawdat (RE-READ 1ST TIME) -* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK +* The Joy of Missing Out; Christina Crook; New Society Publishers +* The Good Enough Job; Simone Stolzoff; Ebury Edge [Here are notes of mine for some of the books](../notes/index.md) @@ -145,30 +146,30 @@ In random order: Some of these were in-person with exams; others were online learning lectures only. In random order: -* Protocol buffers; O'Reilly Online * Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online * Linux Security and Isolation APIs Training; Michael Kerrisk; 3-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 -* Ultimate Go Programming; Bill Kennedy; O'Reilly Online -* Functional programming lecture; Remote University of Hagen -* 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 * Structure and Interpretation of Computer Programs; Harold Abelson and more...; -* Apache Tomcat Best Practises; 3-day on-site training * The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online +* Protocol buffers; O'Reilly Online * Scripting Vim; Damian Conway; O'Reilly Online -* Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need) * F5 Loadbalancers Training; 2-day on-site training; F5, Inc. +* 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) * AWS Immersion Day; Amazon; 1-day interactive online training +* Functional programming lecture; Remote University of Hagen +* Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon +* Ultimate Go Programming; Bill Kennedy; O'Reilly Online +* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online +* Apache Tomcat Best Practises; 3-day on-site training +* MySQL Deep Dive Workshop; 2-day on-site training ## Technical guides These are not whole books, but guides (smaller or larger) which I found very useful. in random order: +* Raku Guide at https://raku.guide * How CPUs work at https://cpu.land * Advanced Bash-Scripting Guide -* Raku Guide at https://raku.guide ## Podcasts @@ -176,58 +177,58 @@ These are not whole books, but guides (smaller or larger) which I found very use In random order: -* Cup o' Go [Golang] -* Backend Banter -* Wednesday Wisdom -* BSD Now [BSD] -* Maintainable -* Fallthrough [Golang] -* Modern Mentor * Fork Around And Find Out +* Fallthrough [Golang] +* Deep Questions with Cal Newport +* BSD Now [BSD] +* Dev Interrupted * Pratical AI +* Modern Mentor +* The Pragmatic Engineer Podcast +* Wednesday Wisdom +* Backend Banter +* Maintainable +* The Changelog Podcast(s) +* Cup o' Go [Golang] * The ProdCast (Google SRE Podcast) * Hidden Brain -* Dev Interrupted -* The Changelog Podcast(s) -* Deep Questions with Cal Newport -* The Pragmatic Engineer Podcast ### Podcasts I liked I liked them but am not listening to them anymore. The podcasts have either "finished" (no more episodes) or I stopped listening to them due to time constraints or a shift in my interests. +* FLOSS weekly * Java Pub House * Ship It (predecessor of Fork Around And Find Out) +* Go Time (predecessor of fallthrough) * CRE: Chaosradio Express [german] -* FLOSS weekly * Modern Mentor -* Go Time (predecessor of fallthrough) ## Newsletters I like This is a mix of tech and non-tech newsletters I am subscribed to. In random order: -* Golang Weekly -* VK Newsletter -* Applied Go Weekly Newsletter * The Imperfectionist -* The Pragmatic Engineer -* Andreas Brandhorst Newsletter (Sci-Fi author) +* Monospace Mentor * The Valuable Dev * byteSizeGo +* Applied Go Weekly Newsletter +* Golang Weekly * Changelog News -* Register Spill -* Monospace Mentor * Ruby Weekly +* Andreas Brandhorst Newsletter (Sci-Fi author) +* VK Newsletter +* Register Spill +* The Pragmatic Engineer ## Magazines I like(d) This is a mix of tech I like(d). I may not be a current subscriber, but now and then, I buy an issue. In random order: -* Linux Magazine -* Linux User -* freeX (not published anymore) * LWN (online only) +* freeX (not published anymore) +* Linux User +* Linux Magazine # Formal education diff --git a/about/showcase.md b/about/showcase.md index 3e057b6d..c3e3e31a 100644 --- a/about/showcase.md +++ b/about/showcase.md @@ -1,6 +1,6 @@ # Project Showcase -Generated on: 2025-11-03 +Generated on: 2025-11-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. @@ -13,9 +13,9 @@ This page showcases my side projects, providing an overview of what each project * [⇢ ⇢ ⇢ yoga](#yoga) * [⇢ ⇢ ⇢ hexai](#hexai) * [⇢ ⇢ ⇢ foostats](#foostats) +* [⇢ ⇢ ⇢ timr](#timr) * [⇢ ⇢ ⇢ gitsyncer](#gitsyncer) * [⇢ ⇢ ⇢ totalrecall](#totalrecall) -* [⇢ ⇢ ⇢ timr](#timr) * [⇢ ⇢ ⇢ tasksamurai](#tasksamurai) * [⇢ ⇢ ⇢ ior](#ior) * [⇢ ⇢ ⇢ gos](#gos) @@ -34,8 +34,8 @@ This page showcases my side projects, providing an overview of what each project * [⇢ ⇢ ⇢ geheim](#geheim) * [⇢ ⇢ ⇢ sway-autorotate](#sway-autorotate) * [⇢ ⇢ ⇢ photoalbum](#photoalbum) -* [⇢ ⇢ ⇢ algorithms](#algorithms) * [⇢ ⇢ ⇢ foo.zone](#foozone) +* [⇢ ⇢ ⇢ algorithms](#algorithms) * [⇢ ⇢ ⇢ perl-c-fibonacci](#perl-c-fibonacci) * [⇢ ⇢ ⇢ guprecords](#guprecords) * [⇢ ⇢ ⇢ ioriot](#ioriot) @@ -53,27 +53,27 @@ This page showcases my side projects, providing an overview of what each project * [⇢ ⇢ ⇢ netdiff](#netdiff) * [⇢ ⇢ ⇢ pwgrep](#pwgrep) * [⇢ ⇢ ⇢ japi](#japi) +* [⇢ ⇢ ⇢ loadbars](#loadbars) * [⇢ ⇢ ⇢ perl-poetry](#perl-poetry) * [⇢ ⇢ ⇢ ipv6test](#ipv6test) * [⇢ ⇢ ⇢ cpuinfo](#cpuinfo) -* [⇢ ⇢ ⇢ loadbars](#loadbars) * [⇢ ⇢ ⇢ perldaemon](#perldaemon) * [⇢ ⇢ ⇢ awksite](#awksite) * [⇢ ⇢ ⇢ jsmstrade](#jsmstrade) -* [⇢ ⇢ ⇢ ychat](#ychat) * [⇢ ⇢ ⇢ netcalendar](#netcalendar) +* [⇢ ⇢ ⇢ ychat](#ychat) * [⇢ ⇢ ⇢ hsbot](#hsbot) -* [⇢ ⇢ ⇢ fype](#fype) * [⇢ ⇢ ⇢ vs-sim](#vs-sim) +* [⇢ ⇢ ⇢ fype](#fype) ## Overall Statistics * 📦 Total Projects: 56 -* 📊 Total Commits: 11,329 -* 📈 Total Lines of Code: 225,638 -* 📄 Total Lines of Documentation: 22,247 -* 💻 Languages: Go (38.0%), Java (17.9%), C (7.6%), C++ (7.5%), Perl (7.3%), C/C++ (5.4%), HTML (5.2%), Shell (2.7%), Config (1.6%), Ruby (1.3%), HCL (1.2%), YAML (0.8%), Python (0.7%), Make (0.6%), CSS (0.6%), Raku (0.3%), JSON (0.3%), XML (0.3%), Haskell (0.3%), TOML (0.1%) -* 📚 Documentation: Text (50.5%), Markdown (49.5%) +* 📊 Total Commits: 11,370 +* 📈 Total Lines of Code: 287,019 +* 📄 Total Lines of Documentation: 25,503 +* 💻 Languages: Go (29.8%), Java (19.7%), C++ (13.0%), C/C++ (7.2%), C (6.7%), Perl (6.2%), Shell (5.3%), HTML (5.0%), Config (1.6%), Ruby (1.0%), HCL (1.0%), Make (0.7%), YAML (0.6%), Python (0.6%), CSS (0.5%), Raku (0.3%), JSON (0.3%), XML (0.2%), Haskell (0.2%), TOML (0.1%) +* 📚 Documentation: Text (43.5%), Markdown (43.1%), LaTeX (13.4%) * 🎵 Vibe-Coded Projects: 5 out of 56 (8.9%) * 🤖 AI-Assisted Projects (including vibe-coded): 9 out of 56 (16.1% AI-assisted, 83.9% human-only) * 🚀 Release Status: 37 released, 19 experimental (66.1% with releases, 33.9% experimental) @@ -82,13 +82,13 @@ This page showcases my side projects, providing an overview of what each project ### conf -* 💻 Languages: Perl (30.5%), YAML (25.3%), Shell (22.6%), Config (5.4%), CSS (5.2%), TOML (4.7%), Ruby (4.0%), Lua (1.1%), Docker (0.6%), JSON (0.5%) -* 📚 Documentation: Text (69.4%), Markdown (30.6%) -* 📊 Commits: 1031 -* 📈 Lines of Code: 6270 -* 📄 Lines of Documentation: 1440 -* 📅 Development Period: 2021-12-28 to 2025-11-02 -* 🔥 Recent Activity: 20.9 days (avg. age of last 42 commits) +* 💻 Languages: Perl (30.4%), YAML (25.2%), Shell (22.8%), Config (5.4%), CSS (5.2%), TOML (4.7%), Ruby (4.0%), Lua (1.1%), Docker (0.6%), JSON (0.5%) +* 📚 Documentation: Markdown (69.8%), Text (30.2%) +* 📊 Commits: 1045 +* 📈 Lines of Code: 6284 +* 📄 Lines of Documentation: 632 +* 📅 Development Period: 2021-12-28 to 2025-11-15 +* 🔥 Recent Activity: 20.0 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -110,7 +110,7 @@ The project is organized into distinct subdirectories: `dotfiles/` contains shel * 📈 Lines of Code: 3408 * 📄 Lines of Documentation: 82 * 📅 Development Period: 2025-10-01 to 2025-10-24 -* 🔥 Recent Activity: 26.5 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 40.1 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: v0.3.0 (2025-10-24) * 🎵 Vibe-Coded: This project has been vibe coded @@ -129,15 +129,15 @@ The implementation follows clean Go architecture with domain logic organized und ### hexai -* 💻 Languages: Go (69.5%), HTML (30.5%) +* 💻 Languages: Go (65.3%), HTML (34.7%) * 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 238 -* 📈 Lines of Code: 26565 -* 📄 Lines of Documentation: 564 -* 📅 Development Period: 2025-08-01 to 2025-10-04 -* 🔥 Recent Activity: 40.9 days (avg. age of last 42 commits) +* 📊 Commits: 240 +* 📈 Lines of Code: 28331 +* 📄 Lines of Documentation: 562 +* 📅 Development Period: 2025-08-01 to 2025-11-03 +* 🔥 Recent Activity: 52.1 days (avg. age of last 42 commits) * ⚖️ License: No license found -* 🏷️ Latest Release: v0.15.1 (2025-10-03) +* 🏷️ Latest Release: v0.15.3 (2025-11-03) * 🤖 AI-Assisted: This project was partially created with the help of generative AI @@ -160,7 +160,7 @@ The project is implemented as an LSP server written in Go, with a TUI component * 📈 Lines of Code: 1902 * 📄 Lines of Documentation: 423 * 📅 Development Period: 2023-01-02 to 2025-11-01 -* 🔥 Recent Activity: 72.8 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 86.3 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v0.2.0 (2025-10-21) @@ -174,6 +174,29 @@ The implementation uses a modular Perl architecture with specialized components: --- +### timr + +* 💻 Languages: Go (94.5%), Shell (5.5%) +* 📚 Documentation: Markdown (100.0%) +* 📊 Commits: 31 +* 📈 Lines of Code: 991 +* 📄 Lines of Documentation: 50 +* 📅 Development Period: 2025-06-25 to 2025-11-08 +* 🔥 Recent Activity: 104.8 days (avg. age of last 42 commits) +* ⚖️ License: BSD-2-Clause +* 🏷️ Latest Release: v0.3.0 (2025-11-08) +* 🎵 Vibe-Coded: This project has been vibe coded + + +`timr` is a minimalist command-line stopwatch timer written in Go that helps developers track time spent on tasks. It provides a persistent timer that saves state to disk, allowing you to start, stop, pause, and resume time tracking across terminal sessions. The tool supports multiple viewing modes including a standard status display (with formatted or raw output in seconds/minutes), a live full-screen view with keyboard controls, and specialized output for shell prompt integration. + +The architecture is straightforward: it's a Go-based CLI application that persists timer state to the filesystem, enabling continuous tracking even when the program isn't actively running. Key features include basic timer controls (start/stop/continue/reset), flexible status reporting formats for automation, and fish shell integration that displays a color-coded timer icon and elapsed time directly in your prompt—making it effortless to keep track of how long you've been working without context switching. + +[View on Codeberg](https://codeberg.org/snonux/timr) +[View on GitHub](https://github.com/snonux/timr) + +--- + ### gitsyncer * 💻 Languages: Go (92.3%), Shell (7.3%), JSON (0.4%) @@ -182,7 +205,7 @@ The implementation uses a modular Perl architecture with specialized components: * 📈 Lines of Code: 10152 * 📄 Lines of Documentation: 2431 * 📅 Development Period: 2025-06-23 to 2025-10-31 -* 🔥 Recent Activity: 91.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 105.2 days (avg. age of last 42 commits) * ⚖️ License: BSD-2-Clause * 🏷️ Latest Release: v0.10.1 (2025-10-31) * 🎵 Vibe-Coded: This project has been vibe coded @@ -205,7 +228,7 @@ The implementation uses a git remotes approach: it clones from one organization, * 📈 Lines of Code: 12003 * 📄 Lines of Documentation: 361 * 📅 Development Period: 2025-07-14 to 2025-08-02 -* 🔥 Recent Activity: 103.7 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 117.2 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 @@ -224,29 +247,6 @@ The project offers both a keyboard-driven GUI for interactive use and a CLI for --- -### timr - -* 💻 Languages: Go (100.0%) -* 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 27 -* 📈 Lines of Code: 931 -* 📄 Lines of Documentation: 81 -* 📅 Development Period: 2025-06-25 to 2025-10-18 -* 🔥 Recent Activity: 105.6 days (avg. age of last 42 commits) -* ⚖️ License: BSD-2-Clause -* 🏷️ Latest Release: v0.2.0 (2025-10-18) -* 🎵 Vibe-Coded: This project has been vibe coded - - -`timr` is a minimalist command-line stopwatch timer written in Go that helps developers track time spent on tasks. It provides a persistent timer that saves state to disk, allowing you to start, stop, pause, and resume time tracking across terminal sessions. The tool supports multiple viewing modes including a standard status display (with formatted or raw output in seconds/minutes), a live full-screen view with keyboard controls, and specialized output for shell prompt integration. - -The architecture is straightforward: it's a Go-based CLI application that persists timer state to the filesystem, enabling continuous tracking even when the program isn't actively running. Key features include basic timer controls (start/stop/continue/reset), flexible status reporting formats for automation, and fish shell integration that displays a color-coded timer icon and elapsed time directly in your prompt—making it effortless to keep track of how long you've been working without context switching. - -[View on Codeberg](https://codeberg.org/snonux/timr) -[View on GitHub](https://github.com/snonux/timr) - ---- - ### tasksamurai * 💻 Languages: Go (99.8%), YAML (0.2%) @@ -255,7 +255,7 @@ The architecture is straightforward: it's a Go-based CLI application that persis * 📈 Lines of Code: 6168 * 📄 Lines of Documentation: 164 * 📅 Development Period: 2025-06-19 to 2025-11-02 -* 🔥 Recent Activity: 123.7 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 137.3 days (avg. age of last 42 commits) * ⚖️ License: BSD-2-Clause * 🏷️ Latest Release: v0.9.3 (2025-10-05) * 🎵 Vibe-Coded: This project has been vibe coded @@ -282,7 +282,7 @@ Under the hood, Task Samurai acts as a front-end wrapper that invokes the native * 📈 Lines of Code: 13072 * 📄 Lines of Documentation: 680 * 📅 Development Period: 2024-01-18 to 2025-10-09 -* 🔥 Recent Activity: 142.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 155.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 @@ -309,7 +309,7 @@ The tool is implemented in Go and C, leveraging libbpfgo for BPF interaction. It * 📈 Lines of Code: 4102 * 📄 Lines of Documentation: 357 * 📅 Development Period: 2024-05-04 to 2025-09-24 -* 🔥 Recent Activity: 165.3 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 178.9 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.2.0 (2025-09-24) @@ -335,7 +335,7 @@ The implementation uses OAuth2 for LinkedIn authentication, stores configuration * 📈 Lines of Code: 20091 * 📄 Lines of Documentation: 5674 * 📅 Development Period: 2020-01-09 to 2025-06-20 -* 🔥 Recent Activity: 168.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 182.5 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 @@ -362,7 +362,7 @@ The architecture follows a client-server model where DTail servers run on target * 📈 Lines of Code: 396 * 📄 Lines of Documentation: 24 * 📅 Development Period: 2025-04-18 to 2025-05-11 -* 🔥 Recent Activity: 188.2 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 201.8 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.0.0 (2025-05-11) @@ -384,7 +384,7 @@ The tool reads host definitions from a YAML file specifying network interfaces ( * 📈 Lines of Code: 25762 * 📄 Lines of Documentation: 3101 * 📅 Development Period: 2008-05-15 to 2025-06-27 -* 🔥 Recent Activity: 201.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 215.1 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 @@ -409,7 +409,7 @@ The implementation follows a modular Java architecture with clear separation bet * 📈 Lines of Code: 33 * 📄 Lines of Documentation: 3 * 📅 Development Period: 2025-04-03 to 2025-04-03 -* 🔥 Recent Activity: 214.2 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 227.7 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -431,7 +431,7 @@ The implementation is intentionally straightforward, using Go's built-in testing * 📈 Lines of Code: 1373 * 📄 Lines of Documentation: 48 * 📅 Development Period: 2024-12-05 to 2025-02-28 -* 🔥 Recent Activity: 254.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 268.4 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -449,11 +449,11 @@ The implementation centers around a DSL module that provides keywords like `file * 💻 Languages: Shell (68.3%), CSS (28.4%), Config (1.9%), HTML (1.3%) * 📚 Documentation: Text (76.1%), Markdown (23.9%) -* 📊 Commits: 466 +* 📊 Commits: 468 * 📈 Lines of Code: 2285 * 📄 Lines of Documentation: 1180 -* 📅 Development Period: 2021-05-21 to 2025-08-31 -* 🔥 Recent Activity: 300.2 days (avg. age of last 42 commits) +* 📅 Development Period: 2021-05-21 to 2025-11-06 +* 🔥 Recent Activity: 293.0 days (avg. age of last 42 commits) * ⚖️ License: GPL-3.0 * 🏷️ Latest Release: 3.0.0 (2024-10-01) @@ -475,7 +475,7 @@ The architecture leverages GNU utilities (sed, grep, date) and optional tools li * 📈 Lines of Code: 1246 * 📄 Lines of Documentation: 211 * 📅 Development Period: 2023-04-17 to 2025-10-28 -* 🔥 Recent Activity: 500.5 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 514.1 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.2.1 (2025-10-27) @@ -499,7 +499,7 @@ The architecture is straightforward: JSON configuration defines checks (plugin p * 📈 Lines of Code: 1133 * 📄 Lines of Documentation: 78 * 📅 Development Period: 2024-01-20 to 2025-09-13 -* 🔥 Recent Activity: 520.8 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 534.3 days (avg. age of last 42 commits) * ⚖️ License: MIT * 🏷️ Latest Release: v0.0.4 (2025-09-13) @@ -525,7 +525,7 @@ The implementation leverages Go's cross-compilation capabilities and Fyne's UI a * 📈 Lines of Code: 40 * 📄 Lines of Documentation: 3 * 📅 Development Period: 2023-12-31 to 2025-08-11 -* 🔥 Recent Activity: 554.5 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 568.0 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -547,7 +547,7 @@ The implementation uses Alpine Linux as the base image for a minimal footprint, * 📈 Lines of Code: 2851 * 📄 Lines of Documentation: 52 * 📅 Development Period: 2023-08-27 to 2025-08-08 -* 🔥 Recent Activity: 590.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 604.2 days (avg. age of last 42 commits) * ⚖️ License: MIT * 🧪 Status: Experimental (no releases yet) @@ -569,7 +569,7 @@ The infrastructure uses a **modular, layered architecture** with separate Terraf * 📈 Lines of Code: 1525 * 📄 Lines of Documentation: 15 * 📅 Development Period: 2023-04-17 to 2023-11-19 -* 🔥 Recent Activity: 817.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 831.1 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -592,7 +592,7 @@ The architecture consists of client/server components for inter-node communicati * 📈 Lines of Code: 51 * 📄 Lines of Documentation: 26 * 📅 Development Period: 2022-06-02 to 2024-04-20 -* 🔥 Recent Activity: 882.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 895.9 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -615,7 +615,7 @@ The implementation is a straightforward bash script using `qpdf` for PDF extract * 📈 Lines of Code: 822 * 📄 Lines of Documentation: 106 * 📅 Development Period: 2018-05-26 to 2025-11-01 -* 🔥 Recent Activity: 1093.7 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 1107.2 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: v0.3.1 (2025-11-01) @@ -637,7 +637,7 @@ The architecture leverages Git for storage and synchronization across multiple r * 📈 Lines of Code: 41 * 📄 Lines of Documentation: 17 * 📅 Development Period: 2020-01-30 to 2025-04-30 -* 🔥 Recent Activity: 1175.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 1189.4 days (avg. age of last 42 commits) * ⚖️ License: GPL-3.0 * 🧪 Status: Experimental (no releases yet) @@ -659,7 +659,7 @@ The implementation uses a bash script that continuously monitors the `monitor-se * 📈 Lines of Code: 342 * 📄 Lines of Documentation: 39 * 📅 Development Period: 2011-11-19 to 2022-04-02 -* 🔥 Recent Activity: 1395.5 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 1409.0 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.5.0 (2022-02-21) @@ -674,46 +674,46 @@ The architecture is straightforward and Unix-philosophy driven: users configure --- -### algorithms +### foo.zone -* 💻 Languages: Go (99.2%), Make (0.8%) * 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 82 -* 📈 Lines of Code: 1728 -* 📄 Lines of Documentation: 18 -* 📅 Development Period: 2020-07-12 to 2023-04-09 -* 🔥 Recent Activity: 1546.6 days (avg. age of last 42 commits) -* ⚖️ License: Custom License +* 📊 Commits: 3214 +* 📈 Lines of Code: 0 +* 📄 Lines of Documentation: 23 +* 📅 Development Period: 2021-05-21 to 2022-04-02 +* 🔥 Recent Activity: 1575.7 days (avg. age of last 42 commits) +* ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) ⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk. -This is a Go-based algorithms refresher repository implementing fundamental computer science data structures and algorithms. It serves as educational practice material covering four main areas: sorting (insertion, selection, shell, merge, quicksort with 3-way partitioning, and parallel variants), searching (binary search trees, red-black trees, hash tables, and elementary search), priority queues (heap-based and elementary implementations), and basic data structures like array lists. - -The project is implemented in Go 1.19+ with comprehensive unit tests and benchmarking capabilities via Make targets, allowing developers to validate correctness and compare performance characteristics of different algorithmic approaches (e.g., parallel vs sequential sorting, heap vs elementary priority queues). The Makefile also includes profiling support for deeper performance analysis of specific algorithms. +foo.zone: source code repository. -[View on Codeberg](https://codeberg.org/snonux/algorithms) -[View on GitHub](https://github.com/snonux/algorithms) +[View on Codeberg](https://codeberg.org/snonux/foo.zone) +[View on GitHub](https://github.com/snonux/foo.zone) --- -### foo.zone +### algorithms -* 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 3195 -* 📈 Lines of Code: 0 -* 📄 Lines of Documentation: 23 -* 📅 Development Period: 2021-05-21 to 2022-04-02 -* 🔥 Recent Activity: 1562.2 days (avg. age of last 42 commits) -* ⚖️ License: No license found +* 💻 Languages: Go (99.2%), Make (0.8%) +* 📚 Documentation: Text (90.3%), Markdown (9.7%) +* 📊 Commits: 82 +* 📈 Lines of Code: 1682 +* 📄 Lines of Documentation: 185 +* 📅 Development Period: 2020-07-12 to 2023-04-02 +* 🔥 Recent Activity: 1696.5 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. -foo.zone: source code repository. +This is a Go-based algorithms refresher repository implementing fundamental computer science data structures and algorithms. It serves as educational practice material covering four main areas: sorting (insertion, selection, shell, merge, quicksort with 3-way partitioning, and parallel variants), searching (binary search trees, red-black trees, hash tables, and elementary search), priority queues (heap-based and elementary implementations), and basic data structures like array lists. -[View on Codeberg](https://codeberg.org/snonux/foo.zone) -[View on GitHub](https://github.com/snonux/foo.zone) +The project is implemented in Go 1.19+ with comprehensive unit tests and benchmarking capabilities via Make targets, allowing developers to validate correctness and compare performance characteristics of different algorithmic approaches (e.g., parallel vs sequential sorting, heap vs elementary priority queues). The Makefile also includes profiling support for deeper performance analysis of specific algorithms. + +[View on Codeberg](https://codeberg.org/snonux/algorithms) +[View on GitHub](https://github.com/snonux/algorithms) --- @@ -725,7 +725,7 @@ foo.zone: source code repository. * 📈 Lines of Code: 51 * 📄 Lines of Documentation: 69 * 📅 Development Period: 2014-03-24 to 2022-04-23 -* 🔥 Recent Activity: 2027.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 2041.1 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -744,7 +744,7 @@ perl-c-fibonacci: source code repository. * 📊 Commits: 95 * 📈 Lines of Code: 195 * 📅 Development Period: 2013-03-22 to 2023-03-09 -* 🔥 Recent Activity: 2242.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 2256.2 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: v1.0.0 (2023-04-29) @@ -767,7 +767,7 @@ The implementation uses an object-oriented architecture with specialized classes * 📈 Lines of Code: 12420 * 📄 Lines of Documentation: 610 * 📅 Development Period: 2018-03-01 to 2020-01-22 -* 🔥 Recent Activity: 2569.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 2582.6 days (avg. age of last 42 commits) * ⚖️ License: Apache-2.0 * 🏷️ Latest Release: 0.5.1 (2019-01-04) @@ -792,7 +792,7 @@ The key advantage over traditional benchmarking tools is that it reproduces actu * 📈 Lines of Code: 919 * 📄 Lines of Documentation: 12 * 📅 Development Period: 2015-01-02 to 2021-11-04 -* 🔥 Recent Activity: 3077.8 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3091.3 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.1.3 (2015-01-02) @@ -815,7 +815,7 @@ Both handlers are implemented as Perl modules using Apache2's mod_perl API, conf * 📈 Lines of Code: 18 * 📄 Lines of Documentation: 49 * 📅 Development Period: 2014-03-24 to 2021-11-05 -* 🔥 Recent Activity: 3313.7 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3327.2 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -838,7 +838,7 @@ The implementation uses a two-tier security architecture: SSH public key authent * 📈 Lines of Code: 5360 * 📄 Lines of Documentation: 789 * 📅 Development Period: 2015-01-02 to 2021-11-05 -* 🔥 Recent Activity: 3580.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3593.9 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.0.1 (2015-01-02) @@ -861,7 +861,7 @@ Implemented in Perl, `mon` features automatic JSON backup before modifications ( * 📈 Lines of Code: 273 * 📄 Lines of Documentation: 32 * 📅 Development Period: 2015-09-29 to 2021-11-05 -* 🔥 Recent Activity: 3584.5 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3598.1 days (avg. age of last 42 commits) * ⚖️ License: Apache-2.0 * 🏷️ Latest Release: 0 (2015-10-26) @@ -884,7 +884,7 @@ The tool is implemented as a lightweight Ruby script that prioritizes simplicity * 📈 Lines of Code: 1839 * 📄 Lines of Documentation: 412 * 📅 Development Period: 2015-01-02 to 2021-11-05 -* 🔥 Recent Activity: 3664.2 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3677.7 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.0.2 (2015-01-02) @@ -907,7 +907,7 @@ The tool is implemented around a hierarchical configuration system (`/etc/pingdo * 📈 Lines of Code: 499 * 📄 Lines of Documentation: 8 * 📅 Development Period: 2015-05-24 to 2021-11-03 -* 🔥 Recent Activity: 3674.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3688.4 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.1 (2015-06-01) @@ -928,7 +928,7 @@ The implementation uses a concurrent architecture with goroutines for data colle * 📊 Commits: 670 * 📈 Lines of Code: 1675 * 📅 Development Period: 2011-03-06 to 2018-12-22 -* 🔥 Recent Activity: 3730.5 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3744.1 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.0.0 (2018-12-22) @@ -951,7 +951,7 @@ The implementation follows strict OO Perl conventions with explicit typing and p * 📈 Lines of Code: 88 * 📄 Lines of Documentation: 148 * 📅 Development Period: 2015-06-18 to 2015-12-05 -* 🔥 Recent Activity: 3778.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 3792.2 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -976,7 +976,7 @@ The implementation uses a two-stage debootstrap process: first creating a Debian * 📈 Lines of Code: 1681 * 📄 Lines of Documentation: 539 * 📅 Development Period: 2014-03-10 to 2021-11-03 -* 🔥 Recent Activity: 4056.6 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4070.2 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.0.2 (2014-11-17) @@ -999,7 +999,7 @@ The tool is implemented in Python and depends on the bigsuds library (F5's iCont * 📈 Lines of Code: 65 * 📄 Lines of Documentation: 228 * 📅 Development Period: 2013-03-22 to 2021-11-04 -* 🔥 Recent Activity: 4111.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4124.6 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.0.0.0 (2013-03-22) @@ -1022,7 +1022,7 @@ The implementation uses a **Makefile-based build system** with targets for compi * 📈 Lines of Code: 136 * 📄 Lines of Documentation: 96 * 📅 Development Period: 2013-03-22 to 2021-11-05 -* 🔥 Recent Activity: 4124.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4137.6 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.2.0 (2014-07-05) @@ -1045,7 +1045,7 @@ The architecture uses three components working together: a Vim plugin that provi * 📈 Lines of Code: 134 * 📄 Lines of Documentation: 106 * 📅 Development Period: 2013-03-22 to 2021-11-05 -* 🔥 Recent Activity: 4131.5 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4145.1 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.1.5 (2014-06-22) @@ -1068,7 +1068,7 @@ The tool uses a clever client-server architecture where you run the identical co * 📈 Lines of Code: 493 * 📄 Lines of Documentation: 26 * 📅 Development Period: 2009-09-27 to 2021-11-02 -* 🔥 Recent Activity: 4174.8 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4188.4 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.9.3 (2014-06-14) @@ -1091,7 +1091,7 @@ The architecture is lightweight and Unix-philosophy driven: password databases a * 📈 Lines of Code: 286 * 📄 Lines of Documentation: 144 * 📅 Development Period: 2013-03-22 to 2021-11-05 -* 🔥 Recent Activity: 4179.9 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4193.4 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 0.4.3 (2014-06-16) @@ -1106,6 +1106,27 @@ Implemented in Perl using the JIRA::REST CPAN module, japi supports flexible con --- +### loadbars + +* 💻 Languages: Perl (97.4%), Make (2.6%) +* 📚 Documentation: Text (100.0%) +* 📊 Commits: 527 +* 📈 Lines of Code: 1828 +* 📄 Lines of Documentation: 200 +* 📅 Development Period: 2010-11-05 to 2021-11-03 +* 🔥 Recent Activity: 4213.7 days (avg. age of last 42 commits) +* ⚖️ License: No license found +* 🏷️ Latest Release: 0.7.5 (2014-06-22) + +⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk. + +loadbars: source code repository. + +[View on Codeberg](https://codeberg.org/snonux/loadbars) +[View on GitHub](https://github.com/snonux/loadbars) + +--- + ### perl-poetry * 💻 Languages: Perl (100.0%) @@ -1114,7 +1135,7 @@ Implemented in Perl using the JIRA::REST CPAN module, japi supports flexible con * 📈 Lines of Code: 191 * 📄 Lines of Documentation: 8 * 📅 Development Period: 2014-03-24 to 2014-03-24 -* 🔥 Recent Activity: 4241.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4254.7 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -1135,7 +1156,7 @@ This project exemplifies creative coding where Perl keywords and constructs are * 📊 Commits: 7 * 📈 Lines of Code: 80 * 📅 Development Period: 2011-07-09 to 2015-01-13 -* 🔥 Recent Activity: 4321.2 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4334.7 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -1158,7 +1179,7 @@ The implementation uses a simple CGI script ([index.pl](file:///home/paul/git/gi * 📈 Lines of Code: 124 * 📄 Lines of Documentation: 75 * 📅 Development Period: 2010-11-05 to 2021-11-05 -* 🔥 Recent Activity: 4361.8 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4375.4 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: 1.0.2 (2014-06-22) @@ -1173,34 +1194,13 @@ The implementation is remarkably simple: a shell script wrapper that invokes GNU --- -### loadbars - -* 💻 Languages: Perl (97.4%), Make (2.6%) -* 📚 Documentation: Text (100.0%) -* 📊 Commits: 527 -* 📈 Lines of Code: 1828 -* 📄 Lines of Documentation: 100 -* 📅 Development Period: 2010-11-05 to 2015-05-23 -* 🔥 Recent Activity: 4391.9 days (avg. age of last 42 commits) -* ⚖️ License: No license found -* 🏷️ Latest Release: 0.7.5 (2014-06-22) - -⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk. - -loadbars: source code repository. - -[View on Codeberg](https://codeberg.org/snonux/loadbars) -[View on GitHub](https://github.com/snonux/loadbars) - ---- - ### perldaemon * 💻 Languages: Perl (72.3%), Shell (23.8%), Config (3.9%) * 📊 Commits: 110 * 📈 Lines of Code: 614 * 📅 Development Period: 2011-02-05 to 2022-04-21 -* 🔥 Recent Activity: 4441.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4454.9 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.4 (2022-04-29) @@ -1223,7 +1223,7 @@ The implementation centers around an event loop with configurable intervals that * 📈 Lines of Code: 122 * 📄 Lines of Documentation: 10 * 📅 Development Period: 2011-01-27 to 2014-06-22 -* 🔥 Recent Activity: 4772.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4785.9 days (avg. age of last 42 commits) * ⚖️ License: No license found * 🏷️ Latest Release: v0.2 (2011-01-27) @@ -1246,7 +1246,7 @@ The architecture is remarkably simple: a single AWK script ([index.cgi](file:/// * 📈 Lines of Code: 720 * 📄 Lines of Documentation: 6 * 📅 Development Period: 2008-06-21 to 2021-11-03 -* 🔥 Recent Activity: 4835.1 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 4848.6 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🏷️ Latest Release: v0.3 (2009-02-08) @@ -1263,29 +1263,6 @@ The implementation is minimalistic, consisting of just three main Java classes ( --- -### ychat - -* 💻 Languages: C++ (62.8%), C/C++ (27.1%), HTML (3.1%), Config (2.5%), Perl (1.9%), Shell (1.9%), Make (0.4%), CSS (0.2%) -* 📚 Documentation: Text (100.0%) -* 📊 Commits: 67 -* 📈 Lines of Code: 27104 -* 📄 Lines of Documentation: 109 -* 📅 Development Period: 2008-05-15 to 2014-07-01 -* 🔥 Recent Activity: 5436.1 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. - -yChat is a high-performance, web-based chat server written in C++ that allows users to connect through standard web browsers without requiring special client software. It functions as a standalone HTTP server on a customizable port (default 2000), eliminating the need for Apache or other web servers, and uses only HTML, CSS, and JavaScript on the client side. The project was developed under the GNU GPL and designed for portability across POSIX-compliant systems including Linux, FreeBSD, and other UNIX variants. - -The architecture emphasizes speed and scalability through several key design choices: multi-threaded POSIX implementation with thread pooling to efficiently handle concurrent users, hash maps for O(1) data lookups, and a smart garbage collection system that caches inactive user and room objects for quick reuse. It features MySQL database support for registered users, a modular plugin system through dynamically loadable modules, HTML template-based customization, XML configuration, and an ncurses-based administration interface with CLI support. The codebase can also be converted to yhttpd, a standalone web server subset. Performance benchmarks show it handling over 1000 requests/second while using minimal CPU resources, with the system supporting comprehensive logging, multi-language support, and Apache-compatible log formats. - -[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%) @@ -1294,7 +1271,7 @@ The architecture emphasizes speed and scalability through several key design cho * 📈 Lines of Code: 17380 * 📄 Lines of Documentation: 947 * 📅 Development Period: 2009-02-07 to 2021-05-01 -* 🔥 Recent Activity: 5465.8 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 5479.3 days (avg. age of last 42 commits) * ⚖️ License: GPL-2.0 * 🏷️ Latest Release: v0.1 (2009-02-08) @@ -1313,13 +1290,36 @@ The key feature is its intelligent color-coded event visualization system that h --- +### ychat + +* 💻 Languages: C++ (54.9%), C/C++ (23.0%), Shell (13.8%), Perl (2.5%), HTML (2.5%), Config (2.3%), Make (0.8%), CSS (0.2%) +* 📚 Documentation: Text (100.0%) +* 📊 Commits: 67 +* 📈 Lines of Code: 67884 +* 📄 Lines of Documentation: 127 +* 📅 Development Period: 2008-05-15 to 2014-06-30 +* 🔥 Recent Activity: 5499.6 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. + +yChat is a high-performance, web-based chat server written in C++ that allows users to connect through standard web browsers without requiring special client software. It functions as a standalone HTTP server on a customizable port (default 2000), eliminating the need for Apache or other web servers, and uses only HTML, CSS, and JavaScript on the client side. The project was developed under the GNU GPL and designed for portability across POSIX-compliant systems including Linux, FreeBSD, and other UNIX variants. + +The architecture emphasizes speed and scalability through several key design choices: multi-threaded POSIX implementation with thread pooling to efficiently handle concurrent users, hash maps for O(1) data lookups, and a smart garbage collection system that caches inactive user and room objects for quick reuse. It features MySQL database support for registered users, a modular plugin system through dynamically loadable modules, HTML template-based customization, XML configuration, and an ncurses-based administration interface with CLI support. The codebase can also be converted to yhttpd, a standalone web server subset. Performance benchmarks show it handling over 1000 requests/second while using minimal CPU resources, with the system supporting comprehensive logging, multi-language support, and Apache-compatible log formats. + +[View on Codeberg](https://codeberg.org/snonux/ychat) +[View on GitHub](https://github.com/snonux/ychat) + +--- + ### hsbot * 💻 Languages: Haskell (98.5%), Make (1.5%) * 📊 Commits: 80 * 📈 Lines of Code: 601 * 📅 Development Period: 2009-11-22 to 2011-10-17 -* 🔥 Recent Activity: 5561.4 days (avg. age of last 42 commits) +* 🔥 Recent Activity: 5574.9 days (avg. age of last 42 commits) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -1334,45 +1334,48 @@ The implementation uses a modular design with core components separated into Bas --- -### fype +### vs-sim -* 💻 Languages: C (63.7%), C/C++ (25.3%), HTML (9.2%), Make (1.8%) -* 📚 Documentation: Text (100.0%) -* 📊 Commits: 99 -* 📈 Lines of Code: 6450 -* 📄 Lines of Documentation: 516 -* 📅 Development Period: 2008-05-15 to 2014-06-30 -* 🔥 Recent Activity: 5691.8 days (avg. age of last 42 commits) +* 💻 Languages: Java (98.8%), Shell (0.7%), XML (0.4%) +* 📚 Documentation: LaTeX (98.4%), Text (1.4%), Markdown (0.2%) +* 📊 Commits: 411 +* 📈 Lines of Code: 16303 +* 📄 Lines of Documentation: 2903 +* 📅 Development Period: 2008-05-15 to 2021-05-01 +* 🔥 Recent Activity: 5871.4 days (avg. age of last 42 commits) * ⚖️ License: Custom License -* 🧪 Status: Experimental (no releases yet) +* 🏷️ Latest Release: v1.0 (2008-08-24) ⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk. -Fype is a 32-bit scripting language designed as a fun, AWK-inspired alternative with a simpler syntax. It supports variables with automatic type conversion, functions, loops, control structures, and built-in operations for math, I/O, and system calls. A notable feature is its support for "synonyms" (references/aliases to variables and functions), along with both procedures (using the caller's namespace) and functions (with lexical scoping). The language uses a straightforward syntax with single-character comments (#) and statement-based execution terminated by semicolons. +[](showcase/vs-sim/image-1.jpg) -The implementation uses a simple top-down parser with maximum lookahead of 1, interpreting code simultaneously as it parses, which means syntax errors are only caught at runtime. Written in C and compiled with GCC, it's designed for BSD systems (tested on FreeBSD 7.0) and uses NetBSD Make for building. The project is still unreleased and incomplete, but aims to eventually match AWK's capabilities while potentially adding modern features like function pointers and closures, though explicitly avoiding complexity like OOP, Unicode, or threading. +VS-Sim is a Java-based open source simulator for distributed systems, designed to help students and researchers visualize and understand distributed computing concepts. Based on the roadmap, it appears to support simulating various distributed systems protocols including Lamport and vector clocks for logical time management, and potentially distributed file systems like NFS and AFS. The simulator features event-based simulation, logging capabilities, and a plugin architecture. -[View on Codeberg](https://codeberg.org/snonux/fype) -[View on GitHub](https://github.com/snonux/fype) +The project appears to be currently inactive, with the repository containing minimal source code at present. It was originally developed as part of academic work (referenced as "diplomarbeit.pdf" in the roadmap), likely for teaching distributed systems concepts through interactive simulation and protocol visualization. + +[View on Codeberg](https://codeberg.org/snonux/vs-sim) +[View on GitHub](https://github.com/snonux/vs-sim) --- -### vs-sim +### fype -* 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 411 -* 📈 Lines of Code: 0 -* 📄 Lines of Documentation: 7 -* 📅 Development Period: 2008-05-15 to 2015-05-23 -* 🔥 Recent Activity: 5922.4 days (avg. age of last 42 commits) -* ⚖️ License: No license found -* 🏷️ Latest Release: v1.0 (2008-08-24) +* 💻 Languages: C (71.2%), C/C++ (20.7%), HTML (6.6%), Make (1.5%) +* 📚 Documentation: Text (60.3%), LaTeX (39.7%) +* 📊 Commits: 99 +* 📈 Lines of Code: 8954 +* 📄 Lines of Documentation: 1432 +* 📅 Development Period: 2008-05-15 to 2014-06-30 +* 🔥 Recent Activity: 5961.6 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. -VS-Sim is a Java-based open source simulator for distributed systems, designed to help students and researchers visualize and understand distributed computing concepts. Based on the roadmap, it appears to support simulating various distributed systems protocols including Lamport and vector clocks for logical time management, and potentially distributed file systems like NFS and AFS. The simulator features event-based simulation, logging capabilities, and a plugin architecture. +Fype is a 32-bit scripting language designed as a fun, AWK-inspired alternative with a simpler syntax. It supports variables with automatic type conversion, functions, loops, control structures, and built-in operations for math, I/O, and system calls. A notable feature is its support for "synonyms" (references/aliases to variables and functions), along with both procedures (using the caller's namespace) and functions (with lexical scoping). The language uses a straightforward syntax with single-character comments (#) and statement-based execution terminated by semicolons. -The project appears to be currently inactive, with the repository containing minimal source code at present. It was originally developed as part of academic work (referenced as "diplomarbeit.pdf" in the roadmap), likely for teaching distributed systems concepts through interactive simulation and protocol visualization. +The implementation uses a simple top-down parser with maximum lookahead of 1, interpreting code simultaneously as it parses, which means syntax errors are only caught at runtime. Written in C and compiled with GCC, it's designed for BSD systems (tested on FreeBSD 7.0) and uses NetBSD Make for building. The project is still unreleased and incomplete, but aims to eventually match AWK's capabilities while potentially adding modern features like function pointers and closures, though explicitly avoiding complexity like OOP, Unicode, or threading. -[View on Codeberg](https://codeberg.org/snonux/vs-sim) -[View on GitHub](https://github.com/snonux/vs-sim) +[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 ba4ff7fe..77c8c2e0 100644 --- a/about/showcase/debroid/image-1.png +++ b/about/showcase/debroid/image-1.png @@ -27,12 +27,12 @@ <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-bd97b48d5503.js" /> + <link crossorigin="anonymous" rel="preload" as="script" href="https://github.githubassets.com/assets/global-banner-disable-54e442fb573b.js" /> <link rel="preload" href="https://github.githubassets.com/assets/mona-sans-14595085164a.woff2" as="font" type="font/woff2" crossorigin> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-44e67b0cd5d5.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-b51c2fae25e8.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-cb035ed575b8.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-99e9b1169976.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-44e67b0cd5d5.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-b51c2fae25e8.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-dadcba82130c.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-cdc36145225e.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-0ca195e3b5f3.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-f9fb5556a83f.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-cb035ed575b8.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-99e9b1169976.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-9541c4141757.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-bc604fc65912.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-384776200fd7.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-489c70dedd0a.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-1545a2e9e540.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-4c1792a987c3.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-8e973f836952.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-34b642d57214.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-4bce7af39e21.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-ad512d3e2f3b.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-8e973f836952.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-34b642d57214.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-54be93e666a7.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-8ae7edf5489c.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-84d50df427c0.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-a80873375146.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-4bce7af39e21.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-ad512d3e2f3b.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-d152d6cd6879.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-fa4060c1a9da.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-d7bad0fb00bb.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-4a0107c0f60c.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-045e6b6ac094.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-5de537db5e79.css" /> <style type="text/css"> :root { @@ -52,37 +52,37 @@ - <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_enable_snapshot_keyword","actions_image_version_event","alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","billing_hide_expired_credits","billing_split_pru_skus","billing_split_pru_skus","billing_unfiltered_discounts","client_version_header","codespaces_prebuild_region_target_update","contentful_lp_footnotes","copilot_agent_cli_public_preview","copilot_agent_task_list_v2","copilot_agent_tasks_btn_code_nav","copilot_agent_tasks_btn_code_view","copilot_agent_tasks_btn_code_view_lines","copilot_api_agentic_issue_marshal_yaml","copilot_api_github_draft_update_issue_skill","copilot_chat_agents_empty_state","copilot_chat_attach_multiple_images","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_skip_thread_create","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_deprecation_notice","copilot_features_raycast_logo","copilot_file_block_ref_matching","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_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_insights_column_chart_axis_legibility_fix","copilot_insights_public_preview","copilot_insights_usage_export_ndjson","copilot_no_floating_button","copilot_read_shared_conversation","copilot_security_alert_assignee_options","copilot_spaces_as_attachments","copilot_spaces_ga","copilot_spark_empty_state","copilot_spark_loading_webgl","copilot_spark_progressive_error_handling","copilot_spark_use_billing_headers","copilot_stable_conversation_view","copilot_swe_agent_progress_commands","copilot_swe_agent_use_subagents","copilot_workbench_agent_seed_tool","copilot_workbench_cache","copilot_workbench_preview_analytics","copilot_workbench_skip_repo_on_codespace","copilot_workbench_use_single_prompt","deployment_record_api","direct_to_salesforce","disable_dashboard_universe_2025_private_preview","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","global_search_multi_orgs","hpc_improve_dom_insertion_observer","hyperspace_2025_logged_out_batch_1","hyperspace_nudges_universe25","hyperspace_nudges_universe25_post_event","inp_reduced_threshold","insert_before_patch","issue_fields_report_usage","issues_copilot_cross_repo_assign","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","issues_sticky_sidebar","kb_convert_to_space","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","mcp_registry_install","memex_mwl_filter_field_delimiter","new_traffic_page_banner","open_agent_session_in_vscode_insiders","pinned_issue_fields","primer_react_segmented_control_tooltip","primer_react_unified_portal_root","primer_react_use_styled_react_theming","react_fetch_graphql_validate_base_url","record_sso_banner_metrics","remove_child_patch","repos_insights_remove_new_url","sample_network_conn_type","scheduled_reminders_updated_limits","site_features_copilot_universe","site_homepage_collaborate_video","site_homepage_contentful","site_homepage_eyebrow_banner","site_homepage_universe_animations","site_msbuild_webgl_hero","spark_fix_rename","spark_force_push_after_checkout","spark_improve_image_upload","spark_kv_encocoded_keys","spark_show_data_access_on_publish","spark_sync_repository_after_iteration","viewscreen_sandbox","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"}</script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/high-contrast-cookie-f3788027bd8d.js"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-1cc776af0381.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-468bf7cab607.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_stacktrace-parser_dist_stack-trace-parser_esm_js-node_modules_github_bro-2f4e04-280c10ec004d.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-b4e74adb6411.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-3eee64e5ddf0.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-9ab93471824e.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-ef89d23fcc0a.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-ad3a87b2f0eb.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-754f5b5e9e7e.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-ac788066c220.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-d41270eb61be.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-9ec8c103bf42.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-9e1d42c09c62.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-91c24873dcb9.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-f11c694928ba.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-9012bef51135.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_morphdom_dist_morphdom-e-c1896e-ba47f43192a8.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-9ba0881c72fb.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-8eb9b2209bcd.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_hotkey_dist_index_js-node_modules_github_hydro-analytics-client_d-502318-b6850e6a8b08.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_-7154bb-4c81ec053a86.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/packages_document-metadata_document-metadata_ts-packages_failbot_failbot_ts-06156f7d8d1a.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/packages_updatable-content_updatable-content_ts-38f5e2f7c2a7.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_details-6493f1-cecb020e2bb7.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_throttled-input_ts-047775-cfe8770908d1.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-d8c5bfe37d1d.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-debf59ec3fe9.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-20d6767cecc0.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-d89a4ddd4532.js" defer="defer"></script> + <script type="application/json" id="client-env">{"locale":"en","featureFlags":["a11y_status_checks_ruleset","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_enable_snapshot_keyword","actions_image_version_event","alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","client_version_header","codespaces_prebuild_region_target_update","contentful_lp_footnotes","copilot_agent_cli_public_preview","copilot_agent_task_list_v2","copilot_agent_tasks_btn_code_nav","copilot_agent_tasks_btn_code_view","copilot_agent_tasks_btn_code_view_lines","copilot_agent_tasks_btn_repo","copilot_api_agentic_issue_marshal_yaml","copilot_api_draft_issues_with_dependencies","copilot_api_github_draft_update_issue_skill","copilot_chat_agents_empty_state","copilot_chat_attach_multiple_images","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_raycast_logo","copilot_file_block_ref_matching","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_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_insights_column_chart_axis_legibility_fix","copilot_insights_public_preview","copilot_insights_usage_export_ndjson","copilot_no_floating_button","copilot_org_policy_page_focus_mode","copilot_security_alert_assignee_options","copilot_share_active_subthread","copilot_spaces_as_attachments","copilot_spaces_ga","copilot_spark_empty_state","copilot_spark_loading_webgl","copilot_spark_progressive_error_handling","copilot_spark_use_billing_headers","copilot_stable_conversation_view","copilot_swe_agent_progress_commands","copilot_swe_agent_use_subagents","copilot_workbench_agent_seed_tool","copilot_workbench_agent_user_edit_awareness","copilot_workbench_cache","copilot_workbench_preview_analytics","copilot_workbench_use_single_prompt","deployment_record_api","direct_to_salesforce","disable_dashboard_universe_2025_private_preview","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","fetch_graphql_improved_error_serialization","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","global_search_multi_orgs","hpc_improve_dom_insertion_observer","hyperspace_2025_logged_out_batch_1","hyperspace_nudges_universe25","hyperspace_nudges_universe25_post_event","initial_per_page_pagination_updates","inp_reduced_threshold","insert_before_patch","issue_fields_report_usage","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","issues_report_sidebar_interactions","issues_sticky_sidebar","item_picker_issue_type_tsq_migration","item_picker_label_tsq_migration","item_picker_search_cancellation","kb_convert_to_space","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","mcp_registry_install","memex_default_issue_create_repository","memex_grouped_by_edit_route","memex_mwl_filter_field_delimiter","mission_control_use_body_html","new_traffic_page_banner","open_agent_session_in_vscode_stable","pinned_issue_fields","primer_react_segmented_control_tooltip","projects_assignee_max_limit","react_fetch_graphql_ignore_expected_errors","record_sso_banner_metrics","remove_child_patch","repos_insights_remove_new_url","ruleset_deletion_confirmation","sample_network_conn_type","scheduled_reminders_updated_limits","site_features_copilot_universe","site_homepage_collaborate_video","site_homepage_contentful","site_homepage_eyebrow_banner","site_homepage_universe_animations","site_msbuild_webgl_hero","spark_fix_rename","spark_force_push_after_checkout","spark_improve_image_upload","spark_kv_encocoded_keys","spark_show_data_access_on_publish","spark_sync_repository_after_iteration","viewscreen_sandbox","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"}</script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/high-contrast-cookie-1a011967750c.js"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-c0d7e050063d.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/913-ca2305638c53.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/6488-de87864e6818.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-6bd9f830d320.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/11683-aa3d1ebe6648.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/43784-4652ae97a661.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/4712-809eac2badf7.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/81028-5b8c5e07a4fa.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/74911-6a311b93ee8e.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/91853-b5d2e5602241.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/78143-31968346cf4c.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/52430-c46e2de36eb2.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-5b3e77949adb.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-dcdab6fcfcb8.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/28546-ee41c9313871.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/17688-a9e16fb5ed13.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/2869-a4ba8f17edb3.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/70191-5122bf27bf3e.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/7332-9a7cba14a8ba.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/3200-a7d4487d8022.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/95964-b27baff007f7.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/89708-adb89ad4eedf.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/51519-dc0d4e14166a.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/7534-44b89d9287f7.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/96384-750ef5263abe.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/19718-676a65610616.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-72c6ef216daa.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/48011-5b6f71a93de7.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-eb21f5b0029d.js" defer="defer"></script> <title>Page not found · GitHub · GitHub</title> @@ -92,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:d5e91dbe-6cdd-6b84-df6c-8eec3d8186e8"> + <meta name="fetch-nonce" content="v2:bb232dc1-3f10-0ebb-052b-aafba9b1f13d"> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> - <meta name="request-id" content="ABF0:33AB88:150F4BB:110D954:69080BE8" data-pjax-transient="true"/><meta name="html-safe-nonce" content="98267c91378deb6d42ce9eabdd777741ded35fbb294947bfa8b34114bd7f6dfc" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQkYwOjMzQUI4ODoxNTBGNEJCOjExMEQ5NTQ6NjkwODBCRTgiLCJ2aXNpdG9yX2lkIjoiNjkyMTIwODE3OTk5MzM0OTA5NiIsInJlZ2lvbl9lZGdlIjoiZnJhIiwicmVnaW9uX3JlbmRlciI6ImZyYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="39b38857812d16c5ea2cace4f6d67d2803e20dd6c4b5de76d5beea8d88894bb1" data-pjax-transient="true"/> + <meta name="request-id" content="AB6C:3AE3C8:B142D:8ED54:6919DEDA" data-pjax-transient="true"/><meta name="html-safe-nonce" content="fd352624324617d18655b2cbb7b052cb2c0ca05d68942eb2383912a140648791" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQjZDOjNBRTNDODpCMTQyRDo4RUQ1NDo2OTE5REVEQSIsInZpc2l0b3JfaWQiOiI4MjY3MDA4Mzk4MDUyNjc5Mzg2IiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="4f4a36e3b91e537f2d27be1322ea52d04170eeb69dc75aed188ca331ee5a4456" data-pjax-transient="true"/> @@ -174,10 +174,10 @@ <meta name="expected-hostname" content="github.com"> - <meta http-equiv="x-pjax-version" content="9890aecdee21df493c1ea7e1fcff6415eb8cc0af6ed8c7ce9734fcd5fe65cf1a" data-turbo-track="reload"> + <meta http-equiv="x-pjax-version" content="5b4914921197b3702f1fb352e19c44a5f207b8a04a7db2fdfe0fb288ffea30d4" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="21a43568025709b66240454fc92d4f09335a96863f8ab1c46b4a07f6a5b67102" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="64aa48ca69ddc4d1267863e96c8a5c11e0cb33842931f16e1441b54a84bcc1ad" data-turbo-track="reload"> - <meta http-equiv="x-pjax-js-version" content="b390268bacc1336925a16a0d32843839c3db64b65cf390fb0f19a7510eee3e4f" data-turbo-track="reload"> + <meta http-equiv="x-pjax-js-version" content="a5c4545150b46df9e5c9779d08059514e8f37741d422b687916e43f97a161da7" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> @@ -201,7 +201,7 @@ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> - <meta name="release" content="6f0a50c83824a7b7b3ed4ac8a758c063075591b0"> + <meta name="release" content="22a3c54b60e2433cd9de7a5b3dced0c6838d93c7"> <meta name="ui-target" content="full"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> @@ -216,7 +216,7 @@ </head> - <body class="logged-out env-production page-responsive min-height-full d-flex flex-column" style="word-wrap: break-word;"> + <body class="logged-out env-production page-responsive min-height-full d-flex flex-column" style="word-wrap: break-word;" > <div data-turbo-body class="logged-out env-production page-responsive min-height-full d-flex flex-column" style="word-wrap: break-word;"> @@ -229,8 +229,8 @@ <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.5e7f07b3b8c1e951002c.module.css" /> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.2de9c7d6456a311fce49.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.2ed7297523f7a189873b.module.css" /> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.29aaeaafa90f007c6f61.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" @@ -252,9 +252,9 @@ -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_gsap_index_js-6265bea06e74.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-dc050877d1bf.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-917229b8a853.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/21481-a66c6eab7bbf.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/85110-f7be2f54525a.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-8cc3729f6e8d.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,14 +294,14 @@ </a> <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-e0f7bc70-090b-4f96-9006-ae6e5da6289e" aria-labelledby="tooltip-55026fd4-974b-455f-a70b-74866c4e9b3f" 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-69160ffe-4431-481a-b8db-27d709f5b98b" aria-labelledby="tooltip-710f4eef-2e0b-4960-a6d2-069776df4448" 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-55026fd4-974b-455f-a70b-74866c4e9b3f" for="icon-button-e0f7bc70-090b-4f96-9006-ae6e5da6289e" 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-710f4eef-2e0b-4960-a6d2-069776df4448" for="icon-button-69160ffe-4431-481a-b8db-27d709f5b98b" 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.5e7f07b3b8c1e951002c.module.css" /> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.6c63a6de228d6520804d.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.2ed7297523f7a189873b.module.css" /> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.753d458774a2f782559b.module.css" /> <react-partial partial-name="appearance-settings" @@ -1060,7 +1060,7 @@ -<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="H39UR3xE6Yi7LIQP0cU_3jwFLddyPikFr1RTHWRry1E-6iXZazxdrcmjd1h-EQambNUpSv58tGBvn6BZRBYHCQ" 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="SWFWPA3pETroz3T9J4em4Rb3cXLe15Xxn5A6Bstn3jsRjtDUHUiBIVHHNWqb0MM5lHzM6J2BK9C7zMsnWhGODQ" 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" @@ -1124,7 +1124,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-9e7fb537-2c3c-4ba6-bda4-2c21f3254fca" 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-325fac4a-ee7f-4f0a-823e-44060bef3257" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown @@ -1362,7 +1362,7 @@ tabindex="-1" ></ul> </div> - <div class="FormControl-inlineValidation" id="validation-9e7fb537-2c3c-4ba6-bda4-2c21f3254fca" hidden="hidden"> + <div class="FormControl-inlineValidation" id="validation-325fac4a-ee7f-4f0a-823e-44060bef3257" 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> @@ -1403,7 +1403,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="SprBCrqqI4A207YUc3P+bt4Qi6v/ygZbtkx1Y1yTkizGGaGVM5h21+Q9cSKAdbUBgUqcd2dcZvym6bRMB0kQwQ==" /> + <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="FNP3v92uI/gFjF9ympJKL/vHXCiidd2IyeEMqTOhCGGax+hNz7zsrOt67dm4pH6EnA867OBsNsvOQKYUIGidGA==" /> <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"> @@ -1441,7 +1441,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="n+Eptz32xIX5zE2wImtLCWbTZ5wPmzUaFSnLSfF1WG52LjwVThWPjXd14wNw9VKwi8BFJc2izu2wAjSITtVYCA==" /> + <!-- '"` --><!-- </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="35Amt5WiN1Qjoeo4zF5nkTSEDINwFw6sSQaLuLZOW7Vaov9DR/ahNKa7ouOe1pnaRyu911Lk1+/RXMMl9flr5Q==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> @@ -1459,7 +1459,7 @@ placeholder="github-ruby" required maxlength="50"> - <input type="hidden" data-csrf="true" value="lMKxQqXGdLR8D9by9512UiffHAm99miZtrX63BNPOzlChH0XfX/Aq22IsbMwf2yUskiivEGbPJVZtgJSyn0/Mw==" /> + <input type="hidden" data-csrf="true" value="ehmlQCvuzNS5R/Ycc8rZwJsppFkDNZYcJS82/5wYg9SuRX5+CV1FdA75PsrtyvX5T66GDmLipIUaewSvP4Lj/Q==" /> </auto-check> </div> @@ -1514,7 +1514,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="lhDxKFqYG6JiizKbt3DrM9FOZrjqqKSC+wZTdAvdebg2TLibk+bI596Si11wPNyu4bKi0/2axOH2m9NSjGh48g==" /> <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="ohxdd7CiAzKEBsLH2G+aofIna5lSNwD+79z4EYhgBoMErSLqCQxMfJGwCfnQTzVjtkSPQpGKsjWysoD7yN1Qig==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" /> <label for="login_field"> Username or email address @@ -1536,9 +1536,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_759b" hidden="hidden" /> -<input class="form-control" type="hidden" name="timestamp" value="1762135017095" /> -<input class="form-control" type="hidden" name="timestamp_secret" value="4c46cad419fd18795908de5e87b0ec4a2520a01243eaf94cf05b9fe6cdb98c8d" /> +<input class="form-control" type="text" name="required_field_8a0c" hidden="hidden" /> +<input class="form-control" type="hidden" name="timestamp" value="1763303130489" /> +<input class="form-control" type="hidden" name="timestamp_secret" value="c5ae33b801b3edaaa79e89907595a5031a5cd9fa9bfb0d55577ac58a569c1031" /> <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" /> @@ -1565,14 +1565,14 @@ <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-fee17bea-67fd-434b-a6a7-caffb31a1fda" aria-labelledby="tooltip-2e054135-7ee7-4af9-8a3d-c6777a64a2e4" 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-e1f09dc8-82a4-49ac-981a-9c52aa29c2f2" aria-labelledby="tooltip-c553ac69-f6d2-4897-9bd9-44b722efc6f5" 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-2e054135-7ee7-4af9-8a3d-c6777a64a2e4" for="icon-button-fee17bea-67fd-434b-a6a7-caffb31a1fda" 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-c553ac69-f6d2-4897-9bd9-44b722efc6f5" for="icon-button-e1f09dc8-82a4-49ac-981a-9c52aa29c2f2" 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.5e7f07b3b8c1e951002c.module.css" /> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.6c63a6de228d6520804d.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.2ed7297523f7a189873b.module.css" /> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.753d458774a2f782559b.module.css" /> <react-partial partial-name="appearance-settings" @@ -1606,10 +1606,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-259021ef-897f-41ab-a65b-1079b1e21f1c" aria-labelledby="tooltip-db96fde7-49b6-4d2c-aca0-3acda83c0892" 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-0dceafc0-1e4c-47f9-90a6-2038a03d7c45" aria-labelledby="tooltip-a5bd6334-f9cd-4f5d-bf5a-e5a0cded4731" 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-db96fde7-49b6-4d2c-aca0-3acda83c0892" for="icon-button-259021ef-897f-41ab-a65b-1079b1e21f1c" 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-a5bd6334-f9cd-4f5d-bf5a-e5a0cded4731" for="icon-button-0dceafc0-1e4c-47f9-90a6-2038a03d7c45" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> @@ -1728,7 +1728,7 @@ <h3 class="h5 mt-4 mb-0" id="subscribe-to-newsletter">Subscribe to our developer newsletter</h3> <p class="f5 color-fg-muted mb-3">Get tips, technical guides, and best practices. Twice a month.</p> - <a class="btn-mktg mb-4 btn-muted-mktg" data-analytics-event="{"category":"Subscribe","action":"click to Subscribe","label":"ref_cta:Subscribe;"}" href="https://resources.github.com/newsletter/"> + <a class="btn-mktg mb-4 btn-muted-mktg" data-analytics-event="{"category":"Subscribe","action":"click to Subscribe","label":"ref_cta:Subscribe;"}" href="https://github.com/newsletter"> Subscribe diff --git a/about/technical-books.txt b/about/technical-books.txt index dc02365d..bf3b7a57 100644 --- a/about/technical-books.txt +++ b/about/technical-books.txt @@ -1,3 +1,4 @@ +* Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook * Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook * 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications * The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton diff --git a/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md b/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md index cdf1eb84..25876a33 100644 --- a/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md +++ b/gemfeed/2025-02-01-f3s-kubernetes-with-freebsd-part-3.md @@ -310,7 +310,7 @@ MBATTCHG : 5 Percent I simulated a power outage by removing the power input from the APC. Immediately, the following message appeared on all the nodes: -```` +``` Broadcast Message from root@f0.lan.buetow.org (no tty) at 15:03 EET... diff --git a/gemfeed/2025-02-08-random-weird-things-ii.md b/gemfeed/2025-02-08-random-weird-things-ii.md index 05dd9050..c7f0f68f 100644 --- a/gemfeed/2025-02-08-random-weird-things-ii.md +++ b/gemfeed/2025-02-08-random-weird-things-ii.md @@ -162,7 +162,7 @@ Languages with One-Based Indexing: ```lua arr = {10, 20, 30, 40, 50} print(arr[1]) -- Accessing the first element -```` +``` ```sh ❯ lua foo.lua @@ -1,6 +1,6 @@ # Hello! -> This site was generated at 2025-11-03T04:03:34+02:00 by `Gemtexter` +> This site was generated at 2025-11-18T09:38:47+02:00 by `Gemtexter` Welcome to the foo.zone! diff --git a/uptime-stats.md b/uptime-stats.md index 7598c60f..312ed3f9 100644 --- a/uptime-stats.md +++ b/uptime-stats.md @@ -1,6 +1,6 @@ # My machine uptime stats -> This site was last updated at 2025-11-03T04:03:34+02:00 +> This site was last updated at 2025-11-18T09:38:47+02: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. @@ -22,12 +22,12 @@ Boots is the total number of host boots over the entire lifespan. | Pos | Host | Boots | Last Kernel | +-----+----------------+-------+------------------------------+ | 1. | alphacentauri | 671 | FreeBSD 11.4-RELEASE-p7 | -| 2. | *earth | 210 | Linux 6.17.5-300.fc43.x86_64 | +| 2. | *earth | 212 | Linux 6.17.7-300.fc43.x86_64 | | 3. | mars | 207 | Linux 3.2.0-4-amd64 | | 4. | callisto | 153 | Linux 4.0.4-303.fc22.x86_64 | | 5. | dionysus | 136 | FreeBSD 13.0-RELEASE-p11 | | 6. | tauceti-e | 120 | Linux 3.2.0-4-amd64 | -| 7. | makemake | 76 | Linux 6.9.9-200.fc40.x86_64 | +| 7. | *makemake | 81 | Linux 6.9.9-200.fc40.x86_64 | | 8. | *f2 | 70 | FreeBSD 14.3-RELEASE | | 9. | *f1 | 65 | FreeBSD 14.3-RELEASE | | 10. | *f0 | 62 | FreeBSD 14.3-RELEASE | @@ -36,7 +36,7 @@ Boots is the total number of host boots over the entire lifespan. | 13. | mega15289 | 50 | Darwin 23.4.0 | | 14. | *mega-m3-pro | 50 | Darwin 24.6.0 | | 15. | *fishfinger | 46 | OpenBSD 7.7 | -| 16. | *t450 | 44 | FreeBSD 14.2-RELEASE | +| 16. | t450 | 44 | FreeBSD 14.2-RELEASE | | 17. | *blowfish | 43 | OpenBSD 7.7 | | 18. | phobos | 40 | Linux 3.4.0-CM-g1dd7cdf | | 19. | mega8477 | 40 | Darwin 13.4.0 | @@ -53,7 +53,7 @@ Uptime is the total uptime of a host over the entire lifespan. | Pos | Host | Uptime | Last Kernel | +-----+----------------+-----------------------------+-----------------------------------+ | 1. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 | -| 2. | *earth | 3 years, 10 months, 19 days | Linux 6.17.5-300.fc43.x86_64 | +| 2. | *earth | 3 years, 10 months, 26 days | Linux 6.17.7-300.fc43.x86_64 | | 3. | *blowfish | 3 years, 10 months, 2 days | OpenBSD 7.7 | | 4. | sun | 3 years, 9 months, 26 days | FreeBSD 10.3-RELEASE-p24 | | 5. | uranus | 3 years, 9 months, 5 days | NetBSD 10.1 | @@ -64,11 +64,11 @@ Uptime is the total uptime of a host over the entire lifespan. | 10. | tauceti | 2 years, 3 months, 19 days | Linux 3.2.0-4-amd64 | | 11. | mega15289 | 1 years, 12 months, 17 days | Darwin 23.4.0 | | 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. | *mega-m3-pro | 1 years, 5 months, 20 days | Darwin 24.6.0 | +| 13. | t450 | 1 years, 7 months, 26 days | FreeBSD 14.2-RELEASE | +| 14. | *mega-m3-pro | 1 years, 5 months, 31 days | Darwin 24.6.0 | | 15. | mega8477 | 1 years, 3 months, 25 days | Darwin 13.4.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 | +| 17. | *makemake | 1 years, 3 months, 7 days | Linux 6.9.9-200.fc40.x86_64 | | 18. | tauceti-e | 1 years, 2 months, 20 days | Linux 3.2.0-4-amd64 | | 19. | callisto | 0 years, 10 months, 31 days | Linux 4.0.4-303.fc22.x86_64 | | 20. | alphacentauri | 0 years, 10 months, 28 days | FreeBSD 11.4-RELEASE-p7 | @@ -85,7 +85,7 @@ Score is calculated by combining all other metrics. +-----+----------------+-------+-----------------------------------+ | 1. | uranus | 340 | NetBSD 10.1 | | 2. | vulcan | 275 | Linux 3.10.0-1160.81.1.el7.x86_64 | -| 3. | *earth | 267 | Linux 6.17.5-300.fc43.x86_64 | +| 3. | *earth | 268 | Linux 6.17.7-300.fc43.x86_64 | | 4. | *blowfish | 243 | OpenBSD 7.7 | | 5. | sun | 238 | FreeBSD 10.3-RELEASE-p24 | | 6. | uugrn | 211 | FreeBSD 11.2-RELEASE-p4 | @@ -96,11 +96,11 @@ Score is calculated by combining all other metrics. | 11. | dionysus | 156 | FreeBSD 13.0-RELEASE-p11 | | 12. | mega15289 | 147 | Darwin 23.4.0 | | 13. | tauceti | 141 | Linux 3.2.0-4-amd64 | -| 14. | makemake | 128 | Linux 6.9.9-200.fc40.x86_64 | -| 15. | *t450 | 122 | FreeBSD 14.2-RELEASE | +| 14. | *makemake | 139 | Linux 6.9.9-200.fc40.x86_64 | +| 15. | t450 | 119 | FreeBSD 14.2-RELEASE | | 16. | tauceti-f | 108 | Linux 3.2.0-3-amd64 | -| 17. | tauceti-e | 96 | Linux 3.2.0-4-amd64 | -| 18. | *mega-m3-pro | 94 | Darwin 24.6.0 | +| 17. | *mega-m3-pro | 96 | Darwin 24.6.0 | +| 18. | tauceti-e | 96 | Linux 3.2.0-4-amd64 | | 19. | callisto | 86 | Linux 4.0.4-303.fc22.x86_64 | | 20. | mega8477 | 80 | Darwin 13.4.0 | +-----+----------------+-------+-----------------------------------+ @@ -117,22 +117,22 @@ Downtime is the total downtime of a host over the entire lifespan. | 1. | dionysus | 8 years, 3 months, 16 days | FreeBSD 13.0-RELEASE-p11 | | 2. | uranus | 6 years, 7 months, 31 days | NetBSD 10.1 | | 3. | alphacentauri | 5 years, 11 months, 18 days | FreeBSD 11.4-RELEASE-p7 | -| 4. | makemake | 3 years, 2 months, 2 days | Linux 6.9.9-200.fc40.x86_64 | +| 4. | *makemake | 3 years, 8 months, 11 days | Linux 6.9.9-200.fc40.x86_64 | | 5. | moon | 2 years, 1 months, 1 days | FreeBSD 14.0-RELEASE-p3 | | 6. | callisto | 1 years, 5 months, 15 days | Linux 4.0.4-303.fc22.x86_64 | | 7. | mega15289 | 1 years, 4 months, 24 days | Darwin 23.4.0 | -| 8. | *t450 | 1 years, 2 months, 13 days | FreeBSD 14.2-RELEASE | +| 8. | t450 | 1 years, 2 months, 13 days | FreeBSD 14.2-RELEASE | | 9. | mars | 1 years, 2 months, 10 days | Linux 3.2.0-4-amd64 | | 10. | tauceti-e | 0 years, 12 months, 9 days | Linux 3.2.0-4-amd64 | | 11. | sirius | 0 years, 8 months, 20 days | Linux 2.6.32-042stab111.12 | | 12. | *f0 | 0 years, 8 months, 3 days | FreeBSD 14.3-RELEASE | | 13. | *f2 | 0 years, 8 months, 2 days | FreeBSD 14.3-RELEASE | | 14. | *f1 | 0 years, 8 months, 1 days | FreeBSD 14.3-RELEASE | -| 15. | *earth | 0 years, 6 months, 20 days | Linux 6.17.5-300.fc43.x86_64 | +| 15. | *earth | 0 years, 6 months, 29 days | Linux 6.17.7-300.fc43.x86_64 | | 16. | deimos | 0 years, 5 months, 15 days | Linux 4.4.5-300.fc23.x86_64 | | 17. | joghurt | 0 years, 2 months, 9 days | FreeBSD 7.0-PRERELEASE | | 18. | host0 | 0 years, 2 months, 1 days | FreeBSD 6.2-RELEASE-p5 | -| 19. | *mega-m3-pro | 0 years, 1 months, 14 days | Darwin 24.6.0 | +| 19. | *mega-m3-pro | 0 years, 1 months, 18 days | Darwin 24.6.0 | | 20. | fibonacci | 0 years, 1 months, 11 days | FreeBSD 5.3-RELEASE-p15 | +-----+----------------+-----------------------------+------------------------------+ ``` @@ -148,9 +148,9 @@ Lifespan is the total uptime + the total downtime of a host. | 1. | uranus | 10 years, 4 months, 5 days | NetBSD 10.1 | | 2. | dionysus | 8 years, 6 months, 17 days | FreeBSD 13.0-RELEASE-p11 | | 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. | *earth | 4 years, 4 months, 7 days | Linux 6.17.5-300.fc43.x86_64 | -| 6. | makemake | 4 years, 4 months, 7 days | Linux 6.9.9-200.fc40.x86_64 | +| 4. | *makemake | 4 years, 10 months, 16 days | Linux 6.9.9-200.fc40.x86_64 | +| 5. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 | +| 6. | *earth | 4 years, 4 months, 23 days | Linux 6.17.7-300.fc43.x86_64 | | 7. | *blowfish | 3 years, 10 months, 3 days | OpenBSD 7.7 | | 8. | sun | 3 years, 10 months, 2 days | FreeBSD 10.3-RELEASE-p24 | | 9. | uugrn | 3 years, 5 months, 5 days | FreeBSD 11.2-RELEASE-p4 | @@ -158,7 +158,7 @@ Lifespan is the total uptime + the total downtime of a host. | 11. | *fishfinger | 3 years, 1 months, 30 days | OpenBSD 7.7 | | 12. | deltavega | 3 years, 1 months, 21 days | Linux 3.10.0-1160.11.1.el7.x86_64 | | 13. | pluto | 2 years, 10 months, 30 days | Linux 3.2.0-4-amd64 | -| 14. | *t450 | 2 years, 9 months, 6 days | FreeBSD 14.2-RELEASE | +| 14. | t450 | 2 years, 9 months, 6 days | FreeBSD 14.2-RELEASE | | 15. | moon | 2 years, 4 months, 25 days | FreeBSD 14.0-RELEASE-p3 | | 16. | tauceti | 2 years, 3 months, 22 days | Linux 3.2.0-4-amd64 | | 17. | callisto | 2 years, 3 months, 13 days | Linux 4.0.4-303.fc22.x86_64 | @@ -179,7 +179,7 @@ Boots is the total number of host boots over the entire lifespan. | 1. | FreeBSD 10... | 551 | | 2. | Linux 3... | 550 | | 3. | *FreeBSD 14... | 215 | -| 4. | *Linux 6... | 190 | +| 4. | *Linux 6... | 197 | | 5. | Linux 5... | 162 | | 6. | Linux 4... | 161 | | 7. | FreeBSD 11... | 153 | @@ -194,8 +194,8 @@ Boots is the total number of host boots over the entire lifespan. | 16. | Darwin 15... | 15 | | 17. | Darwin 22... | 12 | | 18. | Darwin 18... | 11 | -| 19. | FreeBSD 6... | 10 | -| 20. | OpenBSD 4... | 10 | +| 19. | OpenBSD 4... | 10 | +| 20. | FreeBSD 6... | 10 | +-----+----------------+-------+ ``` @@ -211,7 +211,7 @@ Uptime is the total uptime of a host over the entire lifespan. | 2. | *OpenBSD 7... | 7 years, 6 months, 29 days | | 3. | FreeBSD 10... | 5 years, 9 months, 9 days | | 4. | Linux 5... | 4 years, 10 months, 21 days | -| 5. | *Linux 6... | 3 years, 1 months, 15 days | +| 5. | *Linux 6... | 3 years, 1 months, 24 days | | 6. | Linux 4... | 2 years, 7 months, 22 days | | 7. | FreeBSD 11... | 2 years, 4 months, 28 days | | 8. | *FreeBSD 14... | 2 years, 3 months, 24 days | @@ -219,7 +219,7 @@ Uptime is the total uptime of a host over the entire lifespan. | 10. | Darwin 13... | 1 years, 3 months, 25 days | | 11. | FreeBSD 6... | 1 years, 3 months, 9 days | | 12. | Darwin 23... | 0 years, 11 months, 9 days | -| 13. | *Darwin 24... | 0 years, 9 months, 21 days | +| 13. | *Darwin 24... | 0 years, 10 months, 2 days | | 14. | OpenBSD 4... | 0 years, 8 months, 12 days | | 15. | Darwin 21... | 0 years, 8 months, 2 days | | 16. | Darwin 18... | 0 years, 7 months, 5 days | @@ -242,7 +242,7 @@ Score is calculated by combining all other metrics. | 2. | *OpenBSD 7... | 484 | | 3. | FreeBSD 10... | 406 | | 4. | Linux 5... | 317 | -| 5. | *Linux 6... | 210 | +| 5. | *Linux 6... | 213 | | 6. | Linux 4... | 175 | | 7. | *FreeBSD 14... | 161 | | 8. | FreeBSD 11... | 159 | @@ -250,14 +250,14 @@ Score is calculated by combining all other metrics. | 10. | Darwin 13... | 80 | | 11. | FreeBSD 6... | 75 | | 12. | Darwin 23... | 56 | -| 13. | *Darwin 24... | 50 | +| 13. | *Darwin 24... | 52 | | 14. | OpenBSD 4... | 39 | | 15. | Darwin 21... | 38 | | 16. | Darwin 18... | 32 | | 17. | Darwin 22... | 30 | | 18. | Darwin 15... | 29 | -| 19. | FreeBSD 5... | 25 | -| 20. | FreeBSD 13... | 25 | +| 19. | FreeBSD 13... | 25 | +| 20. | FreeBSD 5... | 25 | +-----+----------------+-------+ ``` @@ -269,7 +269,7 @@ Boots is the total number of host boots over the entire lifespan. +-----+------------+-------+ | Pos | KernelName | Boots | +-----+------------+-------+ -| 1. | *Linux | 1085 | +| 1. | *Linux | 1092 | | 2. | *FreeBSD | 1080 | | 3. | *Darwin | 155 | | 4. | *OpenBSD | 109 | @@ -285,10 +285,10 @@ Uptime is the total uptime of a host over the entire lifespan. +-----+------------+-----------------------------+ | Pos | KernelName | Uptime | +-----+------------+-----------------------------+ -| 1. | *Linux | 28 years, 2 months, 7 days | +| 1. | *Linux | 28 years, 2 months, 16 days | | 2. | *FreeBSD | 12 years, 2 months, 24 days | | 3. | *OpenBSD | 8 years, 2 months, 7 days | -| 4. | *Darwin | 5 years, 1 months, 8 days | +| 4. | *Darwin | 5 years, 1 months, 19 days | | 5. | NetBSD | 0 years, 1 months, 1 days | +-----+------------+-----------------------------+ ``` @@ -301,10 +301,10 @@ Score is calculated by combining all other metrics. +-----+------------+-------+ | Pos | KernelName | Score | +-----+------------+-------+ -| 1. | *Linux | 1870 | +| 1. | *Linux | 1872 | | 2. | *FreeBSD | 862 | | 3. | *OpenBSD | 523 | -| 4. | *Darwin | 332 | +| 4. | *Darwin | 334 | | 5. | NetBSD | 0 | +-----+------------+-------+ ``` |
