diff options
| author | Paul Buetow <paul@buetow.org> | 2025-10-05 16:23:33 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-10-05 16:23:33 +0300 |
| commit | ac87651c9bb90ae688d23a7c6d70d61ca1907d85 (patch) | |
| tree | 9f5ad475bb5f8bd7e440500015c04b03413377dd | |
| parent | ff9f3a641fec256e1f4b01fcd95590451f656f0a (diff) | |
Update content for html
| -rw-r--r-- | about/index.html | 1 | ||||
| -rw-r--r-- | about/resources.html | 208 | ||||
| -rw-r--r-- | gemfeed/DRAFT-perl-new-features-and-foostats.html | 217 | ||||
| -rw-r--r-- | index.html | 2 | ||||
| -rw-r--r-- | uptime-stats.html | 54 |
5 files changed, 350 insertions, 132 deletions
diff --git a/about/index.html b/about/index.html index 9a344297..4b2bd7a6 100644 --- a/about/index.html +++ b/about/index.html @@ -46,6 +46,7 @@ <h3 style='display: inline' id='books-i-am-currently-reading'>Books I am currently reading</h3><br /> <br /> <ul> +<li>The Software Engineer's Guidebook: Navigating senior, tech lead, and staff engineer positions at tech companies and startups; Gergely Orosz; Audiobook </li> <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> diff --git a/about/resources.html b/about/resources.html index 57f73b1a..b4d33901 100644 --- a/about/resources.html +++ b/about/resources.html @@ -50,109 +50,109 @@ <span>In random order:</span><br /> <br /> <ul> -<li>Modern Perl; Chromatic ; Onyx Neon Press</li> -<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li> -<li>Java ist auch eine Insel; Christian Ullenboom; </li> -<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li> -<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> -<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li> -<li>Raku Recipes; J.J. Merelo; Apress</li> -<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> -<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li> -<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> -<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> -<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li> -<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li> -<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> -<li>The Docker Book; James Turnbull; Kindle</li> -<li>Ultimate Go Notebook; Bill Kennedy</li> -<li>Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly</li> -<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly</li> -<li>Effective awk programming; Arnold Robbins; O'Reilly</li> +<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li> +<li>DNS and BIND; Cricket Liu; O'Reilly</li> <li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li> +<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li> <li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li> <li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li> -<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly</li> +<li>Raku Recipes; J.J. Merelo; Apress</li> +<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</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>C++ Programming Language; Bjarne Stroustrup;</li> -<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> <li>Raku Fundamentals; Moritz Lenz; Apress</li> +<li>Java ist auch eine Insel; Christian Ullenboom; </li> <li>21st Century C: C Tips from the New School; Ben Klemens; O'Reilly</li> -<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> +<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> +<li>Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly</li> <li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li> -<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li> +<li>C++ Programming Language; Bjarne Stroustrup;</li> <li>Leanring eBPF; Liz Rice; O'Reilly</li> -<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li> -<li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li> -<li>Funktionale Programmierung; Peter Pepper; Springer</li> -<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> -<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li> -<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li> -<li>Developing Games in Java; David Brackeen and others...; New Riders</li> <li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly</li> -<li>Site Reliability Engineering; How Google runs production systems; O'Reilly</li> +<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li> +<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly</li> +<li>Modern Perl; Chromatic ; Onyx Neon Press</li> +<li>Funktionale Programmierung; Peter Pepper; Springer</li> +<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> +<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly</li> +<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> +<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li> +<li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li> +<li>The Docker Book; James Turnbull; Kindle</li> +<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li> +<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li> +<li>Data Science at the Command Line; Jeroen Janssens; O'Reilly</li> <li>Systemprogrammierung in Go; Frank Müller; dpunkt</li> -<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> -<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li> +<li>Developing Games in Java; David Brackeen and others...; New Riders</li> +<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li> +<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> +<li>Effective awk programming; Arnold Robbins; O'Reilly</li> +<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> +<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> +<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> <li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li> -<li>Data Science at the Command Line; Jeroen Janssens; O'Reilly</li> -<li>DNS and BIND; Cricket Liu; O'Reilly</li> +<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li> +<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> +<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li> +<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</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>Ultimate Go Notebook; Bill Kennedy</li> </ul><br /> <h2 style='display: inline' id='technical-references'>Technical references</h2><br /> <br /> <span>I didn't read them from the beginning to the end, but I am using them to look up things. The books are in random order:</span><br /> <br /> <ul> +<li>Relayd and Httpd Mastery; Michael W Lucas</li> +<li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li> +<li>Go: Design Patterns for Real-World Projects; Mat Ryer; Packt</li> +<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> +<li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly</li> <li>Implementing Service Level Objectives; Alex Hidalgo; O'Reilly</li> <li>Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly</li> -<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> <li>The Linux Programming Interface; Michael Kerrisk; No Starch Press </li> -<li>Go: Design Patterns for Real-World Projects; Mat Ryer; Packt</li> -<li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly</li> -<li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li> -<li>Relayd and Httpd Mastery; Michael W Lucas</li> </ul><br /> <h2 style='display: inline' id='self-development-and-soft-skills-books'>Self-development and soft-skills books</h2><br /> <br /> <span>In random order:</span><br /> <br /> <ul> -<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> -<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> -<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> +<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</li> +<li>Soft Skills; John Sommez; Manning Publications</li> +<li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li> +<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> +<li>Getting Things Done; David Allen</li> +<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li> <li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li> -<li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li> +<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</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>Deep Work; Cal Newport; Piatkus</li> -<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook</li> -<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li> -<li>Eat That Frog; Brian Tracy</li> -<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li> +<li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li> +<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li> +<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> <li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li> -<li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li> <li>Meditation for Mortals, Oliver Burkeman, Audiobook</li> -<li>The Power of Now; Eckhard Tolle; Yellow Kite</li> -<li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li> -<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> -<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li> -<li>Getting Things Done; David Allen</li> -<li>Ultralearning; Anna Laurent; Self-published via Amazon</li> -<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li> +<li>Eat That Frog; Brian Tracy</li> +<li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li> +<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK</li> <li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> -<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li> -<li>Soft Skills; John Sommez; Manning Publications</li> -<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</li> -<li>Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook</li> -<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li> +<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> +<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li> +<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> <li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li> +<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li> <li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li> -<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li> +<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li> +<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> <li>Ultralearning; Scott Young; Thorsons</li> -<li>Slow Productivity; Cal Newport; Penguin Random House</li> +<li>Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook</li> +<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li> +<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li> +<li>Ultralearning; Anna Laurent; Self-published via Amazon</li> +<li>The Power of Now; Eckhard Tolle; Yellow Kite</li> <li>Atomic Habits; James Clear; Random House Business</li> -<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> -<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li> -<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK</li> +<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook</li> +<li>Deep Work; Cal Newport; Piatkus</li> +<li>Slow Productivity; Cal Newport; Penguin Random House</li> </ul><br /> <a class='textlink' href='../notes/index.html'>Here are notes of mine for some of the books</a><br /> <br /> @@ -161,31 +161,31 @@ <span>Some of these were in-person with exams; others were online learning lectures only. In random order:</span><br /> <br /> <ul> -<li>AWS Immersion Day; Amazon; 1-day interactive online training </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>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> -<li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li> -<li>Functional programming lecture; Remote University of Hagen</li> <li>Developing IaC with Terraform (with Live Lessons); O'Reilly Online</li> +<li>Protocol buffers; O'Reilly Online</li> +<li>Scripting Vim; Damian Conway; O'Reilly Online</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>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> +<li>The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online</li> <li>Linux Security and Isolation APIs Training; Michael Kerrisk; 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>MySQL Deep Dive Workshop; 2-day on-site training</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>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>Protocol buffers; O'Reilly Online</li> <li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li> -<li>Scripting Vim; Damian Conway; 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>Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online</li> +<li>AWS Immersion Day; Amazon; 1-day interactive online training </li> +<li>MySQL Deep Dive Workshop; 2-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> </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>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 /> @@ -194,61 +194,61 @@ <span>In random order:</span><br /> <br /> <ul> -<li>Dev Interrupted</li> -<li>Backend Banter</li> -<li>BSD Now [BSD]</li> -<li>Maintainable</li> <li>The ProdCast (Google SRE Podcast)</li> -<li>Fallthrough [Golang]</li> -<li>Wednesday Wisdom</li> -<li>The Changelog Podcast(s)</li> -<li>Fork Around And Find Out</li> -<li>Cup o' Go [Golang]</li> -<li>Deep Questions with Cal Newport</li> -<li>Hidden Brain</li> +<li>Backend Banter</li> <li>Pratical AI</li> +<li>Deep Questions with Cal Newport</li> <li>The Pragmatic Engineer Podcast</li> +<li>The Changelog Podcast(s)</li> +<li>Hidden Brain</li> +<li>Fork Around And Find Out</li> +<li>BSD Now [BSD]</li> +<li>Fallthrough [Golang]</li> <li>Modern Mentor</li> +<li>Maintainable</li> +<li>Cup o' Go [Golang]</li> +<li>Dev Interrupted</li> +<li>Wednesday Wisdom</li> </ul><br /> <h3 style='display: inline' id='podcasts-i-liked'>Podcasts I liked</h3><br /> <br /> <span>I liked them but am not listening to them anymore. The podcasts have either "finished" (no more episodes) or I stopped listening to them due to time constraints or a shift in my interests.</span><br /> <br /> <ul> +<li>Ship It (predecessor of Fork Around And Find Out)</li> <li>Go Time (predecessor of fallthrough)</li> +<li>Modern Mentor</li> +<li>Java Pub House</li> <li>CRE: Chaosradio Express [german]</li> -<li>Ship It (predecessor of Fork Around And Find Out)</li> <li>FLOSS weekly</li> -<li>Java Pub House</li> -<li>Modern Mentor</li> </ul><br /> <h2 style='display: inline' id='newsletters-i-like'>Newsletters I like</h2><br /> <br /> <span>This is a mix of tech and non-tech newsletters I am subscribed to. In random order:</span><br /> <br /> <ul> -<li>Changelog News</li> -<li>The Valuable Dev</li> <li>Andreas Brandhorst Newsletter (Sci-Fi author)</li> -<li>The Imperfectionist</li> -<li>Golang Weekly</li> -<li>Monospace Mentor</li> -<li>Ruby Weekly</li> -<li>Applied Go Weekly Newsletter</li> <li>The Pragmatic Engineer</li> +<li>Ruby Weekly</li> +<li>Register Spill</li> <li>VK Newsletter</li> +<li>Changelog News</li> +<li>Golang Weekly</li> +<li>Applied Go Weekly Newsletter</li> +<li>The Imperfectionist</li> +<li>The Valuable Dev</li> +<li>Monospace Mentor</li> <li>byteSizeGo</li> -<li>Register Spill</li> </ul><br /> <h2 style='display: inline' id='magazines-i-liked'>Magazines I like(d)</h2><br /> <br /> <span>This is a mix of tech I like(d). I may not be a current subscriber, but now and then, I buy an issue. In random order:</span><br /> <br /> <ul> -<li>Linux User</li> +<li>freeX (not published anymore)</li> <li>LWN (online only)</li> <li>Linux Magazine</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/gemfeed/DRAFT-perl-new-features-and-foostats.html b/gemfeed/DRAFT-perl-new-features-and-foostats.html new file mode 100644 index 00000000..7be16889 --- /dev/null +++ b/gemfeed/DRAFT-perl-new-features-and-foostats.html @@ -0,0 +1,217 @@ +<!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>Perl New Features and Foostats</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-perl-new-features-and-foostats.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/DRAFT-perl-new-features-and-foostats.gmi">Gemini</a> +</p> +<h1 style='display: inline' id='perl-new-features-and-foostats'>Perl New Features and Foostats</h1><br /> +<br /> +<span>Perl just reached rank 10 in the TIOBE index. That headline matches my day-to-day reality because I keep developing the foostats script for simple analytics of my personal websites and Gemini capsules (e.g. <span class='inlinecode'>foo.zone</span>), and almost every Perl release adds new features which make life better. The book *Perl New Features* by brian d foy documents the changes well; this post shows how those features look in a real program that runs every morning for my stats generation.</span><br /> +<br /> +<span>Even though nowadays I code more in Go and Ruby, I stuck with Perl for foostats for three simple reasons:</span><br /> +<br /> +<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> +</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 /> +<br /> +<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br /> +<br /> +<ul> +<li><a href='#perl-new-features-and-foostats'>Perl New Features and Foostats</a></li> +<li>⇢ <a href='#inside-foostats'>Inside foostats</a></li> +<li>⇢ ⇢ <a href='#log-pipeline'>Log pipeline</a></li> +<li>⇢ ⇢ <a href='#aggregation-and-output'>Aggregation and output</a></li> +<li>⇢ ⇢ <a href='#command-line-entry-points'>Command-line entry points</a></li> +<li>⇢ <a href='#packages-as-real-blocks'>Packages as real blocks</a></li> +<li>⇢ ⇢ <a href='#scoped-packages'>Scoped packages</a></li> +<li>⇢ <a href='#postfix-deref-keeps-data-structures-tidy'>Postfix deref keeps data structures tidy</a></li> +<li>⇢ ⇢ <a href='#clear-dereferencing'>Clear dereferencing</a></li> +<li>⇢ ⇢ <a href='#simpler-merge-loops'>Simpler merge loops</a></li> +<li>⇢ <a href='#lexical-subs-promote-local-reasoning'>Lexical subs promote local reasoning</a></li> +<li>⇢ ⇢ <a href='#helpers-that-stay-local'>Helpers that stay local</a></li> +<li>⇢ <a href='#ref-aliasing-makes-intent-explicit'>Ref aliasing makes intent explicit</a></li> +<li>⇢ ⇢ <a href='#shared-data-on-purpose'>Shared data on purpose</a></li> +<li>⇢ <a href='#persistent-state-without-globals'>Persistent state without globals</a></li> +<li>⇢ ⇢ <a href='#rate-limiting-state'>Rate limiting state</a></li> +<li>⇢ ⇢ <a href='#deduplicated-logging'>Deduplicated logging</a></li> +<li>⇢ <a href='#subroutine-signatures-clarify-every-call-site'>Subroutine signatures clarify every call site</a></li> +<li>⇢ ⇢ <a href='#normal-subroutine-signatures-now'>"normal" subroutine signatures now</a></li> +<li>⇢ <a href='#defined-or-assignment-keeps-defaults-obvious'>Defined-or assignment keeps defaults obvious</a></li> +<li>⇢ ⇢ <a href='#defaults-without-boilerplate'>Defaults without boilerplate</a></li> +<li>⇢ <a href='#say-is-the-default-voice-now'><span class='inlinecode'>say</span> is the default voice now</a></li> +<li>⇢ <a href='#cleanup-with-defer'>Cleanup with <span class='inlinecode'>defer</span></a></li> +<li>⇢ <a href='#builtins-and-booleans'>Builtins and booleans</a></li> +<li>⇢ <a href='#conclusion'>Conclusion</a></li> +</ul><br /> +<h2 style='display: inline' id='inside-foostats'>Inside foostats</h2><br /> +<br /> +<span>Foostats is simply a log file analyser.</span><br /> +<br /> +<h3 style='display: inline' id='log-pipeline'>Log pipeline</h3><br /> +<br /> +<span>A cron job starts Foostats, reads OpenBSD httpd and relayd access logs, and produces the numbers published at <span class='inlinecode'>https://stats.foo.zone</span> and <span class='inlinecode'>gemini://stats.foo.zone</span>. The dashboards are humble because traffic on my sites is still light, yet the trends are interesting for spotting patterns. The script is opinionated, and I will probably be the only one ever using it for my own sites. However, the code demonstrates how Perl's newer features help keep a small script like this exciting and fun!</span><br /> +<br /> +<span>On OpenBSD, I've configured the job via the <span class='inlinecode'>daily.local</span> on both servers (<span class='inlinecode'>fishfinger</span> and <span class='inlinecode'>blowfish</span>):</span><br /> +<br /> +<!-- Generator: GNU source-highlight 3.1.9 +by Lorenzo Bettini +http://www.lorenzobettini.it +http://www.gnu.org/software/src-highlite --> +<pre>fishfinger$ grep foostats /etc/daily.<b><u><font color="#000000">local</font></u></b> +perl /usr/local/bin/foostats.pl --parse-logs --replicate --report +</pre> +<br /> +<span>Internally, <span class='inlinecode'>Foostats::Logreader</span> parses each line of the log files <span class='inlinecode'>/var/log/daemon*</span> and <span class='inlinecode'>/var/www/logs/access_log*</span>, turns timestamps into YYYYMMDD/HHMMSS values, hashes IP addresses with SHA3 (for anonymisation), and hands a normalised event to <span class='inlinecode'>Foostats::Filter</span>. The filter compares the URI against entries in <span class='inlinecode'>fooodds.txt</span>, tracks how many times an IP address requests within the exact second, and drops anything suspicious (e.g., from web crawlers or malicious attackers). Valid events reach <span class='inlinecode'>Foostats::Aggregator</span>, which counts requests per protocol, records unique visitors for the Gemtext and Atom feeds, and remembers page-level IP sets. <span class='inlinecode'>Foostats::FileOutputter</span> writes the result as gzipped JSON files—one per day and per protocol—with IPv4/IPv6 splits, filtered counters, feed readership, and hashes for long URLs.</span><br /> +<br /> +<h3 style='display: inline' id='aggregation-and-output'>Aggregation and output</h3><br /> +<br /> +<span>Foostats also merges the stats from both hosts, master and standby. For the master-standby setup description, read:</span><br /> +<br /> +<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>KISS high-availability with OpenBSD</a><br /> +<br /> +<span>Those gz files land in <span class='inlinecode'>stats/</span>. From there, <span class='inlinecode'>Foostats::Replicator</span> can pull matching files from the partner host (<span class='inlinecode'>fishfinger</span> or <span class='inlinecode'>blowfish</span>) so the view covers both servers, <span class='inlinecode'>Foostats::Merger</span> combines them into daily summaries, and <span class='inlinecode'>Foostats::Reporter</span> rebuilds Gemtext and HTML reports.</span><br /> +<br /> +<a class='textlink' href='https://blowfish.buetow.org/foostats/'>https://blowfish.buetow.org/foostats/</a><br /> +<a class='textlink' href='https://fishfinger.buetow.org/foostats/'>https://fishfinger.buetow.org/foostats/</a><br /> +<br /> +<span>These are the 30-day reports generated:</span><br /> +<br /> +<a class='textlink' href='gemini://stats.foo.zone'>stats.foo.zone Gemini capsule dashboard</a><br /> +<a class='textlink' href='https://stats.foo.zone'>stats.foo.zone HTTP dashboard</a><br /> +<br /> +<h3 style='display: inline' id='command-line-entry-points'>Command-line entry points</h3><br /> +<br /> +<span><span class='inlinecode'>foostats_main</span> is the command entry point. <span class='inlinecode'>--parse-logs</span> refreshes the gz files, <span class='inlinecode'>--replicate</span> runs the cross-host sync, and <span class='inlinecode'>--report</span> rebuilds the HTML and Gemini report pages. <span class='inlinecode'>--all</span> performs everything in one go. Defaults point to <span class='inlinecode'>/var/www/htdocs/buetow.org/self/foostats</span> for data, <span class='inlinecode'>/var/gemini/stats.foo.zone</span> for Gemtext output, and <span class='inlinecode'>/var/www/htdocs/gemtexter/stats.foo.zone</span> for HTML output. Replication always forces the three most recent days worth of the data across HTTPS and leaves older files untouched to save bandwidth.</span><br /> +<br /> +<span><span class='inlinecode'>fooodds.txt</span> is a plain text list of substrings of URLs to be blocked, making it quick to shut down web crawlers. Foostats also detects rapid requests (an indicator of excessive crawling) and blocks the IP. Audit lines are written to <span class='inlinecode'>/var/log/fooodds</span>, which can later be reviewed for false positives (I do this around once a month). The <span class='inlinecode'>Justfile</span> even has a <span class='inlinecode'>gather-fooodds</span> task that collects suspicious paths from remote logs so new patterns can be added quickly.</span><br /> +<br /> +<span>The complete source lives on Codeberg here:</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/foostats'>foostats on Codeberg</a><br /> +<br /> +<span>Now let's go to some new Perl features: </span><br /> +<br /> +<h2 style='display: inline' id='packages-as-real-blocks'>Packages as real blocks</h2><br /> +<br /> +<h3 style='display: inline' id='scoped-packages'>Scoped packages</h3><br /> +<br /> +<span>Recent Perl versions allow the block form <span class='inlinecode'>package Foo { ... }</span>. Foostats uses it for every package. Imports stay local to the block, helper subs do not leak into the global symbol table, and configuration happens where the code needs it.</span><br /> +<br /> +<h2 style='display: inline' id='postfix-deref-keeps-data-structures-tidy'>Postfix deref keeps data structures tidy</h2><br /> +<br /> +<h3 style='display: inline' id='clear-dereferencing'>Clear dereferencing</h3><br /> +<br /> +<span>The script handles nested hashes and arrays. Postfix dereferencing (<span class='inlinecode'>$hash->%*</span>, <span class='inlinecode'>$array->@*</span>) keeps that readable.</span><br /> +<br /> +<h3 style='display: inline' id='simpler-merge-loops'>Simpler merge loops</h3><br /> +<br /> +<span>Loops like <span class='inlinecode'>$stats->{page_ips}->{urls}->%*</span> or <span class='inlinecode'>$merge{$key}->{$_}->%*</span> show which level of the structure is in play. The merger updates host and URL statistics without building temporary arrays, and the reporter code mirrors the layout of the final tables. Before postfix deref, the same code relied on braces within braces and was harder to read.</span><br /> +<br /> +<h2 style='display: inline' id='lexical-subs-promote-local-reasoning'>Lexical subs promote local reasoning</h2><br /> +<br /> +<h3 style='display: inline' id='helpers-that-stay-local'>Helpers that stay local</h3><br /> +<br /> +<span>Lexical subroutines keep helpers close to the code that needs them. In <span class='inlinecode'>Foostats::Logreader::parse_web_logs</span>, functions such as <span class='inlinecode'>my sub parse_date</span> and <span class='inlinecode'>my sub open_file</span> live only inside that scope.</span><br /> +<br /> +<h2 style='display: inline' id='ref-aliasing-makes-intent-explicit'>Ref aliasing makes intent explicit</h2><br /> +<br /> +<h3 style='display: inline' id='shared-data-on-purpose'>Shared data on purpose</h3><br /> +<br /> +<span>Ref aliasing is enabled with <span class='inlinecode'>use feature qw(refaliasing)</span> and helps communicate intent more clearly. The filter starts with <span class='inlinecode'>\my $uri_path = \$event->{uri_path}</span> so any later modification touches the original event.</span><br /> +<br /> +<span>The aggregator aliases <span class='inlinecode'>$self->{stats}{$date_key}</span> before updating counters, so the structure remains intact. Combined with subroutine signatures, this makes it obvious when a piece of data is shared instead of copied, preventing silent bugs.</span><br /> +<br /> +<h2 style='display: inline' id='persistent-state-without-globals'>Persistent state without globals</h2><br /> +<br /> +<span>A Perl state variable is declared with <span class='inlinecode'>state $var</span> and retains its value between calls to the enclosing subroutine. Foostats uses that for rate limiting and deduplicated logging.</span><br /> +<br /> +<h3 style='display: inline' id='rate-limiting-state'>Rate limiting state</h3><br /> +<br /> +<span><span class='inlinecode'>state</span> variables store run-specific state without using package globals. <span class='inlinecode'>state %blocked</span> remembers IP hashes that already triggered the odd-request filter, and <span class='inlinecode'>state $last_time</span> and <span class='inlinecode'>state %count</span> track how many requests an IP makes in the exact second. Hash and array state variables have been supported since <span class='inlinecode'>state</span> arrived in Perl 5.10, so this code takes advantage of that long-standing capability. However, what's new is that hashes can now also be state variables.</span><br /> +<br /> +<h3 style='display: inline' id='deduplicated-logging'>Deduplicated logging</h3><br /> +<br /> +<span><span class='inlinecode'>state %dedup</span> keeps the log output to one warning per URI. Early versions utilised global hashes for the same tasks, producing inconsistent results during tests. Switching to <span class='inlinecode'>state</span> removed those edge cases.</span><br /> +<br /> +<h2 style='display: inline' id='subroutine-signatures-clarify-every-call-site'>Subroutine signatures clarify every call site</h2><br /> +<br /> +<span>Perl now supports subroutine signatures like other modern languages do. Foostats uses them everywhere.</span><br /> +<br /> +<h3 style='display: inline' id='normal-subroutine-signatures-now'>"normal" subroutine signatures now</h3><br /> +<br /> +<span>Subroutine signatures are active throughout foostats. Constructors declare <span class='inlinecode'>sub new ($class, $odds_file, $log_path)</span>, anonymous callbacks expose <span class='inlinecode'>sub ($event)</span>, and helper subs list the values they expect.</span><br /> +<br /> +<h2 style='display: inline' id='defined-or-assignment-keeps-defaults-obvious'>Defined-or assignment keeps defaults obvious</h2><br /> +<br /> +<h3 style='display: inline' id='defaults-without-boilerplate'>Defaults without boilerplate</h3><br /> +<br /> +<span>The operator <span class='inlinecode'>//=</span> keeps configuration and counters simple. Environment variables may be missing when cron runs the script, so <span class='inlinecode'>//=</span>, combined with signatures, sets defaults without warnings. </span><br /> +<br /> +<h2 style='display: inline' id='say-is-the-default-voice-now'><span class='inlinecode'>say</span> is the default voice now</h2><br /> +<br /> +<span><span class='inlinecode'>say</span> became the default once the script switched to <span class='inlinecode'>use v5.38;</span>. Log messages such as "Processing $path" or "Writing report to $report_path". It adds a newline to every message printed, comparable to Ruby's <span class='inlinecode'>put</span>.</span><br /> +<br /> +<h2 style='display: inline' id='cleanup-with-defer'>Cleanup with <span class='inlinecode'>defer</span></h2><br /> +<br /> +<span>Even though not used in Foostats, this (borrowed from Go?) feature is neat to have in Perl now.</span><br /> +<br /> +<span>The <span class='inlinecode'>defer</span> block (<span class='inlinecode'>use feature 'defer"</span>) schedules a piece of code to run when the current scope exits, regardless of how it exits (e.g. normal return, exception). This is perfect for ensuring resources, such as file handles, are closed. <span class='inlinecode'>Foostats::Logreader</span> uses it to make sure log files are always closed, even if parsing fails mid-way.</span><br /> +<br /> +<!-- Generator: GNU source-highlight 3.1.9 +by Lorenzo Bettini +http://www.lorenzobettini.it +http://www.gnu.org/software/src-highlite --> +<pre><b><u><font color="#000000">use</font></u></b> feature <b><u><font color="#000000">qw</font></u></b>(defer); + +<b><u><font color="#000000">sub</font></u></b> parse_log_file { + <b><u><font color="#000000">my</font></u></b> ($path) = @_; + <b><u><font color="#000000">open</font></u></b> <b><u><font color="#000000">my</font></u></b> $fh, <font color="#808080">'<'</font>, $path or <b><u><font color="#000000">die</font></u></b> <font color="#808080">"Cannot open $path: $!"</font>; + defer { <b><u><font color="#000000">close</font></u></b> $fh }; + + <b><u><font color="#000000">while</font></u></b> (<b><u><font color="#000000">my</font></u></b> $line = <font color="#808080"><$fh></font>) { + <i><font color="silver"># ... parsing logic that might throw an exception ...</font></i> + } + <i><font color="silver"># $fh is automatically closed here</font></i> +} +</pre> +<br /> +<span>This pattern replaces manual <span class='inlinecode'>close</span> calls in every exit path of the subroutine and is more robust than relying solely on object destructors.</span><br /> +<br /> +<h2 style='display: inline' id='builtins-and-booleans'>Builtins and booleans</h2><br /> +<br /> +<span>The script also utilises other modern additions that often go unnoticed. <span class='inlinecode'>use builtin qw(true false);</span> combined with <span class='inlinecode'>experimental::builtin</span> provides more real boolean values.</span><br /> +<br /> +<h2 style='display: inline' id='conclusion'>Conclusion</h2><br /> +<br /> +<span>I want to code more in Perl again. The newer features make it a joy to write small scripts like Foostats. If you haven't looked at Perl in a while, give it another try! The main thing which holds me back from writing more Perl is the lack of good tooling. For example, there is no proper LSP and tree sitter support available, which would work as well as for Go and Ruby.</span><br /> +<br /> +<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br /> +<br /> +<span>Other related posts are:</span><br /> +<br /> +<a class='textlink' href='./2023-05-01-unveiling-guprecords:-uptime-records-with-raku.html'>2023-05-01 Unveiling <span class='inlinecode'>guprecords.raku</span>: Global Uptime Records with Raku</a><br /> +<a class='textlink' href='./2022-05-27-perl-is-still-a-great-choice.html'>2022-05-27 Perl is still a great choice</a><br /> +<a class='textlink' href='./2011-05-07-perl-daemon-service-framework.html'>2011-05-07 Perl Daemon (Service Framework)</a><br /> +<a class='textlink' href='./2008-06-26-perl-poetry.html'>2008-06-26 Perl Poetry</a><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> @@ -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-02T11:30:14+03:00 by <span class='inlinecode'>Gemtexter</span></span><br /> +<span class='quote'>This site was generated at 2025-10-05T16:22:37+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 24dd6bfd..43dd6da9 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-02T11:30:14+03:00</span><br /> +<span class='quote'>This site was last updated at 2025-10-05T16:22:37+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 /> @@ -36,7 +36,7 @@ +-----+----------------+-------+------------------------------+ | 1. | alphacentauri | 671 | FreeBSD 11.4-RELEASE-p7 | | 2. | mars | 207 | Linux 3.2.0-4-amd64 | -| 3. | *earth | 202 | Linux 6.15.9-201.fc42.x86_64 | +| 3. | *earth | 205 | Linux 6.16.8-200.fc42.x86_64 | | 4. | callisto | 153 | Linux 4.0.4-303.fc22.x86_64 | | 5. | dionysus | 136 | FreeBSD 13.0-RELEASE-p11 | | 6. | tauceti-e | 120 | Linux 3.2.0-4-amd64 | @@ -46,8 +46,8 @@ | 10. | *f0 | 62 | FreeBSD 14.3-RELEASE | | 11. | uranus | 59 | NetBSD 10.1 | | 12. | pluto | 51 | Linux 3.2.0-4-amd64 | -| 13. | mega15289 | 50 | Darwin 23.4.0 | -| 14. | *mega-m3-pro | 50 | Darwin 24.6.0 | +| 13. | *mega-m3-pro | 50 | Darwin 24.6.0 | +| 14. | mega15289 | 50 | Darwin 23.4.0 | | 15. | *fishfinger | 46 | OpenBSD 7.7 | | 16. | *t450 | 44 | FreeBSD 14.2-RELEASE | | 17. | *blowfish | 43 | OpenBSD 7.7 | @@ -68,7 +68,7 @@ | 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. | sun | 3 years, 9 months, 26 days | FreeBSD 10.3-RELEASE-p24 | -| 4. | *earth | 3 years, 9 months, 16 days | Linux 6.15.9-201.fc42.x86_64 | +| 4. | *earth | 3 years, 9 months, 22 days | Linux 6.16.8-200.fc42.x86_64 | | 5. | uranus | 3 years, 9 months, 5 days | NetBSD 10.1 | | 6. | uugrn | 3 years, 5 months, 5 days | FreeBSD 11.2-RELEASE-p4 | | 7. | *fishfinger | 3 years, 1 months, 28 days | OpenBSD 7.7 | @@ -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, 4 months, 18 days | Darwin 24.6.0 | +| 14. | *mega-m3-pro | 1 years, 4 months, 25 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 | 261 | Linux 6.15.9-201.fc42.x86_64 | +| 3. | *earth | 262 | Linux 6.16.8-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 | 88 | Darwin 24.6.0 | +| 18. | *mega-m3-pro | 89 | Darwin 24.6.0 | | 19. | callisto | 86 | Linux 4.0.4-303.fc22.x86_64 | | 20. | mega8477 | 80 | Darwin 13.4.0 | +-----+----------------+-------+-----------------------------------+ @@ -141,11 +141,11 @@ | 12. | *f0 | 0 years, 8 months, 3 days | FreeBSD 14.3-RELEASE | | 13. | *f2 | 0 years, 8 months, 2 days | FreeBSD 14.3-RELEASE | | 14. | *f1 | 0 years, 8 months, 1 days | FreeBSD 14.3-RELEASE | -| 15. | *earth | 0 years, 6 months, 20 days | Linux 6.15.9-201.fc42.x86_64 | +| 15. | *earth | 0 years, 6 months, 20 days | Linux 6.16.8-200.fc42.x86_64 | | 16. | deimos | 0 years, 5 months, 15 days | Linux 4.4.5-300.fc23.x86_64 | | 17. | joghurt | 0 years, 2 months, 9 days | FreeBSD 7.0-PRERELEASE | | 18. | host0 | 0 years, 2 months, 1 days | FreeBSD 6.2-RELEASE-p5 | -| 19. | *mega-m3-pro | 0 years, 1 months, 12 days | Darwin 24.6.0 | +| 19. | *mega-m3-pro | 0 years, 1 months, 14 days | Darwin 24.6.0 | | 20. | fibonacci | 0 years, 1 months, 11 days | FreeBSD 5.3-RELEASE-p15 | +-----+----------------+-----------------------------+------------------------------+ </pre> @@ -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, 6 days | Linux 6.15.9-201.fc42.x86_64 | +| 6. | *earth | 4 years, 3 months, 12 days | Linux 6.16.8-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 | @@ -192,7 +192,7 @@ | 1. | FreeBSD 10... | 551 | | 2. | Linux 3... | 550 | | 3. | *FreeBSD 14... | 215 | -| 4. | *Linux 6... | 182 | +| 4. | *Linux 6... | 185 | | 5. | Linux 5... | 162 | | 6. | Linux 4... | 161 | | 7. | FreeBSD 11... | 153 | @@ -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. | OpenBSD 4... | 10 | -| 20. | FreeBSD 6... | 10 | +| 19. | FreeBSD 7... | 10 | +| 20. | OpenBSD 4... | 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, 13 days | +| 5. | *Linux 6... | 2 years, 12 months, 20 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, 8 months, 19 days | +| 13. | *Darwin 24... | 0 years, 8 months, 27 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... | 204 | +| 5. | *Linux 6... | 205 | | 6. | Linux 4... | 175 | | 7. | *FreeBSD 14... | 161 | | 8. | FreeBSD 11... | 159 | @@ -263,14 +263,14 @@ | 10. | Darwin 13... | 80 | | 11. | FreeBSD 6... | 75 | | 12. | Darwin 23... | 56 | -| 13. | *Darwin 24... | 44 | +| 13. | *Darwin 24... | 45 | | 14. | OpenBSD 4... | 39 | | 15. | Darwin 21... | 38 | | 16. | Darwin 18... | 32 | | 17. | Darwin 22... | 30 | | 18. | Darwin 15... | 29 | -| 19. | FreeBSD 13... | 25 | -| 20. | FreeBSD 5... | 25 | +| 19. | FreeBSD 5... | 25 | +| 20. | FreeBSD 13... | 25 | +-----+----------------+-------+ </pre> <br /> @@ -283,7 +283,7 @@ | Pos | KernelName | Boots | +-----+------------+-------+ | 1. | *FreeBSD | 1080 | -| 2. | *Linux | 1077 | +| 2. | *Linux | 1080 | | 3. | *Darwin | 155 | | 4. | *OpenBSD | 109 | | 5. | NetBSD | 1 | @@ -298,10 +298,10 @@ +-----+------------+-----------------------------+ | Pos | KernelName | Uptime | +-----+------------+-----------------------------+ -| 1. | *Linux | 28 years, 1 months, 5 days | +| 1. | *Linux | 28 years, 1 months, 12 days | | 2. | *FreeBSD | 12 years, 2 months, 24 days | | 3. | *OpenBSD | 8 years, 2 months, 7 days | -| 4. | *Darwin | 4 years, 12 months, 7 days | +| 4. | *Darwin | 4 years, 12 months, 14 days | | 5. | NetBSD | 0 years, 1 months, 1 days | +-----+------------+-----------------------------+ </pre> @@ -314,10 +314,10 @@ +-----+------------+-------+ | Pos | KernelName | Score | +-----+------------+-------+ -| 1. | *Linux | 1863 | +| 1. | *Linux | 1865 | | 2. | *FreeBSD | 862 | | 3. | *OpenBSD | 523 | -| 4. | *Darwin | 327 | +| 4. | *Darwin | 328 | | 5. | NetBSD | 0 | +-----+------------+-------+ </pre> |
