diff options
| author | Paul Buetow <paul@buetow.org> | 2025-10-23 09:27:32 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-10-23 09:27:32 +0300 |
| commit | eb1f782905e1b157160da5e2e2c4052a9f403cd6 (patch) | |
| tree | 923a785fa397d62386386523429f3881cccbc340 | |
| parent | 277fa4195d4a5bb7570ef19d23dd416b4c436a6c (diff) | |
Update content for html
18 files changed, 704 insertions, 420 deletions
diff --git a/about/index.html b/about/index.html index d9a61f01..c4521306 100644 --- a/about/index.html +++ b/about/index.html @@ -43,21 +43,22 @@ <br /> <h2 style='display: inline' id='books'>Books</h2><br /> <br /> -<h3 style='display: inline' id='books-i-am-currently-reading'>Books I am currently reading</h3><br /> +<h3 style='display: inline' id='books-i-am-currently-reading--listening'>Books I am currently reading / listening</h3><br /> <br /> <ul> <li>Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook</li> -<li>Okular; Alastair Reynolds; eBook</li> <li>The Courage to Be Disliked; Ichiro Kishimi and Fumitake Koga; Audiobook</li> +<li>Sapiens: A Brief History of Humankind; Yuval Noah Harari; Audiobook</li> +<li>2005 - Okular; Alastair Reynolds; eBook</li> </ul><br /> -<h3 style='display: inline' id='unread-books-already-in-my-shelf'>Unread books already in my shelf</h3><br /> +<h3 style='display: inline' id='next-books-already-in-my-shelf'>Next books already in my shelf</h3><br /> <br /> <ul> -<li>Inhibitor Phase; Alastair Reynolds; Audiobook</li> -<li>A Fire Upon the Deep (german: Ein Feuer auf der Tiefe); Vernor Vinge; eBook (buecher.de)</li> -<li>Origin: Die Entdecknug (german); Andreas Brandhorst; eBook (buecher.de)</li> -<li>Origin: Die Erweckung (german); Joschua Tree; eBook (buecher.de)</li> -<li>Origin: Die Erloesung (german); Brandon Q. Morris; eBook (buecher.de)</li> +<li>1992 - A Fire Upon the Deep (german: Ein Feuer auf der Tiefe); Vernor Vinge; eBook (buecher.de)</li> +<li>2025 - Origin: Die Entdecknug (german); Andreas Brandhorst; eBook (buecher.de)</li> +<li>2025 - Origin: Die Erweckung (german); Joschua Tree; eBook (buecher.de)</li> +<li>2025 - Origin: Die Erloesung (german); Brandon Q. Morris; eBook (buecher.de)</li> +<li>2021 - Inhibitor Phase; Alastair Reynolds; Audiobook</li> </ul><br /> <h3 style='display: inline' id='books-on-my-wishlist'>Books on my wishlist</h3><br /> <br /> diff --git a/about/resources.html b/about/resources.html index 8dce21b4..ec15e175 100644 --- a/about/resources.html +++ b/about/resources.html @@ -50,53 +50,53 @@ <span>In random order:</span><br /> <br /> <ul> -<li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li> -<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li> -<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li> -<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li> -<li>The Docker Book; James Turnbull; Kindle</li> -<li>Data Science at the Command Line; Jeroen Janssens; O'Reilly</li> -<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> -<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> -<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li> -<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> -<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly</li> -<li>DNS and BIND; Cricket Liu; O'Reilly</li> -<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li> <li>Ultimate Go Notebook; Bill Kennedy</li> -<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li> -<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li> -<li>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</li> -<li>Raku Recipes; J.J. Merelo; Apress</li> -<li>Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly</li> -<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> +<li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li> +<li>Developing Games in Java; David Brackeen and others...; New Riders</li> <li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly</li> -<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li> -<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> -<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li> +<li>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</li> +<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li> +<li>The Docker Book; James Turnbull; Kindle</li> +<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> +<li>Funktionale Programmierung; Peter Pepper; Springer</li> +<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> +<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> <li>Java ist auch eine Insel; Christian Ullenboom; </li> +<li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li> +<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li> +<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> +<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> +<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> <li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li> +<li>Raku Fundamentals; Moritz Lenz; Apress</li> +<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li> +<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li> <li>21st Century C: C Tips from the New School; Ben Klemens; O'Reilly</li> -<li>Effective awk programming; Arnold Robbins; O'Reilly</li> +<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> +<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li> <li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly</li> -<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> -<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li> +<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li> +<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly</li> +<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li> +<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> +<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li> <li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li> -<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li> -<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li> -<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> +<li>Effective awk programming; Arnold Robbins; O'Reilly</li> +<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li> +<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li> +<li>Data Science at the Command Line; Jeroen Janssens; O'Reilly</li> +<li>DNS and BIND; Cricket Liu; O'Reilly</li> +<li>Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly</li> +<li>Site Reliability Engineering; How Google runs production systems; O'Reilly</li> +<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li> <li>C++ Programming Language; Bjarne Stroustrup;</li> +<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> +<li>Leanring eBPF; Liz Rice; O'Reilly</li> +<li>Raku Recipes; J.J. Merelo; Apress</li> +<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li> +<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li> <li>Modern Perl; Chromatic ; Onyx Neon Press</li> <li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li> -<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> -<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li> -<li>Funktionale Programmierung; Peter Pepper; Springer</li> -<li>Raku Fundamentals; Moritz Lenz; Apress</li> -<li>Leanring eBPF; Liz Rice; O'Reilly</li> -<li>Developing Games in Java; David Brackeen and others...; New Riders</li> -<li>Site Reliability Engineering; How Google runs production systems; O'Reilly</li> -<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> -<li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li> </ul><br /> <h2 style='display: inline' id='technical-references'>Technical references</h2><br /> <br /> @@ -104,12 +104,12 @@ <br /> <ul> <li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly</li> +<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> +<li>The Linux Programming Interface; Michael Kerrisk; No Starch Press </li> <li>Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly</li> -<li>Relayd and Httpd Mastery; Michael W Lucas</li> <li>Implementing Service Level Objectives; Alex Hidalgo; O'Reilly</li> <li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li> -<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> -<li>The Linux Programming Interface; Michael Kerrisk; No Starch Press </li> +<li>Relayd and Httpd Mastery; Michael W Lucas</li> <li>Go: Design Patterns for Real-World Projects; Mat Ryer; Packt</li> </ul><br /> <h2 style='display: inline' id='self-development-and-soft-skills-books'>Self-development and soft-skills books</h2><br /> @@ -117,43 +117,43 @@ <span>In random order:</span><br /> <br /> <ul> -<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</li> -<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li> +<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> +<li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li> +<li>Deep Work; Cal Newport; Piatkus</li> +<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> <li>Soft Skills; John Sommez; Manning Publications</li> -<li>Ultralearning; Anna Laurent; Self-published via Amazon</li> -<li>Eat That Frog; Brian Tracy</li> -<li>Atomic Habits; James Clear; Random House Business</li> -<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook</li> <li>The Software Engineer's Guidebook: Navigating senior, tech lead, and staff engineer positions at tech companies and startups; Gergely Orosz; Audiobook </li> -<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK</li> -<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li> -<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li> -<li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li> -<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> -<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li> -<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> -<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> -<li>The Power of Now; Eckhard Tolle; Yellow Kite</li> -<li>Ultralearning; Scott Young; Thorsons</li> -<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> <li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li> -<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li> -<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li> -<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> -<li>Deep Work; Cal Newport; Piatkus</li> -<li>Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne</li> <li>Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook</li> -<li>Meditation for Mortals, Oliver Burkeman, Audiobook</li> <li>Getting Things Done; David Allen</li> -<li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li> +<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> +<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</li> +<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK</li> +<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li> <li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> -<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li> -<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li> -<li>Slow Productivity; Cal Newport; Penguin Random House</li> +<li>Eat That Frog; Brian Tracy</li> +<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li> +<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li> +<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li> +<li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li> <li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li> <li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li> -<li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li> +<li>Slow Productivity; Cal Newport; Penguin Random House</li> +<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook</li> +<li>Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne</li> +<li>Ultralearning; Scott Young; Thorsons</li> +<li>Meditation for Mortals, Oliver Burkeman, Audiobook</li> +<li>Ultralearning; Anna Laurent; Self-published via Amazon</li> +<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li> +<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li> +<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> <li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li> +<li>Atomic Habits; James Clear; Random House Business</li> +<li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li> +<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> +<li>The Power of Now; Eckhard Tolle; Yellow Kite</li> +<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li> +<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li> </ul><br /> <a class='textlink' href='../notes/index.html'>Here are notes of mine for some of the books</a><br /> <br /> @@ -163,30 +163,30 @@ <br /> <ul> <li>Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online</li> +<li>MySQL Deep Dive Workshop; 2-day on-site training</li> +<li>Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon</li> +<li>Developing IaC with Terraform (with Live Lessons); O'Reilly Online</li> <li>The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online</li> -<li>Apache Tomcat Best Practises; 3-day on-site training</li> <li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li> -<li>Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon</li> -<li>Scripting Vim; Damian Conway; O'Reilly Online</li> -<li>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> -<li>MySQL Deep Dive Workshop; 2-day on-site training</li> -<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li> <li>Protocol buffers; O'Reilly Online</li> -<li>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)</li> -<li>Functional programming lecture; Remote University of Hagen</li> -<li>The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online</li> <li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li> -<li>Developing IaC with Terraform (with Live Lessons); O'Reilly Online</li> +<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li> +<li>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> +<li>Apache Tomcat Best Practises; 3-day on-site training</li> +<li>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)</li> <li>AWS Immersion Day; Amazon; 1-day interactive online training </li> +<li>The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online</li> +<li>Functional programming lecture; Remote University of Hagen</li> +<li>Scripting Vim; Damian Conway; O'Reilly Online</li> </ul><br /> <h2 style='display: inline' id='technical-guides'>Technical guides</h2><br /> <br /> <span>These are not whole books, but guides (smaller or larger) which I found very useful. in random order:</span><br /> <br /> <ul> -<li>Raku Guide at https://raku.guide </li> -<li>How CPUs work at https://cpu.land</li> <li>Advanced Bash-Scripting Guide </li> +<li>How CPUs work at https://cpu.land</li> +<li>Raku Guide at https://raku.guide </li> </ul><br /> <h2 style='display: inline' id='podcasts'>Podcasts</h2><br /> <br /> @@ -196,20 +196,20 @@ <br /> <ul> <li>BSD Now [BSD]</li> -<li>Wednesday Wisdom</li> -<li>The Pragmatic Engineer Podcast</li> -<li>Maintainable</li> <li>Fallthrough [Golang]</li> <li>The Changelog Podcast(s)</li> -<li>Fork Around And Find Out</li> +<li>Modern Mentor</li> +<li>The Pragmatic Engineer Podcast</li> <li>Pratical AI</li> -<li>Hidden Brain</li> -<li>Dev Interrupted</li> +<li>Maintainable</li> <li>Deep Questions with Cal Newport</li> -<li>Cup o' Go [Golang]</li> <li>The ProdCast (Google SRE Podcast)</li> -<li>Modern Mentor</li> +<li>Dev Interrupted</li> <li>Backend Banter</li> +<li>Wednesday Wisdom</li> +<li>Hidden Brain</li> +<li>Fork Around And Find Out</li> +<li>Cup o' Go [Golang]</li> </ul><br /> <h3 style='display: inline' id='podcasts-i-liked'>Podcasts I liked</h3><br /> <br /> @@ -217,10 +217,10 @@ <br /> <ul> <li>Go Time (predecessor of fallthrough)</li> +<li>Ship It (predecessor of Fork Around And Find Out)</li> +<li>FLOSS weekly</li> <li>Modern Mentor</li> <li>Java Pub House</li> -<li>FLOSS weekly</li> -<li>Ship It (predecessor of Fork Around And Find Out)</li> <li>CRE: Chaosradio Express [german]</li> </ul><br /> <h2 style='display: inline' id='newsletters-i-like'>Newsletters I like</h2><br /> @@ -228,18 +228,18 @@ <span>This is a mix of tech and non-tech newsletters I am subscribed to. In random order:</span><br /> <br /> <ul> -<li>Ruby Weekly</li> -<li>VK Newsletter</li> -<li>The Valuable Dev</li> <li>Applied Go Weekly Newsletter</li> -<li>The Imperfectionist</li> <li>Monospace Mentor</li> <li>Changelog News</li> -<li>Register Spill</li> -<li>The Pragmatic Engineer</li> +<li>The Imperfectionist</li> +<li>Ruby Weekly</li> +<li>VK Newsletter</li> <li>byteSizeGo</li> -<li>Andreas Brandhorst Newsletter (Sci-Fi author)</li> +<li>The Pragmatic Engineer</li> +<li>The Valuable Dev</li> <li>Golang Weekly</li> +<li>Register Spill</li> +<li>Andreas Brandhorst Newsletter (Sci-Fi author)</li> </ul><br /> <h2 style='display: inline' id='magazines-i-liked'>Magazines I like(d)</h2><br /> <br /> @@ -247,9 +247,9 @@ <br /> <ul> <li>Linux Magazine</li> -<li>Linux User</li> -<li>freeX (not published anymore)</li> <li>LWN (online only)</li> +<li>freeX (not published anymore)</li> +<li>Linux User</li> </ul><br /> <h1 style='display: inline' id='formal-education'>Formal education</h1><br /> <br /> diff --git a/about/showcase.html b/about/showcase.html index 5a6823bb..faa340b0 100644 --- a/about/showcase.html +++ b/about/showcase.html @@ -13,7 +13,7 @@ </p> <h1 style='display: inline' id='project-showcase'>Project Showcase</h1><br /> <br /> -<span>Generated on: 2025-10-14</span><br /> +<span>Generated on: 2025-10-23</span><br /> <br /> <span>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.</span><br /> <br /> @@ -25,9 +25,8 @@ <li>⇢ <a href='#projects'>Projects</a></li> <li>⇢ ⇢ <a href='#yoga'>yoga</a></li> <li><a href='#yoga'>Yoga</a></li> -<li>⇢ ⇢ <a href='#hexai'>hexai</a></li> <li>⇢ ⇢ <a href='#conf'>conf</a></li> -<li>⇢ ⇢ <a href='#foozone'>foo.zone</a></li> +<li>⇢ ⇢ <a href='#hexai'>hexai</a></li> <li>⇢ ⇢ <a href='#foostats'>foostats</a></li> <li>⇢ ⇢ <a href='#gitsyncer'>gitsyncer</a></li> <li>⇢ ⇢ <a href='#totalrecall'>totalrecall</a></li> @@ -46,14 +45,15 @@ <li>⇢ ⇢ <a href='#terraform'>terraform</a></li> <li>⇢ ⇢ <a href='#gogios'>gogios</a></li> <li>⇢ ⇢ <a href='#gorum'>gorum</a></li> +<li>⇢ ⇢ <a href='#guprecords'>guprecords</a></li> <li>⇢ ⇢ <a href='#randomjournalpage'>randomjournalpage</a></li> <li>⇢ ⇢ <a href='#sway-autorotate'>sway-autorotate</a></li> -<li>⇢ ⇢ <a href='#photoalbum'>photoalbum</a></li> <li>⇢ ⇢ <a href='#geheim'>geheim</a></li> <li>⇢ ⇢ <a href='#algorithms'>algorithms</a></li> +<li>⇢ ⇢ <a href='#foozone'>foo.zone</a></li> <li>⇢ ⇢ <a href='#perl-c-fibonacci'>perl-c-fibonacci</a></li> -<li>⇢ ⇢ <a href='#guprecords'>guprecords</a></li> <li>⇢ ⇢ <a href='#ioriot'>ioriot</a></li> +<li>⇢ ⇢ <a href='#photoalbum'>photoalbum</a></li> <li>⇢ ⇢ <a href='#staticfarm-apache-handlers'>staticfarm-apache-handlers</a></li> <li>⇢ ⇢ <a href='#dyndns'>dyndns</a></li> <li>⇢ ⇢ <a href='#mon'>mon</a></li> @@ -66,32 +66,32 @@ <li>⇢ ⇢ <a href='#template'>template</a></li> <li>⇢ ⇢ <a href='#muttdelay'>muttdelay</a></li> <li>⇢ ⇢ <a href='#netdiff'>netdiff</a></li> +<li>⇢ ⇢ <a href='#pwgrep'>pwgrep</a></li> <li>⇢ ⇢ <a href='#japi'>japi</a></li> <li>⇢ ⇢ <a href='#perl-poetry'>perl-poetry</a></li> <li>⇢ ⇢ <a href='#ipv6test'>ipv6test</a></li> <li>⇢ ⇢ <a href='#cpuinfo'>cpuinfo</a></li> <li>⇢ ⇢ <a href='#loadbars'>loadbars</a></li> -<li>⇢ ⇢ <a href='#pwgrep'>pwgrep</a></li> <li>⇢ ⇢ <a href='#perldaemon'>perldaemon</a></li> <li>⇢ ⇢ <a href='#awksite'>awksite</a></li> <li>⇢ ⇢ <a href='#jsmstrade'>jsmstrade</a></li> -<li>⇢ ⇢ <a href='#ychat'>ychat</a></li> <li>⇢ ⇢ <a href='#netcalendar'>netcalendar</a></li> +<li>⇢ ⇢ <a href='#ychat'>ychat</a></li> <li>⇢ ⇢ <a href='#hsbot'>hsbot</a></li> -<li>⇢ ⇢ <a href='#vs-sim'>vs-sim</a></li> <li>⇢ ⇢ <a href='#fype'>fype</a></li> +<li>⇢ ⇢ <a href='#vs-sim'>vs-sim</a></li> </ul><br /> <h2 style='display: inline' id='overall-statistics'>Overall Statistics</h2><br /> <br /> <ul> <li>📦 Total Projects: 56</li> -<li>📊 Total Commits: 11,220</li> -<li>📈 Total Lines of Code: 274,377</li> -<li>📄 Total Lines of Documentation: 52,861</li> -<li>💻 Languages: Go (31.1%), Java (14.7%), C++ (13.5%), Shell (7.8%), C/C++ (7.4%), C (7.0%), Perl (6.5%), HTML (4.6%), Config (1.7%), Ruby (1.0%), HCL (1.0%), Make (0.7%), YAML (0.6%), Python (0.6%), CSS (0.5%), JSON (0.3%), Raku (0.3%), XML (0.2%), Haskell (0.2%), TOML (0.1%)</li> -<li>📚 Documentation: Markdown (76.7%), Text (22.2%), LaTeX (1.1%)</li> +<li>📊 Total Commits: 11,247</li> +<li>📈 Total Lines of Code: 211,790</li> +<li>📄 Total Lines of Documentation: 23,887</li> +<li>💻 Languages: Go (40.3%), Java (19.1%), C (9.6%), Perl (7.6%), HTML (5.2%), C/C++ (3.9%), Shell (3.3%), C++ (2.4%), Config (1.4%), Ruby (1.3%), HCL (1.3%), YAML (0.9%), Python (0.8%), Make (0.7%), CSS (0.6%), Raku (0.4%), JSON (0.4%), XML (0.3%), Haskell (0.3%), TOML (0.1%)</li> +<li>📚 Documentation: Text (50.2%), Markdown (47.7%), LaTeX (2.1%)</li> <li>🎵 Vibe-Coded Projects: 4 out of 56 (7.1%)</li> -<li>🤖 AI-Assisted Projects (including vibe-coded): 11 out of 56 (19.6% AI-assisted, 80.4% human-only)</li> +<li>🤖 AI-Assisted Projects (including vibe-coded): 10 out of 56 (17.9% AI-assisted, 82.1% human-only)</li> <li>🚀 Release Status: 36 released, 20 experimental (64.3% with releases, 35.7% experimental)</li> </ul><br /> <h2 style='display: inline' id='projects'>Projects</h2><br /> @@ -105,7 +105,7 @@ <li>📈 Lines of Code: 3376</li> <li>📄 Lines of Documentation: 82</li> <li>📅 Development Period: 2025-10-01 to 2025-10-12</li> -<li>🔥 Recent Activity: 8.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 17.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v0.2.5 (2025-10-12)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -120,42 +120,16 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='hexai'>hexai</h3><br /> -<br /> -<ul> -<li>💻 Languages: Go (69.5%), HTML (30.5%)</li> -<li>📚 Documentation: Markdown (100.0%)</li> -<li>📊 Commits: 238</li> -<li>📈 Lines of Code: 26565</li> -<li>📄 Lines of Documentation: 564</li> -<li>📅 Development Period: 2025-08-01 to 2025-10-04</li> -<li>🔥 Recent Activity: 21.7 days (avg. age of last 42 commits)</li> -<li>⚖️ License: No license found</li> -<li>🏷️ Latest Release: v0.15.1 (2025-10-03)</li> -<li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> -</ul><br /> -<br /> -<a href='showcase/hexai/image-1.png'><img alt='hexai screenshot' title='hexai screenshot' src='showcase/hexai/image-1.png' /></a><br /> -<br /> -<span>Hexai is an AI-powered extension designed to enhance the Helix Editor by integrating advanced code assistance features through Language Server Protocol (LSP) and large language models (LLMs). Its core capabilities include LSP-based code auto-completion, code actions, and an in-editor chat interface that allows users to interact directly with AI models for coding help and suggestions. Additionally, Hexai provides a standalone command-line tool for interacting with LLMs outside the editor. It supports multiple AI backends, including OpenAI, GitHub Copilot, and Ollama, making it flexible for various user preferences and workflows.</span><br /> -<br /> -<span>The project is implemented primarily in Go and uses Mage as its build and task automation tool. The architecture consists of two main binaries: one for general LLM interaction and another for LSP integration with the editor. Hexai communicates with LLM providers via their APIs, relaying code context and user queries to generate intelligent responses or code completions. The modular design allows for easy configuration and extension, and while it is tailored for Helix, it may work with other editors that support LSP. This makes Hexai a valuable tool for developers seeking AI-assisted productivity directly within their coding environment.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/hexai'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/hexai'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='conf'>conf</h3><br /> <br /> <ul> -<li>💻 Languages: Perl (31.5%), Shell (23.2%), YAML (22.9%), Config (5.6%), CSS (5.4%), TOML (4.8%), Ruby (4.1%), Lua (1.2%), Docker (0.6%), JSON (0.5%)</li> -<li>📚 Documentation: Text (73.7%), Markdown (26.3%)</li> -<li>📊 Commits: 1008</li> -<li>📈 Lines of Code: 6055</li> -<li>📄 Lines of Documentation: 1356</li> -<li>📅 Development Period: 2021-12-28 to 2025-10-13</li> -<li>🔥 Recent Activity: 26.4 days (avg. age of last 42 commits)</li> +<li>💻 Languages: Perl (30.9%), YAML (24.4%), Shell (22.8%), Config (5.4%), CSS (5.3%), TOML (4.7%), Ruby (4.1%), Lua (1.1%), Docker (0.6%), JSON (0.5%)</li> +<li>📚 Documentation: Text (69.1%), Markdown (30.9%)</li> +<li>📊 Commits: 1018</li> +<li>📈 Lines of Code: 6185</li> +<li>📄 Lines of Documentation: 1445</li> +<li>📅 Development Period: 2021-12-28 to 2025-10-22</li> +<li>🔥 Recent Activity: 24.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -168,27 +142,29 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='foozone'>foo.zone</h3><br /> +<h3 style='display: inline' id='hexai'>hexai</h3><br /> <br /> <ul> -<li>💻 Languages: Shell (71.8%), Go (27.8%), YAML (0.4%)</li> -<li>📚 Documentation: Markdown (99.5%), Text (0.5%)</li> -<li>📊 Commits: 3131</li> -<li>📈 Lines of Code: 227</li> -<li>📄 Lines of Documentation: 29792</li> -<li>📅 Development Period: 2021-04-29 to 2025-10-12</li> -<li>🔥 Recent Activity: 43.5 days (avg. age of last 42 commits)</li> +<li>💻 Languages: Go (69.5%), HTML (30.5%)</li> +<li>📚 Documentation: Markdown (100.0%)</li> +<li>📊 Commits: 238</li> +<li>📈 Lines of Code: 26565</li> +<li>📄 Lines of Documentation: 564</li> +<li>📅 Development Period: 2025-08-01 to 2025-10-04</li> +<li>🔥 Recent Activity: 30.1 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> -<li>🧪 Status: Experimental (no releases yet)</li> +<li>🏷️ Latest Release: v0.15.1 (2025-10-03)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> </ul><br /> <br /> -<span>This project hosts the static files for the foo.zone website, which is accessible via both the Gemini protocol (gemini://foo.zone) and the web (https://foo.zone). The repository is organized with separate branches for each content format—such as Gemtext, HTML, and Markdown—allowing the site to be served in multiple formats tailored to different protocols and user preferences. This structure makes it easy to maintain and update content across platforms, ensuring consistency and flexibility.</span><br /> +<a href='showcase/hexai/image-1.png'><img alt='hexai screenshot' title='hexai screenshot' src='showcase/hexai/image-1.png' /></a><br /> <br /> -<span>The site is maintained using a suite of open-source tools, including Neovim for editing, GNU Bash for scripting, and ShellCheck for shell script linting. It is deployed on OpenBSD, utilizing the vger Gemini server (managed via relayd and inetd) for Gemini content and the native httpd server for the HTML site. Source code and hosting are managed through Codeberg. The static content is generated with the help of the gemtexter tool, which streamlines the process of converting and managing content in various formats. This architecture emphasizes simplicity, security, and portability, making it a robust solution for multi-protocol static site hosting.</span><br /> +<span>Hexai is an AI-powered extension designed to enhance the Helix Editor by integrating advanced code assistance features through Language Server Protocol (LSP) and large language models (LLMs). Its core capabilities include LSP-based code auto-completion, code actions, and an in-editor chat interface that allows users to interact directly with AI models for coding help and suggestions. Additionally, Hexai provides a standalone command-line tool for interacting with LLMs outside the editor. It supports multiple AI backends, including OpenAI, GitHub Copilot, and Ollama, making it flexible for various user preferences and workflows.</span><br /> <br /> -<a class='textlink' href='https://codeberg.org/snonux/foo.zone'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/foo.zone'>View on GitHub</a><br /> +<span>The project is implemented primarily in Go and uses Mage as its build and task automation tool. The architecture consists of two main binaries: one for general LLM interaction and another for LSP integration with the editor. Hexai communicates with LLM providers via their APIs, relaying code context and user queries to generate intelligent responses or code completions. The modular design allows for easy configuration and extension, and while it is tailored for Helix, it may work with other editors that support LSP. This makes Hexai a valuable tool for developers seeking AI-assisted productivity directly within their coding environment.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/hexai'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/hexai'>View on GitHub</a><br /> <br /> <span>---</span><br /> <br /> @@ -197,13 +173,13 @@ <ul> <li>💻 Languages: Perl (100.0%)</li> <li>📚 Documentation: Markdown (54.4%), Text (45.6%)</li> -<li>📊 Commits: 96</li> -<li>📈 Lines of Code: 1910</li> +<li>📊 Commits: 97</li> +<li>📈 Lines of Code: 1902</li> <li>📄 Lines of Documentation: 421</li> -<li>📅 Development Period: 2023-01-02 to 2025-09-28</li> -<li>🔥 Recent Activity: 59.2 days (avg. age of last 42 commits)</li> +<li>📅 Development Period: 2023-01-02 to 2025-10-21</li> +<li>🔥 Recent Activity: 64.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> -<li>🏷️ Latest Release: v0.1.0 (2025-07-12)</li> +<li>🏷️ Latest Release: v0.2.0 (2025-10-21)</li> </ul><br /> <br /> <span>**foostats** is a privacy-focused web analytics tool designed specifically for OpenBSD environments, with support for both traditional web (HTTP/HTTPS) and Gemini protocol logs. Its primary function is to generate anonymous, comprehensive site statistics for the foo.zone ecosystem and similar sites, while strictly preserving visitor privacy. This is achieved by hashing all IP addresses with SHA3-512 before storage, ensuring no personally identifiable information is retained. The tool provides detailed daily, monthly, and summary reports in Gemtext format, tracks feed subscribers, and includes robust filtering to block and log suspicious requests based on configurable patterns.</span><br /> @@ -224,7 +200,7 @@ <li>📈 Lines of Code: 10036</li> <li>📄 Lines of Documentation: 2433</li> <li>📅 Development Period: 2025-06-23 to 2025-09-08</li> -<li>🔥 Recent Activity: 81.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 90.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: BSD-2-Clause</li> <li>🏷️ Latest Release: v0.9.2 (2025-09-08)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -248,7 +224,7 @@ <li>📈 Lines of Code: 12003</li> <li>📄 Lines of Documentation: 361</li> <li>📅 Development Period: 2025-07-14 to 2025-08-02</li> -<li>🔥 Recent Activity: 84.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 92.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> <li>🏷️ Latest Release: v0.7.5 (2025-08-02)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -274,13 +250,13 @@ <ul> <li>💻 Languages: Go (100.0%)</li> <li>📚 Documentation: Markdown (100.0%)</li> -<li>📊 Commits: 25</li> -<li>📈 Lines of Code: 929</li> -<li>📄 Lines of Documentation: 80</li> -<li>📅 Development Period: 2025-06-25 to 2025-09-29</li> -<li>🔥 Recent Activity: 93.6 days (avg. age of last 42 commits)</li> +<li>📊 Commits: 27</li> +<li>📈 Lines of Code: 931</li> +<li>📄 Lines of Documentation: 81</li> +<li>📅 Development Period: 2025-06-25 to 2025-10-18</li> +<li>🔥 Recent Activity: 94.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: BSD-2-Clause</li> -<li>🏷️ Latest Release: v0.1.1 (2025-09-29)</li> +<li>🏷️ Latest Release: v0.2.0 (2025-10-18)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> </ul><br /> <br /> @@ -304,7 +280,7 @@ <li>📈 Lines of Code: 6168</li> <li>📄 Lines of Documentation: 162</li> <li>📅 Development Period: 2025-06-19 to 2025-10-05</li> -<li>🔥 Recent Activity: 107.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 116.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: BSD-2-Clause</li> <li>🏷️ Latest Release: v0.9.3 (2025-10-05)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -332,7 +308,7 @@ <li>📈 Lines of Code: 13072</li> <li>📄 Lines of Documentation: 680</li> <li>📅 Development Period: 2024-01-18 to 2025-10-09</li> -<li>🔥 Recent Activity: 122.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 131.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -360,7 +336,7 @@ <li>📈 Lines of Code: 4102</li> <li>📄 Lines of Documentation: 357</li> <li>📅 Development Period: 2024-05-04 to 2025-09-24</li> -<li>🔥 Recent Activity: 146.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 154.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.2.0 (2025-09-24)</li> </ul><br /> @@ -387,7 +363,7 @@ <li>📈 Lines of Code: 20091</li> <li>📄 Lines of Documentation: 5674</li> <li>📅 Development Period: 2020-01-09 to 2025-06-20</li> -<li>🔥 Recent Activity: 149.7 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 158.1 days (avg. age of last 42 commits)</li> <li>⚖️ License: Apache-2.0</li> <li>🏷️ Latest Release: v4.3.3 (2024-08-23)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -415,7 +391,7 @@ <li>📈 Lines of Code: 396</li> <li>📄 Lines of Documentation: 24</li> <li>📅 Development Period: 2025-04-18 to 2025-05-11</li> -<li>🔥 Recent Activity: 169.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 177.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.0.0 (2025-05-11)</li> </ul><br /> @@ -438,7 +414,7 @@ <li>📈 Lines of Code: 25762</li> <li>📄 Lines of Documentation: 3101</li> <li>📅 Development Period: 2008-05-15 to 2025-06-27</li> -<li>🔥 Recent Activity: 182.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 190.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -464,7 +440,7 @@ <li>📈 Lines of Code: 33</li> <li>📄 Lines of Documentation: 3</li> <li>📅 Development Period: 2025-04-03 to 2025-04-03</li> -<li>🔥 Recent Activity: 194.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 203.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -487,7 +463,7 @@ <li>📈 Lines of Code: 1373</li> <li>📄 Lines of Documentation: 48</li> <li>📅 Development Period: 2024-12-05 to 2025-02-28</li> -<li>🔥 Recent Activity: 235.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 244.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -510,7 +486,7 @@ <li>📈 Lines of Code: 2285</li> <li>📄 Lines of Documentation: 1180</li> <li>📅 Development Period: 2021-05-21 to 2025-08-31</li> -<li>🔥 Recent Activity: 281.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 289.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: GPL-3.0</li> <li>🏷️ Latest Release: 3.0.0 (2024-10-01)</li> </ul><br /> @@ -535,7 +511,7 @@ <li>📈 Lines of Code: 1133</li> <li>📄 Lines of Documentation: 78</li> <li>📅 Development Period: 2024-01-20 to 2025-09-13</li> -<li>🔥 Recent Activity: 501.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 509.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> <li>🏷️ Latest Release: v0.0.4 (2025-09-13)</li> </ul><br /> @@ -562,7 +538,7 @@ <li>📈 Lines of Code: 40</li> <li>📄 Lines of Documentation: 3</li> <li>📅 Development Period: 2023-12-31 to 2025-08-11</li> -<li>🔥 Recent Activity: 535.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 543.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -585,7 +561,7 @@ <li>📈 Lines of Code: 2851</li> <li>📄 Lines of Documentation: 52</li> <li>📅 Development Period: 2023-08-27 to 2025-08-08</li> -<li>🔥 Recent Activity: 571.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 579.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -608,7 +584,7 @@ <li>📈 Lines of Code: 1096</li> <li>📄 Lines of Documentation: 287</li> <li>📅 Development Period: 2023-04-17 to 2025-06-12</li> -<li>🔥 Recent Activity: 612.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 620.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.1.0 (2024-05-03)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -634,7 +610,7 @@ <li>📈 Lines of Code: 1525</li> <li>📄 Lines of Documentation: 15</li> <li>📅 Development Period: 2023-04-17 to 2023-11-19</li> -<li>🔥 Recent Activity: 798.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 806.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -649,6 +625,29 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='guprecords'>guprecords</h3><br /> +<br /> +<ul> +<li>💻 Languages: Raku (100.0%)</li> +<li>📚 Documentation: Markdown (100.0%)</li> +<li>📊 Commits: 95</li> +<li>📈 Lines of Code: 312</li> +<li>📄 Lines of Documentation: 416</li> +<li>📅 Development Period: 2013-03-22 to 2025-05-18</li> +<li>🔥 Recent Activity: 856.8 days (avg. age of last 42 commits)</li> +<li>⚖️ License: No license found</li> +<li>🏷️ Latest Release: v1.0.0 (2023-04-29)</li> +</ul><br /> +<br /> +<span><span class='inlinecode'>guprecords</span> is a command-line tool written in Raku that generates comprehensive uptime reports for multiple hosts by aggregating and analyzing raw record files produced by the <span class='inlinecode'>uptimed</span> daemon. Its primary purpose is to provide system administrators and enthusiasts with detailed, customizable statistics on system reliability and availability across a fleet of machines. By supporting various categories (such as Host, Kernel, KernelMajor, and KernelName) and metrics (including Boots, Uptime, Score, Downtime, and Lifespan), <span class='inlinecode'>guprecords</span> enables users to identify trends, compare system stability, and track performance over time. Reports can be output in plaintext, Markdown, or Gemtext formats, making them suitable for different documentation or publishing needs.</span><br /> +<br /> +<span>The architecture of <span class='inlinecode'>guprecords</span> is modular, with classes dedicated to parsing epoch data, aggregating statistics, and formatting output. The tool reads uptime record files collected from multiple hosts (typically centralized via a git repository), processes them to compute the desired metrics, and generates ranked tables highlighting top performers or outliers. Users can tailor reports using command-line options to select categories, metrics, output formats, and entry limits. The design emphasizes flexibility and extensibility, allowing for easy integration into existing monitoring workflows. While <span class='inlinecode'>guprecords</span> does not handle the collection of raw data itself, it complements existing <span class='inlinecode'>uptimed</span> deployments by transforming raw uptime logs into actionable insights and historical records.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/guprecords'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/guprecords'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='randomjournalpage'>randomjournalpage</h3><br /> <br /> <ul> @@ -658,7 +657,7 @@ <li>📈 Lines of Code: 51</li> <li>📄 Lines of Documentation: 26</li> <li>📅 Development Period: 2022-06-02 to 2024-04-20</li> -<li>🔥 Recent Activity: 863.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 871.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -682,7 +681,7 @@ <li>📈 Lines of Code: 41</li> <li>📄 Lines of Documentation: 17</li> <li>📅 Development Period: 2020-01-30 to 2025-04-30</li> -<li>🔥 Recent Activity: 1156.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1165.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: GPL-3.0</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -696,32 +695,6 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='photoalbum'>photoalbum</h3><br /> -<br /> -<ul> -<li>💻 Languages: Shell (80.1%), Make (12.3%), Config (7.6%)</li> -<li>📚 Documentation: Markdown (100.0%)</li> -<li>📊 Commits: 153</li> -<li>📈 Lines of Code: 342</li> -<li>📄 Lines of Documentation: 39</li> -<li>📅 Development Period: 2011-11-19 to 2022-04-02</li> -<li>🔥 Recent Activity: 1376.2 days (avg. age of last 42 commits)</li> -<li>⚖️ License: No license found</li> -<li>🏷️ Latest Release: 0.5.0 (2022-02-21)</li> -</ul><br /> -<span>⚠️ **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.</span><br /> -<br /> -<span>**Summary:** </span><br /> -<span>The <span class='inlinecode'>photoalbum</span> project is a minimal Bash script designed for Linux systems to automate the creation of static web photo albums. Its primary function is to take a collection of images from a specified directory, process them, and generate a ready-to-deploy static website that displays these photos in an organized album format. This tool is particularly useful for users who want a simple, dependency-light way to publish photo galleries online without relying on complex web frameworks or dynamic content management systems.</span><br /> -<br /> -<span>**Key Features & Architecture:** </span><br /> -<span><span class='inlinecode'>photoalbum</span> operates through a set of straightforward commands: <span class='inlinecode'>generate</span> (to build the album), <span class='inlinecode'>clean</span> (to remove temporary files), <span class='inlinecode'>version</span> (to display version info), and <span class='inlinecode'>makemake</span> (to set up configuration files and a Makefile). Configuration is handled via a customizable rcfile, allowing users to tailor settings such as source and output directories. The script uses HTML templates, which can be edited for custom album layouts. The workflow involves copying images to an "incoming" folder, running the <span class='inlinecode'>generate</span> command to create the album in a <span class='inlinecode'>dist</span> directory, and optionally cleaning up with <span class='inlinecode'>clean</span>. Its minimalist Bash implementation ensures ease of use, transparency, and compatibility with most Linux environments, making it ideal for users seeking a lightweight, easily customizable static photo album generator.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/photoalbum'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/photoalbum'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='geheim'>geheim</h3><br /> <br /> <ul> @@ -731,7 +704,7 @@ <li>📈 Lines of Code: 671</li> <li>📄 Lines of Documentation: 26</li> <li>📅 Development Period: 2018-05-26 to 2025-09-04</li> -<li>🔥 Recent Activity: 1471.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1479.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -758,7 +731,7 @@ <li>📈 Lines of Code: 1728</li> <li>📄 Lines of Documentation: 18</li> <li>📅 Development Period: 2020-07-12 to 2023-04-09</li> -<li>🔥 Recent Activity: 1527.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1535.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -773,47 +746,48 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='perl-c-fibonacci'>perl-c-fibonacci</h3><br /> +<h3 style='display: inline' id='foozone'>foo.zone</h3><br /> <br /> <ul> -<li>💻 Languages: C (80.4%), Make (19.6%)</li> -<li>📚 Documentation: Text (100.0%)</li> -<li>📊 Commits: 4</li> -<li>📈 Lines of Code: 51</li> -<li>📄 Lines of Documentation: 69</li> -<li>📅 Development Period: 2014-03-24 to 2022-04-23</li> -<li>🔥 Recent Activity: 2008.3 days (avg. age of last 42 commits)</li> +<li>📚 Documentation: Markdown (100.0%)</li> +<li>📊 Commits: 3145</li> +<li>📈 Lines of Code: 0</li> +<li>📄 Lines of Documentation: 23</li> +<li>📅 Development Period: 2021-05-21 to 2022-04-02</li> +<li>🔥 Recent Activity: 1551.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> <span>⚠️ **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.</span><br /> <br /> -<span>perl-c-fibonacci: source code repository.</span><br /> +<span>This project hosts the static files for the foo.zone website, which is accessible via both the Gemini protocol (gemini://foo.zone) and the web (https://foo.zone). The repository is organized with separate branches for each content format—such as Gemtext, HTML, and Markdown—allowing the site to be served in multiple formats tailored to different protocols and user preferences. This structure makes it easy to maintain and update content across platforms, ensuring consistency and flexibility.</span><br /> <br /> -<a class='textlink' href='https://codeberg.org/snonux/perl-c-fibonacci'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/perl-c-fibonacci'>View on GitHub</a><br /> +<span>The site is maintained using a suite of open-source tools, including Neovim for editing, GNU Bash for scripting, and ShellCheck for shell script linting. It is deployed on OpenBSD, utilizing the vger Gemini server (managed via relayd and inetd) for Gemini content and the native httpd server for the HTML site. Source code and hosting are managed through Codeberg. The static content is generated with the help of the gemtexter tool, which streamlines the process of converting and managing content in various formats. This architecture emphasizes simplicity, security, and portability, making it a robust solution for multi-protocol static site hosting.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/foo.zone'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/foo.zone'>View on GitHub</a><br /> <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='guprecords'>guprecords</h3><br /> +<h3 style='display: inline' id='perl-c-fibonacci'>perl-c-fibonacci</h3><br /> <br /> <ul> -<li>💻 Languages: Raku (100.0%)</li> -<li>📊 Commits: 95</li> -<li>📈 Lines of Code: 195</li> -<li>📅 Development Period: 2013-03-22 to 2023-03-09</li> -<li>🔥 Recent Activity: 2223.4 days (avg. age of last 42 commits)</li> +<li>💻 Languages: C (80.4%), Make (19.6%)</li> +<li>📚 Documentation: Text (100.0%)</li> +<li>📊 Commits: 4</li> +<li>📈 Lines of Code: 51</li> +<li>📄 Lines of Documentation: 69</li> +<li>📅 Development Period: 2014-03-24 to 2022-04-23</li> +<li>🔥 Recent Activity: 2016.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> -<li>🏷️ Latest Release: v1.0.0 (2023-04-29)</li> +<li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> <span>⚠️ **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.</span><br /> <br /> -<span><span class='inlinecode'>guprecords</span> is a command-line tool written in Raku that generates comprehensive uptime reports for multiple hosts by aggregating and analyzing raw record files produced by the <span class='inlinecode'>uptimed</span> daemon. Its primary purpose is to provide system administrators and enthusiasts with detailed, customizable statistics on system reliability and availability across a fleet of machines. By supporting various categories (such as Host, Kernel, KernelMajor, and KernelName) and metrics (including Boots, Uptime, Score, Downtime, and Lifespan), <span class='inlinecode'>guprecords</span> enables users to identify trends, compare system stability, and track performance over time. Reports can be output in plaintext, Markdown, or Gemtext formats, making them suitable for different documentation or publishing needs.</span><br /> -<br /> -<span>The architecture of <span class='inlinecode'>guprecords</span> is modular, with classes dedicated to parsing epoch data, aggregating statistics, and formatting output. The tool reads uptime record files collected from multiple hosts (typically centralized via a git repository), processes them to compute the desired metrics, and generates ranked tables highlighting top performers or outliers. Users can tailor reports using command-line options to select categories, metrics, output formats, and entry limits. The design emphasizes flexibility and extensibility, allowing for easy integration into existing monitoring workflows. While <span class='inlinecode'>guprecords</span> does not handle the collection of raw data itself, it complements existing <span class='inlinecode'>uptimed</span> deployments by transforming raw uptime logs into actionable insights and historical records.</span><br /> +<span>perl-c-fibonacci: source code repository.</span><br /> <br /> -<a class='textlink' href='https://codeberg.org/snonux/guprecords'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/guprecords'>View on GitHub</a><br /> +<a class='textlink' href='https://codeberg.org/snonux/perl-c-fibonacci'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/perl-c-fibonacci'>View on GitHub</a><br /> <br /> <span>---</span><br /> <br /> @@ -826,7 +800,7 @@ <li>📈 Lines of Code: 12420</li> <li>📄 Lines of Documentation: 610</li> <li>📅 Development Period: 2018-03-01 to 2020-01-22</li> -<li>🔥 Recent Activity: 2549.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 2558.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: Apache-2.0</li> <li>🏷️ Latest Release: 0.5.1 (2019-01-04)</li> </ul><br /> @@ -843,6 +817,32 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='photoalbum'>photoalbum</h3><br /> +<br /> +<ul> +<li>💻 Languages: Shell (78.1%), Make (13.5%), Config (8.4%)</li> +<li>📚 Documentation: Text (100.0%)</li> +<li>📊 Commits: 153</li> +<li>📈 Lines of Code: 311</li> +<li>📄 Lines of Documentation: 45</li> +<li>📅 Development Period: 2011-11-19 to 2022-02-20</li> +<li>🔥 Recent Activity: 2982.7 days (avg. age of last 42 commits)</li> +<li>⚖️ License: No license found</li> +<li>🏷️ Latest Release: 0.5.0 (2022-02-21)</li> +</ul><br /> +<span>⚠️ **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.</span><br /> +<br /> +<span>**Summary:** </span><br /> +<span>The <span class='inlinecode'>photoalbum</span> project is a minimal Bash script designed for Linux systems to automate the creation of static web photo albums. Its primary function is to take a collection of images from a specified directory, process them, and generate a ready-to-deploy static website that displays these photos in an organized album format. This tool is particularly useful for users who want a simple, dependency-light way to publish photo galleries online without relying on complex web frameworks or dynamic content management systems.</span><br /> +<br /> +<span>**Key Features & Architecture:** </span><br /> +<span><span class='inlinecode'>photoalbum</span> operates through a set of straightforward commands: <span class='inlinecode'>generate</span> (to build the album), <span class='inlinecode'>clean</span> (to remove temporary files), <span class='inlinecode'>version</span> (to display version info), and <span class='inlinecode'>makemake</span> (to set up configuration files and a Makefile). Configuration is handled via a customizable rcfile, allowing users to tailor settings such as source and output directories. The script uses HTML templates, which can be edited for custom album layouts. The workflow involves copying images to an "incoming" folder, running the <span class='inlinecode'>generate</span> command to create the album in a <span class='inlinecode'>dist</span> directory, and optionally cleaning up with <span class='inlinecode'>clean</span>. Its minimalist Bash implementation ensures ease of use, transparency, and compatibility with most Linux environments, making it ideal for users seeking a lightweight, easily customizable static photo album generator.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/photoalbum'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/photoalbum'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='staticfarm-apache-handlers'>staticfarm-apache-handlers</h3><br /> <br /> <ul> @@ -852,7 +852,7 @@ <li>📈 Lines of Code: 919</li> <li>📄 Lines of Documentation: 12</li> <li>📅 Development Period: 2015-01-02 to 2021-11-04</li> -<li>🔥 Recent Activity: 3058.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3067.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.1.3 (2015-01-02)</li> </ul><br /> @@ -876,7 +876,7 @@ <li>📈 Lines of Code: 18</li> <li>📄 Lines of Documentation: 49</li> <li>📅 Development Period: 2014-03-24 to 2021-11-05</li> -<li>🔥 Recent Activity: 3294.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3302.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -907,7 +907,7 @@ <li>📈 Lines of Code: 5360</li> <li>📄 Lines of Documentation: 789</li> <li>📅 Development Period: 2015-01-02 to 2021-11-05</li> -<li>🔥 Recent Activity: 3561.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3569.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.1 (2015-01-02)</li> </ul><br /> @@ -935,7 +935,7 @@ <li>📈 Lines of Code: 273</li> <li>📄 Lines of Documentation: 32</li> <li>📅 Development Period: 2015-09-29 to 2021-11-05</li> -<li>🔥 Recent Activity: 3565.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3573.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: Apache-2.0</li> <li>🏷️ Latest Release: 0 (2015-10-26)</li> </ul><br /> @@ -965,7 +965,7 @@ <li>📈 Lines of Code: 1839</li> <li>📄 Lines of Documentation: 412</li> <li>📅 Development Period: 2015-01-02 to 2021-11-05</li> -<li>🔥 Recent Activity: 3644.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3653.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.2 (2015-01-02)</li> </ul><br /> @@ -993,7 +993,7 @@ <li>📈 Lines of Code: 499</li> <li>📄 Lines of Documentation: 8</li> <li>📅 Development Period: 2015-05-24 to 2021-11-03</li> -<li>🔥 Recent Activity: 3655.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3664.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.1 (2015-06-01)</li> </ul><br /> @@ -1015,7 +1015,7 @@ <li>📊 Commits: 670</li> <li>📈 Lines of Code: 1675</li> <li>📅 Development Period: 2011-03-06 to 2018-12-22</li> -<li>🔥 Recent Activity: 3711.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3719.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.0.0 (2018-12-22)</li> </ul><br /> @@ -1039,7 +1039,7 @@ <li>📈 Lines of Code: 88</li> <li>📄 Lines of Documentation: 148</li> <li>📅 Development Period: 2015-06-18 to 2015-12-05</li> -<li>🔥 Recent Activity: 3759.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3767.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1065,7 +1065,7 @@ <li>📈 Lines of Code: 1681</li> <li>📄 Lines of Documentation: 539</li> <li>📅 Development Period: 2014-03-10 to 2021-11-03</li> -<li>🔥 Recent Activity: 4037.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4045.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.2 (2014-11-17)</li> </ul><br /> @@ -1093,7 +1093,7 @@ <li>📈 Lines of Code: 65</li> <li>📄 Lines of Documentation: 228</li> <li>📅 Development Period: 2013-03-22 to 2021-11-04</li> -<li>🔥 Recent Activity: 4091.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4100.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.0.0.0 (2013-03-22)</li> </ul><br /> @@ -1117,7 +1117,7 @@ <li>📈 Lines of Code: 136</li> <li>📄 Lines of Documentation: 96</li> <li>📅 Development Period: 2013-03-22 to 2021-11-05</li> -<li>🔥 Recent Activity: 4104.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4113.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.2.0 (2014-07-05)</li> </ul><br /> @@ -1145,7 +1145,7 @@ <li>📈 Lines of Code: 134</li> <li>📄 Lines of Documentation: 106</li> <li>📅 Development Period: 2013-03-22 to 2021-11-05</li> -<li>🔥 Recent Activity: 4112.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4120.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.1.5 (2014-06-22)</li> </ul><br /> @@ -1162,6 +1162,30 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='pwgrep'>pwgrep</h3><br /> +<br /> +<ul> +<li>💻 Languages: Shell (85.0%), Make (15.0%)</li> +<li>📚 Documentation: Text (80.8%), Markdown (19.2%)</li> +<li>📊 Commits: 142</li> +<li>📈 Lines of Code: 493</li> +<li>📄 Lines of Documentation: 26</li> +<li>📅 Development Period: 2009-09-27 to 2021-11-02</li> +<li>🔥 Recent Activity: 4164.0 days (avg. age of last 42 commits)</li> +<li>⚖️ License: No license found</li> +<li>🏷️ Latest Release: 0.9.3 (2014-06-14)</li> +</ul><br /> +<span>⚠️ **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.</span><br /> +<br /> +<span>**pwgrep** is a lightweight password manager designed for Unix-like systems, implemented primarily in Bash and GNU AWK. It securely stores and retrieves passwords by encrypting them with GPG (GNU Privacy Guard), ensuring that sensitive information remains protected. Version control for password files is handled using an RCS (Revision Control System) such as Git, allowing users to track changes, revert to previous versions, and maintain an audit trail of password updates. This approach leverages familiar command-line tools, making it accessible to users comfortable with shell environments.</span><br /> +<br /> +<span>The core features of pwgrep include encrypted password storage, easy retrieval and search functionality (using AWK for pattern matching), and robust version control integration. The architecture is modular and script-based: Bash scripts orchestrate user interactions and file management, AWK handles efficient searching within password files, GPG provides encryption/decryption, and Git (or another RCS) manages version history. This combination offers a secure, auditable, and scriptable solution for password management without relying on heavyweight external applications or GUIs.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/pwgrep'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/pwgrep'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='japi'>japi</h3><br /> <br /> <ul> @@ -1171,7 +1195,7 @@ <li>📈 Lines of Code: 286</li> <li>📄 Lines of Documentation: 144</li> <li>📅 Development Period: 2013-03-22 to 2021-11-05</li> -<li>🔥 Recent Activity: 4160.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4169.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.4.3 (2014-06-16)</li> </ul><br /> @@ -1197,7 +1221,7 @@ <li>📈 Lines of Code: 191</li> <li>📄 Lines of Documentation: 8</li> <li>📅 Development Period: 2014-03-24 to 2014-03-24</li> -<li>🔥 Recent Activity: 4221.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4230.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1219,7 +1243,7 @@ <li>📊 Commits: 7</li> <li>📈 Lines of Code: 80</li> <li>📅 Development Period: 2011-07-09 to 2015-01-13</li> -<li>🔥 Recent Activity: 4301.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4310.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1243,7 +1267,7 @@ <li>📈 Lines of Code: 124</li> <li>📄 Lines of Documentation: 75</li> <li>📅 Development Period: 2010-11-05 to 2021-11-05</li> -<li>🔥 Recent Activity: 4342.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4351.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.2 (2014-06-22)</li> </ul><br /> @@ -1267,7 +1291,7 @@ <li>📈 Lines of Code: 1828</li> <li>📄 Lines of Documentation: 100</li> <li>📅 Development Period: 2010-11-05 to 2015-05-23</li> -<li>🔥 Recent Activity: 4372.7 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4381.1 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.7.5 (2014-06-22)</li> </ul><br /> @@ -1280,30 +1304,6 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='pwgrep'>pwgrep</h3><br /> -<br /> -<ul> -<li>💻 Languages: Shell (85.0%), Make (15.0%)</li> -<li>📚 Documentation: Text (72.4%), Markdown (27.6%)</li> -<li>📊 Commits: 142</li> -<li>📈 Lines of Code: 493</li> -<li>📄 Lines of Documentation: 29</li> -<li>📅 Development Period: 2009-09-27 to 2015-05-23</li> -<li>🔥 Recent Activity: 4386.1 days (avg. age of last 42 commits)</li> -<li>⚖️ License: No license found</li> -<li>🏷️ Latest Release: 0.9.3 (2014-06-14)</li> -</ul><br /> -<span>⚠️ **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.</span><br /> -<br /> -<span>**pwgrep** is a lightweight password manager designed for Unix-like systems, implemented primarily in Bash and GNU AWK. It securely stores and retrieves passwords by encrypting them with GPG (GNU Privacy Guard), ensuring that sensitive information remains protected. Version control for password files is handled using an RCS (Revision Control System) such as Git, allowing users to track changes, revert to previous versions, and maintain an audit trail of password updates. This approach leverages familiar command-line tools, making it accessible to users comfortable with shell environments.</span><br /> -<br /> -<span>The core features of pwgrep include encrypted password storage, easy retrieval and search functionality (using AWK for pattern matching), and robust version control integration. The architecture is modular and script-based: Bash scripts orchestrate user interactions and file management, AWK handles efficient searching within password files, GPG provides encryption/decryption, and Git (or another RCS) manages version history. This combination offers a secure, auditable, and scriptable solution for password management without relying on heavyweight external applications or GUIs.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/pwgrep'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/pwgrep'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='perldaemon'>perldaemon</h3><br /> <br /> <ul> @@ -1311,7 +1311,7 @@ <li>📊 Commits: 110</li> <li>📈 Lines of Code: 614</li> <li>📅 Development Period: 2011-02-05 to 2022-04-21</li> -<li>🔥 Recent Activity: 4422.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4430.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.4 (2022-04-29)</li> </ul><br /> @@ -1337,7 +1337,7 @@ <li>📈 Lines of Code: 122</li> <li>📄 Lines of Documentation: 10</li> <li>📅 Development Period: 2011-01-27 to 2014-06-22</li> -<li>🔥 Recent Activity: 4753.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4761.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v0.2 (2011-01-27)</li> </ul><br /> @@ -1361,7 +1361,7 @@ <li>📈 Lines of Code: 720</li> <li>📄 Lines of Documentation: 6</li> <li>📅 Development Period: 2008-06-21 to 2021-11-03</li> -<li>🔥 Recent Activity: 4815.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4824.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v0.3 (2009-02-08)</li> </ul><br /> @@ -1378,30 +1378,6 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='ychat'>ychat</h3><br /> -<br /> -<ul> -<li>💻 Languages: C++ (50.4%), Shell (21.3%), C/C++ (20.8%), Perl (2.3%), HTML (2.3%), Config (2.2%), Make (0.7%), CSS (0.1%)</li> -<li>📚 Documentation: Text (100.0%)</li> -<li>📊 Commits: 67</li> -<li>📈 Lines of Code: 73818</li> -<li>📄 Lines of Documentation: 127</li> -<li>📅 Development Period: 2008-05-15 to 2014-07-01</li> -<li>🔥 Recent Activity: 5407.2 days (avg. age of last 42 commits)</li> -<li>⚖️ License: GPL-2.0</li> -<li>🏷️ Latest Release: yhttpd-0.7.2 (2013-04-06)</li> -</ul><br /> -<span>⚠️ **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.</span><br /> -<br /> -<span>**yChat** is a free, open-source, HTTP-based chat server written in C++ that allows users to communicate in real time using only a standard web browser—no special client software is required. Designed for portability and performance, yChat runs as a standalone web server (with its own lightweight HTTP engine, yhttpd) and supports POSIX-compliant operating systems like Linux and BSD. Key features include multi-threading (using POSIX threads), modular architecture with dynamically loadable modules, MySQL-based user management, customizable HTML and language templates, and an ncurses-based administration interface. The system is highly configurable via XML-based config files and supports advanced features like session management, logging (including Apache-style logs), and a smart garbage collection engine for efficient resource handling.</span><br /> -<br /> -<span>yChat’s architecture is built around a core C++ engine that handles HTTP requests directly, bypassing the need for external web servers like Apache. It uses hash maps for fast data access, supports CGI scripting, and allows for easy customization of both appearance and functionality through templates and modules. The project is organized into several branches (CURRENT, STABLE, BASIC, LEGACY) to balance stability and feature development, and it provides tools for easy installation, configuration, and administration. Its modular design, performance optimizations, and ease of customization make it a practical solution for organizations or communities seeking a lightweight, browser-accessible chat platform that is easy to deploy and extend.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/ychat'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/ychat'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='netcalendar'>netcalendar</h3><br /> <br /> <ul> @@ -1411,7 +1387,7 @@ <li>📈 Lines of Code: 17380</li> <li>📄 Lines of Documentation: 947</li> <li>📅 Development Period: 2009-02-07 to 2021-05-01</li> -<li>🔥 Recent Activity: 5446.5 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 5454.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: GPL-2.0</li> <li>🏷️ Latest Release: v0.1 (2009-02-08)</li> </ul><br /> @@ -1430,6 +1406,30 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='ychat'>ychat</h3><br /> +<br /> +<ul> +<li>💻 Languages: C++ (51.1%), C/C++ (29.9%), Shell (15.9%), HTML (1.4%), Perl (1.2%), Make (0.4%), CSS (0.1%)</li> +<li>📚 Documentation: Text (100.0%)</li> +<li>📊 Commits: 67</li> +<li>📈 Lines of Code: 9958</li> +<li>📄 Lines of Documentation: 103</li> +<li>📅 Development Period: 2008-05-15 to 2014-07-01</li> +<li>🔥 Recent Activity: 5484.5 days (avg. age of last 42 commits)</li> +<li>⚖️ License: GPL-2.0</li> +<li>🏷️ Latest Release: yhttpd-0.7.2 (2013-04-06)</li> +</ul><br /> +<span>⚠️ **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.</span><br /> +<br /> +<span>**yChat** is a free, open-source, HTTP-based chat server written in C++ that allows users to communicate in real time using only a standard web browser—no special client software is required. Designed for portability and performance, yChat runs as a standalone web server (with its own lightweight HTTP engine, yhttpd) and supports POSIX-compliant operating systems like Linux and BSD. Key features include multi-threading (using POSIX threads), modular architecture with dynamically loadable modules, MySQL-based user management, customizable HTML and language templates, and an ncurses-based administration interface. The system is highly configurable via XML-based config files and supports advanced features like session management, logging (including Apache-style logs), and a smart garbage collection engine for efficient resource handling.</span><br /> +<br /> +<span>yChat’s architecture is built around a core C++ engine that handles HTTP requests directly, bypassing the need for external web servers like Apache. It uses hash maps for fast data access, supports CGI scripting, and allows for easy customization of both appearance and functionality through templates and modules. The project is organized into several branches (CURRENT, STABLE, BASIC, LEGACY) to balance stability and feature development, and it provides tools for easy installation, configuration, and administration. Its modular design, performance optimizations, and ease of customization make it a practical solution for organizations or communities seeking a lightweight, browser-accessible chat platform that is easy to deploy and extend.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/ychat'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/ychat'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='hsbot'>hsbot</h3><br /> <br /> <ul> @@ -1437,7 +1437,7 @@ <li>📊 Commits: 80</li> <li>📈 Lines of Code: 601</li> <li>📅 Development Period: 2009-11-22 to 2011-10-17</li> -<li>🔥 Recent Activity: 5542.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 5550.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1452,6 +1452,28 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='fype'>fype</h3><br /> +<br /> +<ul> +<li>💻 Languages: C (72.1%), C/C++ (20.7%), HTML (5.7%), Make (1.5%)</li> +<li>📚 Documentation: Text (71.3%), LaTeX (28.7%)</li> +<li>📊 Commits: 99</li> +<li>📈 Lines of Code: 10196</li> +<li>📄 Lines of Documentation: 1741</li> +<li>📅 Development Period: 2008-05-15 to 2021-11-03</li> +<li>🔥 Recent Activity: 5712.3 days (avg. age of last 42 commits)</li> +<li>⚖️ License: Custom License</li> +<li>🧪 Status: Experimental (no releases yet)</li> +</ul><br /> +<span>⚠️ **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.</span><br /> +<br /> +<span>fype: source code repository.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/fype'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/fype'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='vs-sim'>vs-sim</h3><br /> <br /> <ul> @@ -1460,7 +1482,7 @@ <li>📈 Lines of Code: 0</li> <li>📄 Lines of Documentation: 7</li> <li>📅 Development Period: 2008-05-15 to 2015-05-23</li> -<li>🔥 Recent Activity: 5903.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 5911.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v1.0 (2008-08-24)</li> </ul><br /> @@ -1472,28 +1494,6 @@ <br /> <a class='textlink' href='https://codeberg.org/snonux/vs-sim'>View on Codeberg</a><br /> <a class='textlink' href='https://github.com/snonux/vs-sim'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> -<h3 style='display: inline' id='fype'>fype</h3><br /> -<br /> -<ul> -<li>💻 Languages: C (71.3%), C/C++ (20.6%), HTML (6.6%), Make (1.5%)</li> -<li>📚 Documentation: Text (60.2%), LaTeX (39.8%)</li> -<li>📊 Commits: 99</li> -<li>📈 Lines of Code: 8906</li> -<li>📄 Lines of Documentation: 1431</li> -<li>📅 Development Period: 2008-05-15 to 2021-04-29</li> -<li>🔥 Recent Activity: 5949.0 days (avg. age of last 42 commits)</li> -<li>⚖️ License: Custom License</li> -<li>🧪 Status: Experimental (no releases yet)</li> -</ul><br /> -<span>⚠️ **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.</span><br /> -<br /> -<span>fype: source code repository.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/fype'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/fype'>View on GitHub</a><br /> <p class="footer"> Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> | served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> | diff --git a/about/showcase/debroid/image-1.png b/about/showcase/debroid/image-1.png index d304c0cd..e21da15c 100644 --- a/about/showcase/debroid/image-1.png +++ b/about/showcase/debroid/image-1.png @@ -45,43 +45,43 @@ </style> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-15839d47b75d.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-4badbb48d792.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-a5c85403da8c.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-4d11e88b2383.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-73fd10e24e0c.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-7bf1881153e4.css" /> - <script type="application/json" id="client-env">{"locale":"en","featureFlags":["alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","billing_unfiltered_discounts","client_version_header","codespaces_prebuild_region_target_update","contact_sales_locale_utm_medium","contentful_lp_enterprise","contentful_lp_footnotes","copilot_agent_cli_public_preview","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_bing_search_use_azure_ai_agent_service","copilot_bing_search_use_grounding_ui","copilot_chat_attach_multiple_images","copilot_chat_file_redirect","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_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_planning_agent_aggregate_task","copilot_immersive_planning_agent_questions_form","copilot_immersive_structured_model_picker","copilot_no_floating_button","copilot_read_shared_conversation","copilot_show_copilot_sub_issues_button_on_issues_page","copilot_spaces_as_attachments","copilot_spaces_ga","copilot_spark_loading_webgl","copilot_spark_progressive_error_handling","copilot_spark_read_iteration_history_from_git_v2","copilot_spark_single_user_iteration","copilot_spark_use_billing_headers","copilot_spark_write_iteration_history_to_git","copilot_stable_conversation_view","copilot_workbench_agent_seed_tool","copilot_workbench_cache","copilot_workbench_connection_reload_banner","copilot_workbench_preview_analytics","copilot_workbench_refresh_on_wsod","copilot_workbench_use_single_prompt","direct_to_salesforce","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","global_search_multi_orgs","hpc_improve_dom_insertion_observer","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","item_picker_milestone_tsq_migration","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","migrate_toasts_to_banners_web_notifications","new_traffic_page_banner","override_pulse_legacy_url","pinned_issue_fields","primer_react_segmented_control_tooltip","primer_react_unified_portal_root","record_sso_banner_metrics","ref_selector_create_tag_dialog","releases_update_ref_selector","remove_child_patch","repos_insights_remove_new_url","sample_network_conn_type","scheduled_reminders_updated_limits","site_homepage_collaborate_video","site_homepage_contentful","site_msbuild_webgl_hero","spark_commit_on_default_branch","spark_force_push_after_checkout","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 type="application/json" id="client-env">{"locale":"en","featureFlags":["alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","billing_unfiltered_discounts","client_version_header","codespaces_prebuild_region_target_update","contentful_lp_footnotes","copilot_agent_cli_public_preview","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_draft_issues_single_issue_create_with_bulk_job","copilot_api_github_draft_update_issue_skill","copilot_chat_attach_multiple_images","copilot_chat_file_redirect","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_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_generate_commit_message_dry_regenerate","copilot_immersive_structured_model_picker","copilot_immersive_task_within_chat_thread","copilot_insights_column_chart_axis_legibility_fix","copilot_no_floating_button","copilot_read_shared_conversation","copilot_spaces_as_attachments","copilot_spaces_ga","copilot_spark_loading_webgl","copilot_spark_progressive_error_handling","copilot_spark_read_iteration_history_from_git_v2","copilot_spark_single_user_iteration","copilot_spark_use_billing_headers","copilot_spark_write_iteration_history_to_git","copilot_stable_conversation_view","copilot_workbench_agent_seed_tool","copilot_workbench_cache","copilot_workbench_connection_reload_banner","copilot_workbench_preview_analytics","copilot_workbench_refresh_on_wsod","copilot_workbench_skip_repo_on_codespace","copilot_workbench_use_single_prompt","direct_to_salesforce","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","global_search_multi_orgs","hpc_improve_dom_insertion_observer","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","migrate_toasts_to_banners_web_notifications","new_traffic_page_banner","pinned_issue_fields","primer_react_segmented_control_tooltip","primer_react_unified_portal_root","record_sso_banner_metrics","ref_selector_create_tag_dialog","releases_update_ref_selector","remove_child_patch","report_hydro_web_vitals","repos_insights_remove_new_url","sample_network_conn_type","scheduled_reminders_updated_limits","site_homepage_collaborate_video","site_homepage_contentful","site_msbuild_webgl_hero","spark_fix_rename","spark_force_push_after_checkout","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-94e8453f9910.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-12ab082142cb.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-c98257dc79a7.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-bc926dd5105c.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-e6aa303c3a87.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-a1b1347ee26f.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-dd3ec8-1f3d5f90de2b.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_-31b9f3-e00a737a5ea6.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_-31b9f3-9021ed20220b.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-12a3c58321de.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-4b5e481df5f9.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-2350a5db3477.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-a79564979cd1.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-d431b500aedc.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> @@ -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:2bc7b47c-1611-3b39-d80f-d8157b2d0e50"> + <meta name="fetch-nonce" content="v2:cf3c0859-ec4a-3947-92b0-7758f04c0803"> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> - <meta name="request-id" content="A39E:27D01:77EECE0:625A5EA:68EEA835" data-pjax-transient="true"/><meta name="html-safe-nonce" content="2cf7df57abec3dd4f23a6ff4b8a9c7db28fb9cb01273a19ec755b3f6f800c4e3" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBMzlFOjI3RDAxOjc3RUVDRTA6NjI1QTVFQTo2OEVFQTgzNSIsInZpc2l0b3JfaWQiOiIyNzcyNTU0NjM1NzYxNTkyMzczIiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="e3ef1f031760125ed1818a4c81233a221340ecd567f511739f92ad6c6ca3e9ad" data-pjax-transient="true"/> + <meta name="request-id" content="B13A:24383:95555A:79830C:68F9B9FE" data-pjax-transient="true"/><meta name="html-safe-nonce" content="87780a5d74c18075a309935287b5afa7f4caafcfc17e8c816232bd48e862be35" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMTNBOjI0MzgzOjk1NTU1QTo3OTgzMEM6NjhGOUI5RkUiLCJ2aXNpdG9yX2lkIjoiNTEzNTA3MjgyMjIzMzI1MDMwMiIsInJlZ2lvbl9lZGdlIjoiZnJhIiwicmVnaW9uX3JlbmRlciI6ImZyYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="2fa5a9f7cad4283c61a7cd9abc6a224b9dd43eeab0f3d474aa2aa476ce7cbd65" data-pjax-transient="true"/> @@ -174,14 +174,14 @@ <meta name="expected-hostname" content="github.com"> - <meta http-equiv="x-pjax-version" content="6019a75e790d549fa8d98e95ed64e506411ffadfe55b2403e2c720f5ed1e783d" data-turbo-track="reload"> + <meta http-equiv="x-pjax-version" content="763685ecd5f33ada9dc34fd76010081dedf879fc60d5c3b1d20a07eb4031506f" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="c922ef32c4ab94f8b870c62883f3e41755ec705db76ec4efb0d343458f1e28c7" data-turbo-track="reload"> - <meta http-equiv="x-pjax-css-version" content="5628891e8d823be718bdb08de36c05339aea96fab18ddf649db4944c6ab6681e" data-turbo-track="reload"> - <meta http-equiv="x-pjax-js-version" content="6b8db999cbe255006842744964647f85c6d4000d24e2a40d16987a8e4ff76983" data-turbo-track="reload"> + <meta http-equiv="x-pjax-css-version" content="0dc743cd5a6b5ca18dd20307bc7dfd212d2ced65c9da72fb83c0e0f0e41596a5" data-turbo-track="reload"> + <meta http-equiv="x-pjax-js-version" content="99553a3d1158a94f01f3f84e4239543f164d7390d8c3b4c25b142ada3bdb2aa9" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/site-32febde4054e.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/site-b799d6049b8a.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/error-3bfb6168c7d5.css" /> <meta name="is_logged_out_page" content="true"> <meta name="octolytics-page-type" content="marketing"> @@ -201,7 +201,7 @@ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> - <meta name="release" content="82aba53c6e4e750f636f0d9b7d00e698a9f9bfc5"> + <meta name="release" content="fd3d384d8e1d3b2dd42635084d373fabc43354f0"> <meta name="ui-target" content="full"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> @@ -229,7 +229,7 @@ <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.16b9cb1922cda72e3023.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.3d66a64c5878cc361e85.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.2de9c7d6456a311fce49.module.css" /> <react-partial @@ -252,7 +252,7 @@ -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_gsap_index_js-23c9606618ce.js" defer="defer"></script> +<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> @@ -294,13 +294,13 @@ </a> <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-36268b1d-4ccc-46e2-a153-358cdc2b3dd2" aria-labelledby="tooltip-d4e4437e-f565-4425-b3c0-2d8f9efc4c0a" 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-d3085f38-8877-4d80-bab9-ff9d1d95e272" aria-labelledby="tooltip-520593c3-b09f-4d52-8c42-7fd0b64ba90b" 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-d4e4437e-f565-4425-b3c0-2d8f9efc4c0a" for="icon-button-36268b1d-4ccc-46e2-a153-358cdc2b3dd2" 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-520593c3-b09f-4d52-8c42-7fd0b64ba90b" for="icon-button-d3085f38-8877-4d80-bab9-ff9d1d95e272" 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.16b9cb1922cda72e3023.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.3d66a64c5878cc361e85.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.6c63a6de228d6520804d.module.css" /> <react-partial @@ -325,9 +325,9 @@ <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> - <nav class="HeaderMenu-nav" aria-label="Global"> - <ul class="d-lg-flex list-style-none"> - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> + <nav class="HeaderMenu-nav" aria-label="Global"> + <ul class="d-lg-flex list-style-none"> + <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Platform <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> @@ -604,7 +604,7 @@ </li> - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> + <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Solutions <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> @@ -752,7 +752,7 @@ </li> - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> + <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Resources <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> @@ -769,28 +769,28 @@ <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ai","context":"resources","tag":"link","label":"ai_link_resources_navbar"}" href="/resources/articles/ai"> + <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ai","context":"resources","tag":"link","label":"ai_link_resources_navbar"}" href="/resources/articles?topic=ai"> AI </a></li> <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"resources","tag":"link","label":"devops_link_resources_navbar"}" href="/resources/articles/devops"> + <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"resources","tag":"link","label":"devops_link_resources_navbar"}" href="/resources/articles?topic=devops"> DevOps </a></li> <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"security","context":"resources","tag":"link","label":"security_link_resources_navbar"}" href="/resources/articles/security"> + <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"security","context":"resources","tag":"link","label":"security_link_resources_navbar"}" href="/resources/articles?topic=security"> Security </a></li> <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"software_development","context":"resources","tag":"link","label":"software_development_link_resources_navbar"}" href="/resources/articles/software-development"> + <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"software_development","context":"resources","tag":"link","label":"software_development_link_resources_navbar"}" href="/resources/articles?topic=software-development"> Software Development @@ -865,7 +865,7 @@ </li> - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> + <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Open Source <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> @@ -951,7 +951,7 @@ </li> - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> + <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Enterprise <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> @@ -1049,18 +1049,18 @@ </li> - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> + <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{"location":"navbar","action":"platform","context":"global","tag":"link","label":"platform_link_global_navbar"}" href="https://github.com/pricing">Pricing</a> </li> - </ul> - </nav> + </ul> + </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> -<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="gWDJw0gLAHeOBGDOgPi6Q-m6z9xwuKi-8H-s61cdsSoS_63kA9hkmrc7uzpfC9nTugvsV-QrhHmRhQkJG1pBfg" 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="SfOBJyGQ4yyBd2R79mnDXN2RSTnVtp2TZPAMpEH6asT5QplJ_d4ksTYw8ESoz9JN_HUJtg1uxN6aazu_0UWmwg" 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-bf2798c8-6fc4-4e33-9a3f-df2adbfee684" 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-a4cac36c-d7bf-4411-be3c-e2b8840b7534" 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-bf2798c8-6fc4-4e33-9a3f-df2adbfee684" hidden="hidden"> + <div class="FormControl-inlineValidation" id="validation-a4cac36c-d7bf-4411-be3c-e2b8840b7534" 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="pFa8h6WFGqqunmS1YvRR2aPJ3k973HtC/wm0FU95kMBqraomyk4EUAHh2VY1oYLrPv6s5Fy9ZHMJw9soxLxdsA==" /> + <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="0lQjRpGUXX9oKmqSFJLT09+Htzd3exHuxDwdjBnTilTTeRuPHQxPNRuMxkfK9knAoNIM8iPMxtD1nCnXeo2B5A==" /> <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="/VWfGLYj0bR8ijL3GKtsRnydJsUFc6cN7H0wZecwYbwnVseuvW/ZNMtF/Y9xY9iNKJJF+JzaiPnTCQiTtV2mzg==" /> + <!-- '"` --><!-- </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="DXYUTZu1HW0C5LLmTIS9CjfWVpfwGxQmkuD81L5BNJ/KHeJPGRED6hn/AWUasIdjq085I4jvK4Bb2UMQPTAHiw==" /> <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="LXvwNZQBIRU7pVzEhz53/S1ldBB9m87ukt9PQV8lgfsKbJW6XACfe6MKsbHKRZtx4k2P6sSnTL5ECLPAcjjZog==" /> + <input type="hidden" data-csrf="true" value="C03vFZQ+vRg6c1PY8wuVD/vRKxWdoZIODUDfJPVgtQFMKBmrd53vMAEG2QGcwmyHGiTfdlEslivuyy/Bq7kTVA==" /> </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="NTZlb5ezk29N1DfEeD/FS39aitbi80oN+ju0AAmTUkYpUPYQadoR2mfnplnpGpZppJKq0EYS2mkhtYKvtT6m1A==" /> <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="0Q4ppO1Es8tddIyFhE8v3ZhHIqeOfHRBanbbMrZZV81Jp56XzhSyb2Elaln+uh0ijY6LB/fIxagPH279uybXrg==" /> <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_d322" hidden="hidden" /> -<input class="form-control" type="hidden" name="timestamp" value="1760471093804" /> -<input class="form-control" type="hidden" name="timestamp_secret" value="b7858bfe5ab44db2968600f947a5c2ac927c1d3dcbae34af139817e9eb3a546d" /> +<input class="form-control" type="text" name="required_field_227e" hidden="hidden" /> +<input class="form-control" type="hidden" name="timestamp" value="1761196542316" /> +<input class="form-control" type="hidden" name="timestamp_secret" value="e39de96a50a2a78daecb50daabcc9269f395ef710841d40e31bebd93029c40de" /> <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,13 +1565,13 @@ <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-776c39f6-25be-4343-b335-281f15fdc395" aria-labelledby="tooltip-321ceaae-d761-4424-a2f6-c190d6665321" 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-947c01b6-4b36-4b6d-a963-d91560f8ac09" aria-labelledby="tooltip-30a396ce-5077-471f-ae7f-a31887fb643f" 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-321ceaae-d761-4424-a2f6-c190d6665321" for="icon-button-776c39f6-25be-4343-b335-281f15fdc395" 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-30a396ce-5077-471f-ae7f-a31887fb643f" for="icon-button-947c01b6-4b36-4b6d-a963-d91560f8ac09" 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.16b9cb1922cda72e3023.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.3d66a64c5878cc361e85.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.6c63a6de228d6520804d.module.css" /> <react-partial @@ -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-7b75d09f-96ac-419e-9fc4-1980d3e10f7f" aria-labelledby="tooltip-2acd6ee6-c9f3-43c9-8fb7-accc1e809b51" 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-3645c150-1464-4a32-a733-416a4c1c2cb8" aria-labelledby="tooltip-5f87621b-205f-42aa-8fc2-0d5f85f17a16" 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-2acd6ee6-c9f3-43c9-8fb7-accc1e809b51" for="icon-button-7b75d09f-96ac-419e-9fc4-1980d3e10f7f" 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-5f87621b-205f-42aa-8fc2-0d5f85f17a16" for="icon-button-3645c150-1464-4a32-a733-416a4c1c2cb8" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> diff --git a/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html index 881fe7f4..9a55d3c2 100644 --- a/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html +++ b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html @@ -1047,6 +1047,7 @@ replicaset.apps/miniflux-server-85d7c64664 1 1 1 54d <br /> <ul> <li><span class='inlinecode'>anki-sync-server</span> — custom-built image served from the private registry, stores decks on <span class='inlinecode'>/data/nfs/k3svolumes/anki-sync-server/anki_data</span>, and authenticates through the <span class='inlinecode'>anki-sync-server-secret</span>.</li> +<li><span class='inlinecode'>koreade-sync-server</span> — Sync server for KOReader.</li> <li><span class='inlinecode'>audiobookshelf</span> — media streaming stack with three hostPath mounts (<span class='inlinecode'>config</span>, <span class='inlinecode'>audiobooks</span>, <span class='inlinecode'>podcasts</span>) so the library survives node rebuilds.</li> <li><span class='inlinecode'>example-apache</span> — minimal HTTP service I use for smoke-testing ingress and relayd rules.</li> <li><span class='inlinecode'>example-apache-volume-claim</span> — Apache plus PVC variant that exercises NFS-backed storage for walkthroughs like the one earlier in this post.</li> diff --git a/gemfeed/DRAFT-cloudless-kobo-forma-with-koreader.html b/gemfeed/DRAFT-cloudless-kobo-forma-with-koreader.html new file mode 100644 index 00000000..e421109e --- /dev/null +++ b/gemfeed/DRAFT-cloudless-kobo-forma-with-koreader.html @@ -0,0 +1,145 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<title>Cloudless Kobo Forma with KOReader</title> +<link rel="shortcut icon" type="image/gif" href="/favicon.ico" /> +<link rel="stylesheet" href="../style.css" /> +<link rel="stylesheet" href="style-override.css" /> +</head> +<body> +<p class="header"> +<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/DRAFT-cloudless-kobo-forma-with-koreader.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/DRAFT-cloudless-kobo-forma-with-koreader.gmi">Gemini</a> +</p> +<h1 style='display: inline' id='cloudless-kobo-forma-with-koreader'>Cloudless Kobo Forma with KOReader</h1><br /> +<br /> +<span>TODO: SSH server in KOReader?</span><br /> +<span>TODO: Speed Reading module?</span><br /> +<span>TODO: Add more pictures i made</span><br /> +<br /> +<span>I am an avid reader, and for years I've been searching for a good digital e-reader to complement my paper books. I advocate for privacy-first and prefer open-source or self-hosted solutions. If that is not possible, I opt for offline solutions. Even if I don't have anything to hide, the tinkerer in me wants those things anyway. I found my ideal device in the Kobo Forma 7 years ago. Now, I use it without Kobo's cloud sync, and in this post, I'll show you how.</span><br /> +<br /> +<a class='textlink' href='https://gl.kobobooks.com/products/kobo-forma'>Kobo Forma</a><br /> +<br /> +<a href='./cloudless-kobo-forma-with-koreader/forma.jpg'><img alt='KOReader running on Kobo Forma' title='KOReader running on Kobo Forma' src='./cloudless-kobo-forma-with-koreader/forma.jpg' /></a><br /> +<br /> +<span>I initially bought the Kobo Forma because I wanted a device with a large screen for reading PDFs and ePubs. However, as time went on, I became more concerned about the privacy implications of having all my reading data synced to the Kobo cloud. So, I looked into alternative ways to use this device.</span><br /> +<br /> +<span>The Kobo Forma is so old that it can't be purchased from Kobo directly anymore. But I love the form factor; it's much lighter than the Kobo Sage and still has a 7" screen. It's just that the stock firmware is becoming too slow and sluggish.</span><br /> +<br /> +<pre> +Art by Donovan Bake + + __...--~~~~~-._ _.-~~~~~--...__ + // `V' \\ + // | \\ + //__...--~~~~~~-._ | _.-~~~~~~--...__\\ + //__.....----~~~~._\ | /_.~~~~----.....__\\ +====================\\|//==================== + dwb `---` +</pre> +<br /> +<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br /> +<br /> +<ul> +<li><a href='#cloudless-kobo-forma-with-koreader'>Cloudless Kobo Forma with KOReader</a></li> +<li>⇢ <a href='#koreader-to-the-rescue'>KOReader to the Rescue</a></li> +<li>⇢ ⇢ <a href='#installation'>Installation</a></li> +<li>⇢ <a href='#sideloaded-mode'>Sideloaded Mode</a></li> +<li>⇢ ⇢ <a href='#enablement'>Enablement</a></li> +<li>⇢ ⇢ <a href='#benefits'>Benefits</a></li> +<li>⇢ <a href='#my-workflow'>My Workflow</a></li> +<li>⇢ ⇢ <a href='#sideloading-books'>Sideloading Books</a></li> +<li>⇢ ⇢ <a href='#koreader-sync-server'>KOReader Sync Server</a></li> +<li>⇢ ⇢ <a href='#exporting-book-notes-and-highlights'>Exporting Book Notes and Highlights</a></li> +<li>⇢ ⇢ <a href='#wallabag-integration'>Wallabag Integration</a></li> +<li>⇢ <a href='#conclusion'>Conclusion</a></li> +</ul><br /> +<h2 style='display: inline' id='koreader-to-the-rescue'>KOReader to the Rescue</h2><br /> +<br /> +<span>In a world of constant connectivity, the Kobo Forma with KOReader offers a way out. By keeping it disconnected from the cloud, I can focus on my reading without compromising my privacy. KOReader is a versatile, open-source document and image viewer which can also be installed on some E Ink reader devices like the Kobo Forma.</span><br /> +<br /> +<a class='textlink' href='https://koreader.rocks/'>KOReader</a><br /> +<br /> +<span>By not syncing my reading progress and library to Kobo's cloud service, I retain full ownership and control over my data. There's no risk of my personal reading habits being accessed or mined by third parties. </span><br /> +<br /> +<h3 style='display: inline' id='installation'>Installation</h3><br /> +<br /> +<span>Installing KOReader is straightforward. You can follow the official guide for that. I used the Linux one: </span><br /> +<br /> +<a class='textlink' href='https://github.com/koreader/koreader/wiki/Installation-on-desktop-linux'>https://github.com/koreader/koreader/wiki/Installation-on-desktop-linux</a><br /> +<br /> +<span>Basically, what I had to do is to download a .zip file of the KOReader binary and an <span class='inlinecode'>install.sh</span> script. Then, I plugged in the Kobo Forma via USB and ran the install script, which did the rest for me.</span><br /> +<br /> +<span>After the initial install, KOReader can update itself through its menus.</span><br /> +<br /> +<span>It is worth noting that after the KOReader install, the Kobo Forma still boots into the proprietary window manager. To start KOReader, you have to select it from the new "Nickel Menu". KOReader will then stay open until you reboot the device. It's a small annoyance, but it's well worth it!</span><br /> +<br /> +<a href='./cloudless-kobo-forma-with-koreader/nickel-menu.jpg'><img alt='Nickel Menu' title='Nickel Menu' src='./cloudless-kobo-forma-with-koreader/nickel-menu.jpg' /></a><br /> +<br /> +<h2 style='display: inline' id='sideloaded-mode'>Sideloaded Mode</h2><br /> +<br /> +<h3 style='display: inline' id='enablement'>Enablement</h3><br /> +<br /> +<span>To use the Kobo Forma completely without a Kobo account, you can enable "Sideloaded Mode". This mode allows you to use the device without being signed in to a Kobo account, which is perfect for a cloudless setup. When enabled, the home screen will default to your library instead of showing Kobo recommendations, and the sync button will disappear. This prevents the device from trying to sync with the Kobo cloud.</span><br /> +<br /> +<span>To enable it, you need to edit the configuration file. Connect your Kobo device to your computer via USB. Open the file <span class='inlinecode'>.kobo/Kobo/Kobo eReader.conf</span> and add the following lines:</span><br /> +<br /> +<pre> +[ApplicationPreferences] +SideloadedMode=true +</pre> +<br /> +<span>After saving the file, eject the device. You might need to restart it for the changes to take effect.</span><br /> +<br /> +<h3 style='display: inline' id='benefits'>Benefits</h3><br /> +<br /> +<span>KOReader is much faster than the stock firmware; it feels about three times as fast. Before trying out KOReader, I was thinking about selling the Forma as it felt too sluggish. But now there is new life in this 7-year-old device! It also offers a night mode (inverted colors), a feature that the stock firmware on the Forma is lacking.</span><br /> +<br /> +<h2 style='display: inline' id='my-workflow'>My Workflow</h2><br /> +<br /> +<span>My workflow is simple and efficient, relying on a direct USB connection to my Linux laptop for sideloading books and a self-hosted sync server for progress synchronization.</span><br /> +<br /> +<h3 style='display: inline' id='sideloading-books'>Sideloading Books</h3><br /> +<br /> +<span>I connect my Kobo Forma to my Linux laptop via a USB-C cable. The device is automatically recognized as a storage device, and I can directly access its storage to copy over ePubs, PDFs, and other supported formats.</span><br /> +<br /> +<h3 style='display: inline' id='koreader-sync-server'>KOReader Sync Server</h3><br /> +<br /> +<span>To keep my reading progress synchronized across multiple devices (my Kobo, my phone, and my Linux laptop), I run a <span class='inlinecode'>koreader-sync-server</span> instance in my k3s cluster. This allows me to pick up reading where I left off, no matter which device I'm using.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/conf/src/branch/master/f3s/kobo-sync-server'>https://codeberg.org/snonux/conf/src/branch/master/f3s/kobo-sync-server</a><br /> +<br /> +<span>To configure the sync server in KOReader, open a document, go to "Settings" -> "Progress Sync", and select "Custom sync server". There you can enter the URL of your server and your credentials.</span><br /> +<br /> +<a href='./cloudless-kobo-forma-with-koreader/koreader-sync.jpg'><img alt='KOReader sync menu' title='KOReader sync menu' src='./cloudless-kobo-forma-with-koreader/koreader-sync.jpg' /></a><br /> +<br /> +<h3 style='display: inline' id='exporting-book-notes-and-highlights'>Exporting Book Notes and Highlights</h3><br /> +<br /> +<span>KOReader allows you to export book notes and highlights directly from the device in various formats, including plain text and Markdown. Unfortunately, these are not automatically synced to the sync server. I have an offline backup procedure where I regularly sync them via USB to my backup server. There's a 3rd party plugin available for KOReader, which seems to be able to do this kind of sync, though.</span><br /> +<br /> +<h3 style='display: inline' id='wallabag-integration'>Wallabag Integration</h3><br /> +<br /> +<span>KOReader has built-in Wallabag support. This allows me to save articles from the web to my self-hosted Wallabag instance and then read them comfortably on my Kobo.</span><br /> +<br /> +<a class='textlink' href='https://wallabag.org/'>https://wallabag.org/</a><br /> +<br /> +<h2 style='display: inline' id='conclusion'>Conclusion</h2><br /> +<br /> +<span>The Kobo Forma with KOReader has become an indispensable tool for me. By using it offline and with self-hosted services, I've created a distraction-free and private reading environment. The simple, manual workflow for transferring books gives me full control over my data, and the reading experience is second to none. If you're looking for a digital e-reader that respects your privacy and helps you focus, I highly recommend giving the Kobo a try with an offline-first approach using KOReader.</span><br /> +<br /> +<span>Other related posts:</span><br /> +<br /> +<br /> +<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br /> +<br /> +<a class='textlink' href='../'>Back to the main site</a><br /> +<p class="footer"> + Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> | + served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> | + <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a> + <br /> + Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a> +</p> +</body> +</html> diff --git a/gemfeed/DRAFT-cloudless-kobo-forma.html b/gemfeed/DRAFT-cloudless-kobo-forma.html new file mode 100644 index 00000000..86e21eaf --- /dev/null +++ b/gemfeed/DRAFT-cloudless-kobo-forma.html @@ -0,0 +1,123 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<title>Cloudless Kobo Forma</title> +<link rel="shortcut icon" type="image/gif" href="/favicon.ico" /> +<link rel="stylesheet" href="../style.css" /> +<link rel="stylesheet" href="style-override.css" /> +</head> +<body> +<p class="header"> +<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/DRAFT-cloudless-kobo-forma.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/DRAFT-cloudless-kobo-forma.gmi">Gemini</a> +</p> +<h1 style='display: inline' id='cloudless-kobo-forma'>Cloudless Kobo Forma</h1><br /> +<br /> +<span>I am an avid reader, and for years I've been searching for a good digital e-reader to complement my paper books. I advocate for privacy-first and prefer open-source or self-hosted solutions. If that is not possible, I opt for offline solutions. Even if I don't have anything to hide, the tinkerer in me wants those things anyway. I found my ideal device in the Kobo Forma 7 years ago. Now, I use it without Kobo's cloud sync, and in this post, I'll show you how.</span><br /> +<br /> +<a class='textlink' href='https://en.wikipedia.org/wiki/Kobo_Forma'>Kobo Forma</a><br /> +<br /> +<span>I initially bought the Kobo Forma because I wanted a device with a large screen for reading PDFs and ePubs. However, as time passed by, I became more and more concerned about the privacy implications of having all my reading data synced to the Kobo cloud. So, I looked into alternative ways to use this device.</span><br /> +<br /> +<pre> +Art by Donovan Bake + + __...--~~~~~-._ _.-~~~~~--...__ + // `V' \\ + // | \\ + //__...--~~~~~~-._ | _.-~~~~~~--...__\\ + //__.....----~~~~._\ | /_.~~~~----.....__\\ +====================\\|//==================== + dwb `---` +</pre> +<br /> +<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br /> +<br /> +<ul> +<li><a href='#cloudless-kobo-forma'>Cloudless Kobo Forma</a></li> +<li>⇢ <a href='#koreader-to-the-rescue'>KOReader to the Rescue</a></li> +<li>⇢ ⇢ <a href='#installation'>Installation</a></li> +<li>⇢ <a href='#sideloaded-mode'>Sideloaded Mode</a></li> +<li>⇢ ⇢ <a href='#enablement'>Enablement</a></li> +<li>⇢ ⇢ <a href='#benefits'>Benefits</a></li> +<li>⇢ <a href='#my-workflow'>My Workflow</a></li> +<li>⇢ ⇢ <a href='#sideloading-books'>Sideloading Books</a></li> +<li>⇢ ⇢ <a href='#koreader-sync-server'>KOReader Sync Server</a></li> +<li>⇢ ⇢ <a href='#wallabag-integration'>Wallabag Integration</a></li> +<li>⇢ <a href='#conclusion'>Conclusion</a></li> +</ul><br /> +<h2 style='display: inline' id='koreader-to-the-rescue'>KOReader to the Rescue</h2><br /> +<br /> +<span>In a world of constant connectivity, the Kobo Forma with KOReader offers a way out. By keeping it disconnected from the cloud, I can focus on my reading without compromising my privacy. KOReader is a versatile, open-source document and image viewer which can also be installed on some E Ink reader devices like the Kobo Forma.</span><br /> +<br /> +<a class='textlink' href='https://koreader.rocks/'>KOReader</a><br /> +<br /> +<span>By not syncing my reading progress and library to Kobo's cloud service, I retain full ownership and control over my data. There's no risk of my personal reading habits being accessed or mined by third parties. </span><br /> +<br /> +<h3 style='display: inline' id='installation'>Installation</h3><br /> +<br /> +<span>Installing KOReader is straightforward. You can follow the official guide for that. I used the Linux one: </span><br /> +<br /> +<a class='textlink' href='https://github.com/koreader/koreader/wiki/Installation-on-desktop-linux'>https://github.com/koreader/koreader/wiki/Installation-on-desktop-linux</a><br /> +<br /> +<span>Basically, what I had to do is to download a .zip file of the KOReader binary and an <span class='inlinecode'>install.sh</span> script. Then, I plugged in the Kobo Forma via USB and ran the install script, which did the rest for me.</span><br /> +<br /> +<span>After the initial install, KOReader can update itself through its menus.</span><br /> +<br /> +<h2 style='display: inline' id='sideloaded-mode'>Sideloaded Mode</h2><br /> +<br /> +<h3 style='display: inline' id='enablement'>Enablement</h3><br /> +<br /> +<span>To use the Kobo Forma completely without a Kobo account, you can enable "Sideloaded Mode". This mode allows you to use the device without being signed in to a Kobo account, which is perfect for a cloudless setup. When enabled, the home screen will default to your library instead of showing Kobo recommendations, and the sync button will disappear. This prevents the device from trying to sync with the Kobo cloud.</span><br /> +<br /> +<span>To enable it, you need to edit the configuration file. Connect your Kobo device to your computer via USB. Open the file <span class='inlinecode'>.kobo/Kobo/Kobo eReader.conf</span> and add the following lines:</span><br /> +<br /> +<pre> +[ApplicationPreferences] +SideloadedMode=true +</pre> +<br /> +<span>After saving the file, eject the device. You might need to restart it for the changes to take effect.</span><br /> +<br /> +<h3 style='display: inline' id='benefits'>Benefits</h3><br /> +<br /> +<span>KOReader is much faster than the stock firmware; it feels about three times as fast. Before trying out KOReader, I was thinking about selling the Forma as it felt too sluggish. But now there is new life in this 7-year-old device! It also offers a night mode (inverted colors), a feature that the stock firmware on the Forma is lacking.</span><br /> +<br /> +<h2 style='display: inline' id='my-workflow'>My Workflow</h2><br /> +<br /> +<span>My workflow is simple and efficient, relying on a direct USB connection to my Linux laptop for sideloading books and a self-hosted sync server for progress synchronization.</span><br /> +<br /> +<h3 style='display: inline' id='sideloading-books'>Sideloading Books</h3><br /> +<br /> +<span>I connect my Kobo Forma to my Linux laptop via a USB-C cable. The device is automatically recognized as a storage device, and I can directly access its storage to copy over ePubs, PDFs, and other supported formats.</span><br /> +<br /> +<h3 style='display: inline' id='koreader-sync-server'>KOReader Sync Server</h3><br /> +<br /> +<span>To keep my reading progress synchronized across multiple devices (my Kobo, my phone, and my Linux laptop), I run a <span class='inlinecode'>koreader-sync-server</span> instance in my k3s cluster. This allows me to pick up reading where I left off, no matter which device I'm using.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/conf/src/branch/master/f3s/kobo-sync-server'>https://codeberg.org/snonux/conf/src/branch/master/f3s/kobo-sync-server</a><br /> +<br /> +<span>To configure the sync server in KOReader, open a document, go to "Settings" -> "Progress Sync", and select "Custom sync server". There you can enter the URL of your server and your credentials.</span><br /> +<br /> +<h3 style='display: inline' id='wallabag-integration'>Wallabag Integration</h3><br /> +<br /> +<span>KOReader has built-in Wallabag support. This allows me to save articles from the web to my self-hosted Wallabag instance and then read them comfortably on my Kobo.</span><br /> +<br /> +<a class='textlink' href='https://wallabag.org/'>https://wallabag.org/</a><br /> +<br /> +<h2 style='display: inline' id='conclusion'>Conclusion</h2><br /> +<br /> +<span>The Kobo Forma with KOReader has become an indispensable tool for me. By using it offline and with self-hosted services, I've created a distraction-free and private reading environment. The simple, manual workflow for transferring books gives me full control over my data, and the reading experience is second to none. If you're looking for a digital e-reader that respects your privacy and helps you focus, I highly recommend giving the Kobo a try with an offline-first approach using KOReader.</span><br /> +<br /> +<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br /> +<br /> +<a class='textlink' href='../'>Back to the main site</a><br /> +<p class="footer"> + Generated with <a href="https://codeberg.org/snonux/gemtexter">Gemtexter 3.0.1-develop</a> | + served by <a href="https://www.OpenBSD.org">OpenBSD</a>/<a href="https://man.openbsd.org/relayd.8">relayd(8)</a>+<a href="https://man.openbsd.org/httpd.8">httpd(8)</a> | + <a href="https://foo.zone/site-mirrors.html">Site Mirrors</a> + <br /> + Webring: <a href="https://shring.sh/foo.zone/previous">previous</a> | <a href="https://shring.sh">shring</a> | <a href="https://shring.sh/foo.zone/next">next</a> +</p> +</body> +</html> diff --git a/gemfeed/DRAFT-perl-new-features-and-foostats.html b/gemfeed/DRAFT-perl-new-features-and-foostats.html index 7be16889..207387f1 100644 --- a/gemfeed/DRAFT-perl-new-features-and-foostats.html +++ b/gemfeed/DRAFT-perl-new-features-and-foostats.html @@ -20,7 +20,7 @@ <ul> <li>I wanted an excuse to explore the newer features of my first programming love.</li> <li>Perl ships with OpenBSD (the operating system on which my sites run) by default</li> -<li>It really does live up to its Practical Extraction and Report Language (that's where the name Perl means) for this kind of log grinding.</li> +<li>It really does live up to its Practical Extraction and Report Language (that's where the name Perl means) for this kind of log grinding I did with foostats.</li> </ul><br /> <a class='textlink' href='https://developers.slashdot.org/story/25/09/14/0134239/is-perl-the-worlds-10th-most-popular-programming-language'>Perl re-enters the top ten</a><br /> <a class='textlink' href='https://perlschool.com/books/perl-new-features/'>Perl New Features by Joshua McAdams and brian d foy</a><br /> diff --git a/gemfeed/DRAFT-using-supernote-nomad-offline.html b/gemfeed/DRAFT-using-supernote-nomad-offline.html index 5b505138..1010bd9c 100644 --- a/gemfeed/DRAFT-using-supernote-nomad-offline.html +++ b/gemfeed/DRAFT-using-supernote-nomad-offline.html @@ -148,6 +148,9 @@ copy <br /> <span>The Supernote didn't fully replace my traditional paper journals, though. Each of them has its own use case. However, that is outside the scope of this blog post.</span><br /> <br /> +<span>Other related posts:</span><br /> +<br /> +<br /> <span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br /> <br /> <a class='textlink' href='../'>Back to the main site</a><br /> diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index 9341893b..4f986131 100644 --- a/gemfeed/atom.xml +++ b/gemfeed/atom.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> - <updated>2025-10-12T22:45:20+03:00</updated> + <updated>2025-10-23T09:26:00+03:00</updated> <title>foo.zone feed</title> <subtitle>To be in the .zone!</subtitle> <link href="https://foo.zone/gemfeed/atom.xml" rel="self" /> @@ -1320,6 +1320,7 @@ replicaset.apps/miniflux-server-85d7c64664 1 1 1 54d <br /> <ul> <li><span class='inlinecode'>anki-sync-server</span> — custom-built image served from the private registry, stores decks on <span class='inlinecode'>/data/nfs/k3svolumes/anki-sync-server/anki_data</span>, and authenticates through the <span class='inlinecode'>anki-sync-server-secret</span>.</li> +<li><span class='inlinecode'>koreade-sync-server</span> — Sync server for KOReader.</li> <li><span class='inlinecode'>audiobookshelf</span> — media streaming stack with three hostPath mounts (<span class='inlinecode'>config</span>, <span class='inlinecode'>audiobooks</span>, <span class='inlinecode'>podcasts</span>) so the library survives node rebuilds.</li> <li><span class='inlinecode'>example-apache</span> — minimal HTTP service I use for smoke-testing ingress and relayd rules.</li> <li><span class='inlinecode'>example-apache-volume-claim</span> — Apache plus PVC variant that exercises NFS-backed storage for walkthroughs like the one earlier in this post.</li> diff --git a/gemfeed/cloudless-kobo-forma-with-koreader/forma.jpg b/gemfeed/cloudless-kobo-forma-with-koreader/forma.jpg Binary files differnew file mode 100644 index 00000000..c2169658 --- /dev/null +++ b/gemfeed/cloudless-kobo-forma-with-koreader/forma.jpg diff --git a/gemfeed/cloudless-kobo-forma-with-koreader/koreader-sync.jpg b/gemfeed/cloudless-kobo-forma-with-koreader/koreader-sync.jpg Binary files differnew file mode 100644 index 00000000..5b31816e --- /dev/null +++ b/gemfeed/cloudless-kobo-forma-with-koreader/koreader-sync.jpg diff --git a/gemfeed/cloudless-kobo-forma-with-koreader/nickel-menu.jpg b/gemfeed/cloudless-kobo-forma-with-koreader/nickel-menu.jpg Binary files differnew file mode 100644 index 00000000..91695703 --- /dev/null +++ b/gemfeed/cloudless-kobo-forma-with-koreader/nickel-menu.jpg diff --git a/gemfeed/input/kobooffline.md b/gemfeed/input/kobooffline.md new file mode 100644 index 00000000..3eca3bfe --- /dev/null +++ b/gemfeed/input/kobooffline.md @@ -0,0 +1,10 @@ +# Kobo offline use + +* Installation of koreader on Kobo Forma +* Much faster now it feels than the stock firmware (3x as fast i think), which is great +* Sideload mode configuration +* Koreader sync server in my k3s cluster .. see https://codeberg.org/snonux/conf/src/branch/master/f3s/kobo-sync-server +* Koreader on GrapheneOS and sync server there as well available, so i can sync reading progress +* any way to sync/download books via remote server> +* wallabag integration koreader +* night mode (inverted) on forma!!!! a feature which doesn't exist in the stock Kobo firmware on the Forma! diff --git a/gemfeed/using-supernote-nomad-offline/nomad1.jpg b/gemfeed/using-supernote-nomad-offline/nomad1.jpg Binary files differindex 901fa73b..d955c3ab 100644 --- a/gemfeed/using-supernote-nomad-offline/nomad1.jpg +++ b/gemfeed/using-supernote-nomad-offline/nomad1.jpg diff --git a/gemfeed/using-supernote-nomad-offline/nomad2.jpg b/gemfeed/using-supernote-nomad-offline/nomad2.jpg Binary files differindex 896ee299..eaa0e914 100644 --- a/gemfeed/using-supernote-nomad-offline/nomad2.jpg +++ b/gemfeed/using-supernote-nomad-offline/nomad2.jpg @@ -13,7 +13,7 @@ </p> <h1 style='display: inline' id='hello'>Hello!</h1><br /> <br /> -<span class='quote'>This site was generated at 2025-10-17T20:27:09+03:00 by <span class='inlinecode'>Gemtexter</span></span><br /> +<span class='quote'>This site was generated at 2025-10-23T09:26:00+03:00 by <span class='inlinecode'>Gemtexter</span></span><br /> <br /> <span>Welcome to the foo.zone!</span><br /> <br /> diff --git a/uptime-stats.html b/uptime-stats.html index faea51e3..c2e22135 100644 --- a/uptime-stats.html +++ b/uptime-stats.html @@ -13,7 +13,7 @@ </p> <h1 style='display: inline' id='my-machine-uptime-stats'>My machine uptime stats</h1><br /> <br /> -<span class='quote'>This site was last updated at 2025-10-17T20:27:09+03:00</span><br /> +<span class='quote'>This site was last updated at 2025-10-23T09:26:00+03:00</span><br /> <br /> <span>The following stats were collected via <span class='inlinecode'>uptimed</span> on all of my personal computers over many years and the output was generated by <span class='inlinecode'>guprecords</span>, the global uptime records stats analyser of mine.</span><br /> <br /> @@ -46,13 +46,13 @@ | 10. | *f0 | 62 | FreeBSD 14.3-RELEASE | | 11. | uranus | 59 | NetBSD 10.1 | | 12. | pluto | 51 | Linux 3.2.0-4-amd64 | -| 13. | *mega-m3-pro | 50 | Darwin 24.6.0 | -| 14. | mega15289 | 50 | Darwin 23.4.0 | +| 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 | | 17. | *blowfish | 43 | OpenBSD 7.7 | -| 18. | phobos | 40 | Linux 3.4.0-CM-g1dd7cdf | -| 19. | mega8477 | 40 | Darwin 13.4.0 | +| 18. | mega8477 | 40 | Darwin 13.4.0 | +| 19. | phobos | 40 | Linux 3.4.0-CM-g1dd7cdf | | 20. | sun | 33 | FreeBSD 10.3-RELEASE-p24 | +-----+----------------+-------+-------------------------------+ </pre> @@ -66,8 +66,8 @@ | Pos | Host | Uptime | Last Kernel | +-----+----------------+-----------------------------+-----------------------------------+ | 1. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 | -| 2. | *blowfish | 3 years, 10 months, 2 days | OpenBSD 7.7 | -| 3. | *earth | 3 years, 10 months, 2 days | Linux 6.16.10-200.fc42.x86_64 | +| 2. | *earth | 3 years, 10 months, 9 days | Linux 6.16.10-200.fc42.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 | | 6. | uugrn | 3 years, 5 months, 5 days | FreeBSD 11.2-RELEASE-p4 | @@ -78,7 +78,7 @@ | 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, 5 days | Darwin 24.6.0 | +| 14. | *mega-m3-pro | 1 years, 5 months, 12 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 | @@ -98,7 +98,7 @@ +-----+----------------+-------+-----------------------------------+ | 1. | uranus | 340 | NetBSD 10.1 | | 2. | vulcan | 275 | Linux 3.10.0-1160.81.1.el7.x86_64 | -| 3. | *earth | 264 | Linux 6.16.10-200.fc42.x86_64 | +| 3. | *earth | 265 | Linux 6.16.10-200.fc42.x86_64 | | 4. | *blowfish | 243 | OpenBSD 7.7 | | 5. | sun | 238 | FreeBSD 10.3-RELEASE-p24 | | 6. | uugrn | 211 | FreeBSD 11.2-RELEASE-p4 | @@ -113,7 +113,7 @@ | 15. | *t450 | 122 | 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 | 91 | Darwin 24.6.0 | +| 18. | *mega-m3-pro | 92 | Darwin 24.6.0 | | 19. | callisto | 86 | Linux 4.0.4-303.fc22.x86_64 | | 20. | mega8477 | 80 | Darwin 13.4.0 | +-----+----------------+-------+-----------------------------------+ @@ -163,7 +163,7 @@ | 3. | alphacentauri | 6 years, 9 months, 13 days | FreeBSD 11.4-RELEASE-p7 | | 4. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 | | 5. | makemake | 4 years, 4 months, 7 days | Linux 6.9.9-200.fc40.x86_64 | -| 6. | *earth | 4 years, 3 months, 22 days | Linux 6.16.10-200.fc42.x86_64 | +| 6. | *earth | 4 years, 3 months, 29 days | Linux 6.16.10-200.fc42.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 | @@ -200,15 +200,15 @@ | 9. | *OpenBSD 7... | 99 | | 10. | Darwin 13... | 40 | | 11. | Darwin 23... | 30 | -| 12. | FreeBSD 5... | 25 | -| 13. | *Darwin 24... | 25 | +| 12. | *Darwin 24... | 25 | +| 13. | FreeBSD 5... | 25 | | 14. | Linux 2... | 22 | | 15. | Darwin 21... | 17 | | 16. | Darwin 15... | 15 | | 17. | Darwin 22... | 12 | | 18. | Darwin 18... | 11 | -| 19. | FreeBSD 6... | 10 | -| 20. | FreeBSD 7... | 10 | +| 19. | FreeBSD 7... | 10 | +| 20. | FreeBSD 6... | 10 | +-----+----------------+-------+ </pre> <br /> @@ -224,7 +224,7 @@ | 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... | 2 years, 12 months, 29 days | +| 5. | *Linux 6... | 3 years, 1 months, 5 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 | @@ -232,7 +232,7 @@ | 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, 6 days | +| 13. | *Darwin 24... | 0 years, 9 months, 12 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 | @@ -255,7 +255,7 @@ | 2. | *OpenBSD 7... | 484 | | 3. | FreeBSD 10... | 406 | | 4. | Linux 5... | 317 | -| 5. | *Linux 6... | 207 | +| 5. | *Linux 6... | 209 | | 6. | Linux 4... | 175 | | 7. | *FreeBSD 14... | 161 | | 8. | FreeBSD 11... | 159 | @@ -263,7 +263,7 @@ | 10. | Darwin 13... | 80 | | 11. | FreeBSD 6... | 75 | | 12. | Darwin 23... | 56 | -| 13. | *Darwin 24... | 47 | +| 13. | *Darwin 24... | 48 | | 14. | OpenBSD 4... | 39 | | 15. | Darwin 21... | 38 | | 16. | Darwin 18... | 32 | @@ -298,10 +298,10 @@ +-----+------------+-----------------------------+ | Pos | KernelName | Uptime | +-----+------------+-----------------------------+ -| 1. | *Linux | 28 years, 1 months, 21 days | +| 1. | *Linux | 28 years, 1 months, 28 days | | 2. | *FreeBSD | 12 years, 2 months, 24 days | | 3. | *OpenBSD | 8 years, 2 months, 7 days | -| 4. | *Darwin | 4 years, 12 months, 24 days | +| 4. | *Darwin | 4 years, 12 months, 31 days | | 5. | NetBSD | 0 years, 1 months, 1 days | +-----+------------+-----------------------------+ </pre> @@ -314,10 +314,10 @@ +-----+------------+-------+ | Pos | KernelName | Score | +-----+------------+-------+ -| 1. | *Linux | 1866 | +| 1. | *Linux | 1868 | | 2. | *FreeBSD | 862 | | 3. | *OpenBSD | 523 | -| 4. | *Darwin | 330 | +| 4. | *Darwin | 331 | | 5. | NetBSD | 0 | +-----+------------+-------+ </pre> |
