diff options
| author | Paul Buetow <paul@buetow.org> | 2025-10-11 15:26:26 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-10-11 15:26:26 +0300 |
| commit | 7ce4d3f1313135c4e2d49a97f9318e99fdfbad41 (patch) | |
| tree | 93e5a492eacc390366c86a91bd7690e44be017f0 | |
| parent | 81c2749d79089d89b007e15fac0b387730fec550 (diff) | |
Update content for html
| -rw-r--r-- | about/resources.html | 200 | ||||
| -rw-r--r-- | gemfeed/2021-07-04-the-well-grounded-rubyist.html | 5 | ||||
| -rw-r--r-- | gemfeed/2025-10-11-the-well-grounded-rubyist-notes.html | 253 | ||||
| -rw-r--r-- | gemfeed/atom.xml | 387 | ||||
| -rw-r--r-- | gemfeed/index.html | 1 | ||||
| -rw-r--r-- | index.html | 3 | ||||
| -rw-r--r-- | uptime-stats.html | 2 |
7 files changed, 607 insertions, 244 deletions
diff --git a/about/resources.html b/about/resources.html index 80a4cf23..be4c644e 100644 --- a/about/resources.html +++ b/about/resources.html @@ -51,65 +51,65 @@ <br /> <ul> <li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li> -<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li> +<li>Raku Fundamentals; Moritz Lenz; Apress</li> <li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly</li> -<li>Effective awk programming; Arnold Robbins; O'Reilly</li> -<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li> -<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> -<li>Raku Recipes; J.J. Merelo; Apress</li> -<li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li> -<li>Ultimate Go Notebook; Bill Kennedy</li> -<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li> -<li>Developing Games in Java; David Brackeen and others...; New Riders</li> -<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li> -<li>C++ Programming Language; Bjarne Stroustrup;</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>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li> -<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly</li> -<li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li> -<li>The Docker Book; James Turnbull; Kindle</li> <li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> -<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> +<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> +<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> <li>Site Reliability Engineering; How Google runs production systems; O'Reilly</li> -<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li> -<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> -<li>Data Science at the Command Line; Jeroen Janssens; O'Reilly</li> -<li>Modern Perl; Chromatic ; Onyx Neon Press</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>Effective Java; Joshua Bloch; Addison-Wesley Professional</li> -<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> -<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> -<li>DNS and BIND; Cricket Liu; O'Reilly</li> -<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> -<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li> -<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly</li> -<li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li> -<li>21st Century C: C Tips from the New School; Ben Klemens; O'Reilly</li> -<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> +<li>Data Science at the Command Line; Jeroen Janssens; O'Reilly</li> <li>Java ist auch eine Insel; Christian Ullenboom; </li> -<li>Funktionale Programmierung; Peter Pepper; Springer</li> -<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> -<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li> +<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li> +<li>Ultimate Go Notebook; Bill Kennedy</li> +<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li> +<li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li> <li>The Pragmatic Programmer; David Thomas; Addison-Wesley</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>Raku Recipes; J.J. Merelo; Apress</li> +<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li> +<li>21st Century C: C Tips from the New School; Ben Klemens; O'Reilly</li> +<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> <li>Leanring eBPF; Liz Rice; O'Reilly</li> -<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li> -<li>Raku Fundamentals; Moritz Lenz; Apress</li> -<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li> <li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li> +<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> +<li>DNS and BIND; Cricket Liu; O'Reilly</li> +<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li> +<li>C++ Programming Language; Bjarne Stroustrup;</li> +<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly</li> +<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly</li> +<li>Effective awk programming; Arnold Robbins; O'Reilly</li> +<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li> +<li>The Docker Book; James Turnbull; Kindle</li> +<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> +<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li> +<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> +<li>Terraform Cookbook; Mikael Krief; Packt Publishing</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>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li> +<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li> +<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> <li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li> +<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> +<li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li> +<li>Funktionale Programmierung; Peter Pepper; Springer</li> +<li>Modern Perl; Chromatic ; Onyx Neon Press</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>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> <li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly</li> -<li>Go: Design Patterns for Real-World Projects; Mat Ryer; Packt</li> +<li>Implementing Service Level Objectives; Alex Hidalgo; O'Reilly</li> <li>Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly</li> +<li>Relayd and Httpd Mastery; Michael W Lucas</li> +<li>Go: Design Patterns for Real-World Projects; Mat Ryer; Packt</li> <li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li> -<li>Implementing Service Level Objectives; Alex Hidalgo; O'Reilly</li> +<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> <li>The Linux Programming Interface; Michael Kerrisk; No Starch Press </li> </ul><br /> <h2 style='display: inline' id='self-development-and-soft-skills-books'>Self-development and soft-skills books</h2><br /> @@ -117,42 +117,42 @@ <span>In random order:</span><br /> <br /> <ul> -<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> -<li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li> -<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li> +<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> <li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li> +<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li> +<li>Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook</li> +<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> +<li>Ultralearning; Scott Young; Thorsons</li> +<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li> <li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK</li> -<li>Ultralearning; Anna Laurent; Self-published via Amazon</li> -<li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li> +<li>Deep Work; Cal Newport; Piatkus</li> +<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li> +<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> +<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li> <li>Meditation for Mortals, Oliver Burkeman, Audiobook</li> +<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> +<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> +<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> +<li>The Power of Now; Eckhard Tolle; Yellow Kite</li> +<li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li> +<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</li> +<li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li> +<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li> +<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li> <li>Slow Productivity; Cal Newport; Penguin Random House</li> -<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li> +<li>Ultralearning; Anna Laurent; Self-published via Amazon</li> <li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li> -<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li> -<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li> +<li>Atomic Habits; James Clear; Random House Business</li> <li>Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook</li> -<li>Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook</li> -<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li> -<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</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>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li> +<li>Getting Things Done; David Allen</li> +<li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li> <li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li> -<li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li> -<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> -<li>Soft Skills; John Sommez; Manning Publications</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>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li> -<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li> -<li>Ultralearning; Scott Young; Thorsons</li> -<li>The Power of Now; Eckhard Tolle; Yellow Kite</li> -<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> -<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> -<li>Atomic Habits; James Clear; Random House Business</li> <li>Eat That Frog; Brian Tracy</li> -<li>Deep Work; Cal Newport; Piatkus</li> -<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> -<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> -<li>Getting Things Done; David Allen</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>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li> +<li>Soft Skills; John Sommez; Manning Publications</li> </ul><br /> <a class='textlink' href='../notes/index.html'>Here are notes of mine for some of the books</a><br /> <br /> @@ -161,22 +161,22 @@ <span>Some of these were in-person with exams; others were online learning lectures only. In random order:</span><br /> <br /> <ul> +<li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li> +<li>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> <li>The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online</li> -<li>Functional programming lecture; Remote University of Hagen</li> +<li>Developing IaC with Terraform (with Live Lessons); O'Reilly Online</li> +<li>MySQL Deep Dive Workshop; 2-day on-site training</li> +<li>AWS Immersion Day; Amazon; 1-day interactive online training </li> +<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</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>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>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li> +<li>Scripting Vim; Damian Conway; O'Reilly Online</li> +<li>Functional programming lecture; Remote University of Hagen</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>Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online</li> <li>Protocol buffers; O'Reilly Online</li> -<li>MySQL Deep Dive Workshop; 2-day on-site training</li> +<li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li> <li>The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online</li> -<li>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> -<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li> -<li>Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online</li> -<li>Developing IaC with Terraform (with Live Lessons); O'Reilly Online</li> -<li>Scripting Vim; Damian Conway; O'Reilly Online</li> -<li>AWS Immersion Day; Amazon; 1-day interactive online training </li> </ul><br /> <h2 style='display: inline' id='technical-guides'>Technical guides</h2><br /> <br /> @@ -194,20 +194,20 @@ <span>In random order:</span><br /> <br /> <ul> -<li>Modern Mentor</li> -<li>Wednesday Wisdom</li> -<li>The Changelog Podcast(s)</li> -<li>Cup o' Go [Golang]</li> +<li>Pratical AI</li> +<li>Hidden Brain</li> +<li>BSD Now [BSD]</li> +<li>The ProdCast (Google SRE Podcast)</li> <li>Backend Banter</li> -<li>Maintainable</li> <li>Dev Interrupted</li> -<li>Deep Questions with Cal Newport</li> <li>Fallthrough [Golang]</li> -<li>The ProdCast (Google SRE Podcast)</li> +<li>The Changelog Podcast(s)</li> <li>Fork Around And Find Out</li> -<li>BSD Now [BSD]</li> -<li>Hidden Brain</li> -<li>Pratical AI</li> +<li>Deep Questions with Cal Newport</li> +<li>Modern Mentor</li> +<li>Maintainable</li> +<li>Cup o' Go [Golang]</li> +<li>Wednesday Wisdom</li> <li>The Pragmatic Engineer Podcast</li> </ul><br /> <h3 style='display: inline' id='podcasts-i-liked'>Podcasts I liked</h3><br /> @@ -216,38 +216,38 @@ <br /> <ul> <li>Java Pub House</li> -<li>Modern Mentor</li> -<li>CRE: Chaosradio Express [german]</li> -<li>Ship It (predecessor of Fork Around And Find Out)</li> <li>FLOSS weekly</li> <li>Go Time (predecessor of fallthrough)</li> +<li>Ship It (predecessor of Fork Around And Find Out)</li> +<li>CRE: Chaosradio Express [german]</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>Monospace Mentor</li> -<li>Ruby Weekly</li> -<li>VK Newsletter</li> -<li>Golang Weekly</li> <li>The Valuable Dev</li> -<li>byteSizeGo</li> -<li>The Pragmatic Engineer</li> -<li>Register Spill</li> -<li>Applied Go Weekly Newsletter</li> <li>The Imperfectionist</li> <li>Andreas Brandhorst Newsletter (Sci-Fi author)</li> <li>Changelog News</li> +<li>byteSizeGo</li> +<li>The Pragmatic Engineer</li> +<li>Applied Go Weekly Newsletter</li> +<li>Monospace Mentor</li> +<li>Register Spill</li> +<li>Ruby Weekly</li> +<li>Golang Weekly</li> +<li>VK Newsletter</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>LWN (online only)</li> <li>Linux Magazine</li> <li>Linux User</li> -<li>LWN (online only)</li> <li>freeX (not published anymore)</li> </ul><br /> <h1 style='display: inline' id='formal-education'>Formal education</h1><br /> diff --git a/gemfeed/2021-07-04-the-well-grounded-rubyist.html b/gemfeed/2021-07-04-the-well-grounded-rubyist.html index 6d92a11f..7e5551c5 100644 --- a/gemfeed/2021-07-04-the-well-grounded-rubyist.html +++ b/gemfeed/2021-07-04-the-well-grounded-rubyist.html @@ -133,6 +133,11 @@ Hello World <br /> <span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br /> <br /> +<span>Other Ruby-related posts:</span><br /> +<br /> +<a class='textlink' href='./2025-10-11-the-well-grounded-rubyist-notes.html'>2025-10-11 Key Takeaways from The Well-Grounded Rubyist</a><br /> +<a class='textlink' href='./2021-07-04-the-well-grounded-rubyist.html'>2021-07-04 The Well-Grounded Rubyist (You are currently reading this)</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> | diff --git a/gemfeed/2025-10-11-the-well-grounded-rubyist-notes.html b/gemfeed/2025-10-11-the-well-grounded-rubyist-notes.html new file mode 100644 index 00000000..e9eba28d --- /dev/null +++ b/gemfeed/2025-10-11-the-well-grounded-rubyist-notes.html @@ -0,0 +1,253 @@ +<!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>Key Takeaways from The Well-Grounded Rubyist</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/2025-10-11-the-well-grounded-rubyist-notes.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-10-11-the-well-grounded-rubyist-notes.gmi">Gemini</a> +</p> +<h1 style='display: inline' id='key-takeaways-from-the-well-grounded-rubyist'>Key Takeaways from The Well-Grounded Rubyist</h1><br /> +<br /> +<span class='quote'>Published at 2025-10-11T15:25:14+03:00</span><br /> +<br /> +<span>Some time ago, I wrote about my journey into Ruby and how "The Well-Grounded Rubyist" helped me to get a better understanding of the language. I took a lot of notes while reading the book, and I think it's time to share some of them. This is not a comprehensive review, but rather a collection of interesting tidbits and concepts that stuck with me.</span><br /> +<br /> +<a class='textlink' href='./2021-07-04-the-well-grounded-rubyist.html'>My first post about the book.</a><br /> +<br /> +<h2 style='display: inline' id='the-object-model'>The Object Model</h2><br /> +<br /> +<span>One of the most fascinating aspects of Ruby is its object model. The book does a great job of explaining the details.</span><br /> +<br /> +<h3 style='display: inline' id='everything-is-an-object-almost'>Everything is an object (almost)</h3><br /> +<br /> +<span>In Ruby, most things are objects. This includes numbers, strings, and even classes themselves. This has some interesting consequences. For example, you can't use <span class='inlinecode'>i++</span> like in C or Java. Integers are immutable objects. <span class='inlinecode'>1</span> is always the same object. <span class='inlinecode'>1 + 1</span> returns a new object, <span class='inlinecode'>2</span>.</span><br /> +<br /> +<h3 style='display: inline' id='the-self-keyword'>The <span class='inlinecode'>self</span> keyword</h3><br /> +<br /> +<span>There is always a current object, <span class='inlinecode'>self</span>. If you call a method without an explicit receiver, it's called on <span class='inlinecode'>self</span>. For example, <span class='inlinecode'>puts "hello"</span> is actually <span class='inlinecode'>self.puts "hello"</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><i><font color="silver"># At the top level, self is the main object</font></i> +p <b><u><font color="#000000">self</font></u></b> +<i><font color="silver"># => main</font></i> +p <b><u><font color="#000000">self</font></u></b>.<b><u><font color="#000000">class</font></u></b> +<i><font color="silver"># => Object</font></i> + +<b><u><font color="#000000">def</font></u></b> foo + <i><font color="silver"># Inside a method, self is the object that received the call</font></i> + p <b><u><font color="#000000">self</font></u></b> +<b><u><font color="#000000">end</font></u></b> + +foo +<i><font color="silver"># => main</font></i> +</pre> +<br /> +<span>This code demonstrates how <span class='inlinecode'>self</span> changes depending on the context. At the top level, it's <span class='inlinecode'>main</span>, an instance of <span class='inlinecode'>Object</span>. When <span class='inlinecode'>foo</span> is called without a receiver, it's called on <span class='inlinecode'>main</span>.</span><br /> +<br /> +<h3 style='display: inline' id='singleton-methods'>Singleton Methods</h3><br /> +<br /> +<span>You can add methods to individual objects. These are called singleton methods.</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>obj = <font color="#808080">"a string"</font> + +<b><u><font color="#000000">def</font></u></b> obj.shout + <b><u><font color="#000000">self</font></u></b>.upcase + <font color="#808080">"!"</font> +<b><u><font color="#000000">end</font></u></b> + +p obj.shout +<i><font color="silver"># => "A STRING!"</font></i> + +obj2 = <font color="#808080">"another string"</font> +<i><font color="silver"># obj2.shout would raise a NoMethodError</font></i> +</pre> +<br /> +<span>Here, the <span class='inlinecode'>shout</span> method is only available on the <span class='inlinecode'>obj</span> object. This is a powerful feature for adding behavior to specific instances.</span><br /> +<br /> +<h3 style='display: inline' id='classes-are-objects'>Classes are Objects</h3><br /> +<br /> +<span>Classes themselves are objects, instances of the <span class='inlinecode'>Class</span> class. This means you can create classes dynamically.</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>MyClass = Class.new <b><u><font color="#000000">do</font></u></b> + <b><u><font color="#000000">def</font></u></b> say_hello + puts <font color="#808080">"Hello from a dynamically created class!"</font> + <b><u><font color="#000000">end</font></u></b> +<b><u><font color="#000000">end</font></u></b> + +instance = MyClass.new +instance.say_hello +<i><font color="silver"># => Hello from a dynamically created class!</font></i> +</pre> +<br /> +<span>This shows how to create a new class and assign it to a constant. This is what happens behind the scenes when you use the <span class='inlinecode'>class</span> keyword.</span><br /> +<br /> +<h2 style='display: inline' id='control-flow-and-methods'>Control Flow and Methods</h2><br /> +<br /> +<span>The book clarified many things about how methods and control flow work in Ruby.</span><br /> +<br /> +<h3 style='display: inline' id='case-and-the--operator'><span class='inlinecode'>case</span> and the <span class='inlinecode'>===</span> operator</h3><br /> +<br /> +<span>The <span class='inlinecode'>case</span> statement is more powerful than I thought. It uses the <span class='inlinecode'>===</span> (threequals or case equality) operator for comparison, not <span class='inlinecode'>==</span>. Different classes can implement <span class='inlinecode'>===</span> in their own 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><i><font color="silver"># For ranges, it checks for inclusion</font></i> +p (<font color="#000000">1</font>..<font color="#000000">5</font>) === <font color="#000000">3</font> <i><font color="silver"># => true</font></i> + +<i><font color="silver"># For classes, it checks if the object is an instance of the class</font></i> +p String === <font color="#808080">"hello"</font> <i><font color="silver"># => true</font></i> + +<i><font color="silver"># For regexes, it checks for a match</font></i> +p /llo/ === <font color="#808080">"hello"</font> <i><font color="silver"># => true</font></i> + +<b><u><font color="#000000">def</font></u></b> check(value) + <b><u><font color="#000000">case</font></u></b> value + <b><u><font color="#000000">when</font></u></b> String + <font color="#808080">"It's a string"</font> + <b><u><font color="#000000">when</font></u></b> (<font color="#000000">1</font>..<font color="#000000">10</font>) + <font color="#808080">"It's a number between 1 and 10"</font> + <b><u><font color="#000000">else</font></u></b> + <font color="#808080">"Something else"</font> + <b><u><font color="#000000">end</font></u></b> +<b><u><font color="#000000">end</font></u></b> + +p check(<font color="#000000">5</font>) <i><font color="silver"># => "It's a number between 1 and 10"</font></i> +</pre> +<br /> +<h3 style='display: inline' id='blocks-and-yield'>Blocks and <span class='inlinecode'>yield</span></h3><br /> +<br /> +<span>Blocks are a cornerstone of Ruby. You can pass them to methods to customize their behavior. The <span class='inlinecode'>yield</span> keyword is used to call the block.</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">def</font></u></b> my_iterator + puts <font color="#808080">"Entering the method"</font> + <b><u><font color="#000000">yield</font></u></b> + puts <font color="#808080">"Back in the method"</font> + <b><u><font color="#000000">yield</font></u></b> +<b><u><font color="#000000">end</font></u></b> + +my_iterator { puts <font color="#808080">"Inside the block"</font> } +<i><font color="silver"># Entering the method</font></i> +<i><font color="silver"># Inside the block</font></i> +<i><font color="silver"># Back in the method</font></i> +<i><font color="silver"># Inside the block</font></i> +</pre> +<br /> +<span>This simple iterator shows how <span class='inlinecode'>yield</span> transfers control to the block. You can also pass arguments to <span class='inlinecode'>yield</span> and get a return value from the block.</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">def</font></u></b> with_return + result = <b><u><font color="#000000">yield</font></u></b>(<font color="#000000">5</font>) + puts <font color="#808080">"The block returned #{result}"</font> +<b><u><font color="#000000">end</font></u></b> + +with_return { |n| n * <font color="#000000">2</font> } +<i><font color="silver"># => The block returned 10</font></i> +</pre> +<br /> +<span>This demonstrates passing an argument to the block and using its return value.</span><br /> +<br /> +<h2 style='display: inline' id='fun-with-data-types'>Fun with Data Types</h2><br /> +<br /> +<span>Ruby's core data types are full of nice little features.</span><br /> +<br /> +<h3 style='display: inline' id='symbols'>Symbols</h3><br /> +<br /> +<span>Symbols are like immutable strings. They are great for keys in hashes because they are unique and memory-efficient.</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><i><font color="silver"># Two strings with the same content are different objects</font></i> +p <font color="#808080">"foo"</font>.object_id +p <font color="#808080">"foo"</font>.object_id + +<i><font color="silver"># Two symbols with the same content are the same object</font></i> +p :foo.object_id +p :foo.object_id + +<i><font color="silver"># Modern hash syntax uses symbols as keys</font></i> +my_hash = { name: <font color="#808080">"Paul"</font>, language: <font color="#808080">"Ruby"</font> } +p my_hash[:name] <i><font color="silver"># => "Paul"</font></i> +</pre> +<br /> +<span>This code highlights the difference between strings and symbols and shows the convenient hash syntax.</span><br /> +<br /> +<h3 style='display: inline' id='arrays-and-hashes'>Arrays and Hashes</h3><br /> +<br /> +<span>Arrays and hashes have a rich API. The <span class='inlinecode'>%w</span> and <span class='inlinecode'>%i</span> shortcuts for creating arrays of strings and symbols are very handy.</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><i><font color="silver"># Array of strings</font></i> +p %w[one two three] +<i><font color="silver"># => ["one", "two", "three"]</font></i> + +<i><font color="silver"># Array of symbols</font></i> +p %i[one two three] +<i><font color="silver"># => [:one, :two, :three]</font></i> +</pre> +<br /> +<span>A quick way to create arrays. You can also retrieve multiple values at once.</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>arr = [<font color="#000000">10</font>, <font color="#000000">20</font>, <font color="#000000">30</font>, <font color="#000000">40</font>, <font color="#000000">50</font>] +p arr.values_at(<font color="#000000">0</font>, <font color="#000000">2</font>, <font color="#000000">4</font>) +<i><font color="silver"># => [10, 30, 50]</font></i> + +hash = { a: <font color="#000000">1</font>, b: <font color="#000000">2</font>, c: <font color="#000000">3</font> } +p hash.values_at(:a, :c) +<i><font color="silver"># => [1, 3]</font></i> +</pre> +<br /> +<span>The <span class='inlinecode'>values_at</span> method is a concise way to get multiple elements.</span><br /> +<br /> +<h2 style='display: inline' id='final-thoughts'>Final Thoughts</h2><br /> +<br /> +<span>These are just a few of the many things I learned from "The Well-Grounded Rubyist". The book gave me a much deeper appreciation for the language and its design. If you are a Ruby programmer, I highly recommend it. Meanwhile, I also read the book "Programming Ruby 3.3", just I didn't have time to process my notes there yet. </span><br /> +<br /> +<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br /> +<br /> +<span>Other Ruby-related posts:</span><br /> +<br /> +<a class='textlink' href='./2021-07-04-the-well-grounded-rubyist.html'>2021-07-04 The Well-Grounded Rubyist</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> diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index d2f437a8..22dc3466 100644 --- a/gemfeed/atom.xml +++ b/gemfeed/atom.xml @@ -1,12 +1,256 @@ <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> - <updated>2025-10-02T11:30:14+03:00</updated> + <updated>2025-10-11T15:25:15+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" /> <link href="https://foo.zone/" /> <id>https://foo.zone/</id> <entry> + <title>Key Takeaways from The Well-Grounded Rubyist</title> + <link href="https://foo.zone/gemfeed/2025-10-11-the-well-grounded-rubyist-notes.html" /> + <id>https://foo.zone/gemfeed/2025-10-11-the-well-grounded-rubyist-notes.html</id> + <updated>2025-10-11T15:25:14+03:00</updated> + <author> + <name>Paul Buetow aka snonux</name> + <email>paul@dev.buetow.org</email> + </author> + <summary>Some time ago, I wrote about my journey into Ruby and how 'The Well-Grounded Rubyist' helped me to get a better understanding of the language. I took a lot of notes while reading the book, and I think it's time to share some of them. This is not a comprehensive review, but rather a collection of interesting tidbits and concepts that stuck with me.</summary> + <content type="xhtml"> + <div xmlns="http://www.w3.org/1999/xhtml"> + <h1 style='display: inline' id='key-takeaways-from-the-well-grounded-rubyist'>Key Takeaways from The Well-Grounded Rubyist</h1><br /> +<br /> +<span>Some time ago, I wrote about my journey into Ruby and how "The Well-Grounded Rubyist" helped me |
