<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Abel G. Vidal</title><link>https://abelgvidal.com/posts/</link><description>Recent content in Posts on Abel G. Vidal</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 19 Apr 2026 16:58:00 +0100</lastBuildDate><atom:link href="https://abelgvidal.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>The Path to Logging Pro: Part 3. Structured logs, for free (you're welcome)</title><link>https://abelgvidal.com/posts/2026-04-20-logs-part-3/</link><pubDate>Sun, 19 Apr 2026 16:58:00 +0100</pubDate><guid>https://abelgvidal.com/posts/2026-04-20-logs-part-3/</guid><description>&lt;p>You&amp;rsquo;ve just set up a VPS. A few days in, out of curiosity, you check what SSH has been up to:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ systemctl status sshd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>● ssh.service - OpenBSD Secure Shell server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Active: active &lt;span style="color:#0550ae">(&lt;/span>running&lt;span style="color:#0550ae">)&lt;/span> since Sat 2026-04-12 09:14:03 UTC
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Apr &lt;span style="color:#0550ae">12&lt;/span> 17:03:11 lpsz sshd&lt;span style="color:#0550ae">[&lt;/span>1432&lt;span style="color:#0550ae">]&lt;/span>: Failed password &lt;span style="color:#cf222e">for&lt;/span> root from 218.92.0.190 port &lt;span style="color:#0550ae">53412&lt;/span> ssh2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Apr &lt;span style="color:#0550ae">12&lt;/span> 17:03:15 lpsz sshd&lt;span style="color:#0550ae">[&lt;/span>1433&lt;span style="color:#0550ae">]&lt;/span>: Failed password &lt;span style="color:#cf222e">for&lt;/span> root from 218.92.0.190 port &lt;span style="color:#0550ae">53413&lt;/span> ssh2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Apr &lt;span style="color:#0550ae">12&lt;/span> 17:03:18 lpsz sshd&lt;span style="color:#0550ae">[&lt;/span>1434&lt;span style="color:#0550ae">]&lt;/span>: Failed password &lt;span style="color:#cf222e">for&lt;/span> root from 218.92.0.190 port &lt;span style="color:#0550ae">53414&lt;/span> ssh2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Welcome to the internet. Someone has been hammering your server since the moment you exposed it. This is completely normal — automated scanners hit every public IP constantly, probing for weak passwords and default credentials. But that&amp;rsquo;s a story for another day.&lt;/p></description></item><item><title>The Path to Logging Pro: Part 2. Everything is a file</title><link>https://abelgvidal.com/posts/2026-04-12-logs-part-2/</link><pubDate>Sun, 12 Apr 2026 16:58:00 +0100</pubDate><guid>https://abelgvidal.com/posts/2026-04-12-logs-part-2/</guid><description>&lt;p>In &lt;a href="https://abelgvidal.com/posts/2026-04-06-logs-part-1/">Part 1&lt;/a> we worked with this command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>python program.py 2&amp;gt;&lt;span style="color:#1f2328">&amp;amp;&lt;/span>&lt;span style="color:#0550ae">1&lt;/span> &lt;span style="color:#1f2328">|&lt;/span> tee output.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We said that &lt;code>2&amp;gt;&amp;amp;1&lt;/code> makes stderr point to the same place as stdout, so both streams travel through the pipe and &lt;code>tee&lt;/code> captures all of it. But there&amp;rsquo;s a question hiding in that explanation: what does it mean for two streams to &amp;ldquo;point to the same place&amp;rdquo;? Where exactly is that place?&lt;/p>
&lt;p>To answer that, we need to pull on the thread a bit further.&lt;/p></description></item><item><title>The Path to Logging Pro: Part 1. Pipes!</title><link>https://abelgvidal.com/posts/2026-04-06-logs-part-1/</link><pubDate>Mon, 06 Apr 2026 16:58:00 +0100</pubDate><guid>https://abelgvidal.com/posts/2026-04-06-logs-part-1/</guid><description>&lt;p>To master logs, you need to understand what standard streams are: the channels that connect the inputs and outputs of a computer system in a predefined way (meaning the system already works like this out of the box). There are three:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>stdin&lt;/strong> or standard input&lt;/li>
&lt;li>&lt;strong>stdout&lt;/strong> or standard output&lt;/li>
&lt;li>&lt;strong>stderr&lt;/strong> or standard error output&lt;/li>
&lt;/ul>
&lt;p>In the early days of computing, a physical console with a keyboard was connected via a cable — these streams are an abstraction of that original connection.&lt;/p></description></item><item><title>Chaos Has a Market</title><link>https://abelgvidal.com/posts/2026-02-26-zero/</link><pubDate>Thu, 26 Feb 2026 16:58:00 +0100</pubDate><guid>https://abelgvidal.com/posts/2026-02-26-zero/</guid><description>&lt;p>These days the market seems to move softly and wildly at the same time. Investors have bet on AI as the great disruptor and are exploring every possible angle: from its potential as an &lt;a href="https://news.ycombinator.com/item?id=47128745">executioner of mythical dinosaurs&lt;/a>, to &lt;a href="https://www.ft.com/content/62d922c9-bac8-4de5-bda9-55bfc29919bc">destroyer of credit markets&lt;/a>, or &lt;a href="https://news.ycombinator.com/item?id=46888441">SaaS killer&lt;/a>. But all these angles agree on one thing: there will be winners and losers. So one day IBM drops because the new Claude model does COBOL, the next day SaaS companies fall, the day after that NVIDIA and the hyperscalers correct because people are afraid we&amp;rsquo;re spending our last shirt on the bet for more datacenters. When investors are confused, which is most of the time, the play is to lean on narrative bets and pick winners and losers.&lt;/p></description></item><item><title>Never Split the difference: Chris Voss</title><link>https://abelgvidal.com/posts/2026-01-26-never-split/</link><pubDate>Mon, 26 Jan 2026 00:02:54 +0100</pubDate><guid>https://abelgvidal.com/posts/2026-01-26-never-split/</guid><description>&lt;p>&lt;img src="https://abelgvidal.com/assets/neversplit.webp" 
style="float:left; margin: 0 20px 10px 0; max-width: 200px;">&lt;/p>
&lt;p>I finished Chris Voss&amp;rsquo;s book &amp;ldquo;Never Split the Difference&amp;rdquo; where he shares his experience and techniques as an FBI hostage negotiator. It surprised me because I thought it would be much more &amp;ldquo;hardcore&amp;rdquo; but it&amp;rsquo;s actually about well-known communication concepts applied to conflict situations.&lt;/p>
&lt;p>It&amp;rsquo;s the kind of book with ideas that seem simple and obvious but are hard to put into practice. The foundation of everything is: people want to feel understood and in control. These aren&amp;rsquo;t just preferences, they&amp;rsquo;re deep psychological needs. When someone feels ignored or cornered, their brain goes into defensive mode. The amygdala takes over and things generally get worse.&lt;/p></description></item><item><title>What Happens When Kubernetes Deletes a Pod?</title><link>https://abelgvidal.com/posts/2025-12-16-graceful/</link><pubDate>Thu, 18 Dec 2025 09:03:54 +0100</pubDate><guid>https://abelgvidal.com/posts/2025-12-16-graceful/</guid><description>&lt;p>Graceful termination of pods in Kubernetes is essential to prevent data loss, minimize interruptions, and ensure services are stopped in a controlled manner. This process occurs when Kubernetes deletes a pod, whether due to a Deployment update, scaling, eviction for lack of resources, or when the user manually deletes the pod. Understanding how graceful termination works helps you design more robust applications.&lt;/p>
&lt;p>When Kubernetes wants to terminate a pod, it gives it the opportunity to shut down gracefully.&lt;/p></description></item><item><title>Hugo: filter post by tag</title><link>https://abelgvidal.com/posts/filter-tags-in-hugo-template/</link><pubDate>Sun, 13 Apr 2025 20:02:54 +0100</pubDate><guid>https://abelgvidal.com/posts/filter-tags-in-hugo-template/</guid><description>&lt;p>I wanted to stop showing in the frontpage of this blog powered by (&lt;a href="https://gohugo.io/">Hugo&lt;/a>) the posts tagged as &amp;ldquo;TIL&amp;rdquo; or &amp;ldquo;IWL&amp;rdquo;.&lt;/p>
&lt;p>My theme template is&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go-html-template" data-lang="go-html-template">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">{{&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">$blogPages&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">:=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">where&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">.Site.RegularPages.ByDate.Reverse&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;.Type&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;in&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">.Site.Params.mainSections&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#57606a">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I tried with &amp;ldquo;intersect&amp;rdquo; and &amp;ldquo;where&amp;rdquo; but it did not work, not sure if it is because my Hugo version is old but, anyway, I was too lazy to upgrade Hugo (and adapt all templates, breaking changes, etc) so this simple code made my day:&lt;/p></description></item><item><title>Franny and Zooey</title><link>https://abelgvidal.com/posts/franny/</link><pubDate>Wed, 09 Apr 2025 20:02:54 +0100</pubDate><guid>https://abelgvidal.com/posts/franny/</guid><description>&lt;p>Warning: This review contains spoilers&lt;/p>
&lt;p>&lt;img src="https://abelgvidal.com/assets/Zooey.jpg" alt="">&lt;/p>
&lt;p>This book is special because it contrasts Zen teachings with 1950s consumer America.&lt;/p>
&lt;p>We meet Franny Glass, a young woman who belongs to a family of gifted intellectuals.
She feels overwhelmed by life&amp;rsquo;s superficiality and seeks answers in spirituality.
The story is divided into two parts showing important moments in the lives of Franny and her brother Zooey.&lt;/p>
&lt;p>A note about the author: Salinger was transformed by his experience in World War II, where he participated in D-Day and witnessed the horrors of concentration camps. Seeking inner peace, he moved to quiet New Hampshire, where he became deeply interested in Eastern philosophies and meditation practices.&lt;/p></description></item><item><title>Fooled by randomness</title><link>https://abelgvidal.com/posts/fooled-by-randomness/</link><pubDate>Wed, 12 Feb 2025 20:02:54 +0100</pubDate><guid>https://abelgvidal.com/posts/fooled-by-randomness/</guid><description>&lt;h1 id="fooled-by-randomness">Fooled by randomness&lt;/h1>
&lt;p>These are my notes for the book &amp;ldquo;Fooled by Randomness&amp;rdquo; by Nassim Taleb.&lt;/p>
&lt;p>The thesis of the book is that when we look at the past we find things that are not there, the past is much more
random than our vision. This is called the &lt;strong>Hindsight bias&lt;/strong>. So we have to be aware that when people relate
the past usually they tend to create post-hoc rationalizations and retrofitted explanations.&lt;/p></description></item><item><title>AI Eats Its Own Tail</title><link>https://abelgvidal.com/posts/eatitself/</link><pubDate>Mon, 20 Jan 2025 20:03:54 +0100</pubDate><guid>https://abelgvidal.com/posts/eatitself/</guid><description>&lt;p>Seeing the evolution of StackOverflow, which seems to be declining due to the rise of ChatGPT and similar tools, I wonder about the long-term viability of projects like this.&lt;/p>
&lt;p>On the other hand, where will AIs get their information if these projects disappear? Their answers could degrade significantly without such resources.&lt;/p>
&lt;p>Could we be stuck in a cycle where AI destroys these collaborative platforms, worsens after losing them, then these platforms revive because this is information that is needed (and now is missing), only to decline again as AI uses their information to present it in a more convenient way? And so on, in an endless loop?&lt;/p></description></item><item><title>You are probably bad in probability</title><link>https://abelgvidal.com/posts/optionalrandom/</link><pubDate>Mon, 20 Jan 2025 20:03:54 +0100</pubDate><guid>https://abelgvidal.com/posts/optionalrandom/</guid><description>&lt;p>In her book &amp;ldquo;Randomness,&amp;rdquo; Deborah Bennett presents an example that illustrates how bad we are at calculating probabilities, even highly trained professionals. A group of doctors received this question:&lt;/p>
&lt;blockquote>
&lt;p>The test of a disease has a 5% false positive rate. The disease affects 1 in 1000 people in the population. People are tested randomly, whether they are suspected to be sick or not. A particular patient&amp;rsquo;s test is positive. What is the probability that this patient actually has the disease?&lt;/p></description></item><item><title>Why 'type type type type' runs three times in Bash</title><link>https://abelgvidal.com/posts/recursive-bash/</link><pubDate>Fri, 03 Jan 2025 20:03:54 +0100</pubDate><guid>https://abelgvidal.com/posts/recursive-bash/</guid><description>&lt;p>In Bash, when we run the command &lt;code>type type type type&lt;/code>, we observe a peculiar behavior: it executes three times instead of once or four times. This phenomenon is fascinating and is due to how Bash processes arguments and how the &lt;code>type&lt;/code> command specifically works.&lt;/p>
&lt;h2 id="the-behavior-of-type">The behavior of &lt;code>type&lt;/code>&lt;/h2>
&lt;p>The &lt;code>type&lt;/code> command is a Bash builtin used to determine how Bash would interpret a command name. When we execute:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6639ba">type&lt;/span> &lt;span style="color:#6639ba">type&lt;/span> &lt;span style="color:#6639ba">type&lt;/span> &lt;span style="color:#6639ba">type&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We get an output similar to this:&lt;/p></description></item><item><title>Making Obsidian Talk with Google's Fancy Wavenet Voices</title><link>https://abelgvidal.com/posts/obsidian-wavenet/</link><pubDate>Sun, 15 Dec 2024 20:03:54 +0100</pubDate><guid>https://abelgvidal.com/posts/obsidian-wavenet/</guid><description>&lt;p>I&amp;rsquo;m sharing a little hack I put together. As a hardcore &lt;a href="https://obsidian.md/">Obsidian&lt;/a> user, I was getting frustrated with the available text-to-speech options.
I really wanted to use Google&amp;rsquo;s Wavenet voices because they sound amazing, but couldn&amp;rsquo;t find a plugin that did exactly what I wanted. So I sorted it out myself.&lt;/p>
&lt;p>I cobbled together a hack using Google Cloud&amp;rsquo;s Text-to-Speech API and Obsidian&amp;rsquo;s Shell Commands plugin. Here&amp;rsquo;s how you can do it too (assuming you&amp;rsquo;re on Linux, if not you need some adjustment):&lt;/p></description></item></channel></rss>