<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Tulio Paschoalin Leao</title><link>https://tupscal.xyz/</link><description>Recent content on Tulio Paschoalin Leao</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><managingEditor>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</managingEditor><webMaster>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</webMaster><copyright>Tulio Paschoalin Leao (CC BY 4.0)</copyright><atom:link href="https://tupscal.xyz/index.xml" rel="self" type="application/rss+xml"/><item><title>Breaking Up with Google #2 — The Gmail purge</title><link>https://tupscal.xyz/blog/2026/02-22-breaking-up-google-gmail-purge/</link><pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2026/02-22-breaking-up-google-gmail-purge/</guid><description>&lt;div class="admonition experiment"&gt;
 &lt;div class="admonition-header"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"&gt;&lt;path d="M288 0L160 0 128 0C110.3 0 96 14.3 96 32s14.3 32 32 32l0 132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6C0 480.9 31.1 512 69.4 512l309.2 0c38.3 0 69.4-31.1 69.4-69.4c0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5L320 64c17.7 0 32-14.3 32-32s-14.3-32-32-32L288 0zM192 196.8L192 64l64 0 0 132.8c0 23.7 6.6 46.9 19 67.1L309.5 320l-171 0L173 263.9c12.4-20.2 19-43.4 19-67.1z"/&gt;&lt;/svg&gt;
 &lt;span&gt;Breaking Up With Google&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="admonition-content"&gt;
 &lt;p&gt;This article is part of the &amp;ldquo;Breaking Up With Google&amp;rdquo; series, an experiment in untangling myself from Google’s ecosystem — one service at a time. Visit the tag &lt;a href="https://tupscal.xyz/tags/breaking-up-with-google/"&gt;#breaking-up-with-google&lt;/a&gt; for more.&lt;/p&gt;</description><content:encoded><![CDATA[
    <div class="admonition experiment">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M288 0L160 0 128 0C110.3 0 96 14.3 96 32s14.3 32 32 32l0 132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6C0 480.9 31.1 512 69.4 512l309.2 0c38.3 0 69.4-31.1 69.4-69.4c0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5L320 64c17.7 0 32-14.3 32-32s-14.3-32-32-32L288 0zM192 196.8L192 64l64 0 0 132.8c0 23.7 6.6 46.9 19 67.1L309.5 320l-171 0L173 263.9c12.4-20.2 19-43.4 19-67.1z"/></svg>
        <span>Breaking Up With Google</span>
      </div>
      <div class="admonition-content">
        <p>This article is part of the &ldquo;Breaking Up With Google&rdquo; series, an experiment in untangling myself from Google’s ecosystem — one service at a time. Visit the tag <a href="https://tupscal.xyz/tags/breaking-up-with-google/">#breaking-up-with-google</a> for more.</p>
      </div>
    </div><p>In the <a href="https://tupscal.xyz/blog/2026/02-08-breaking-up-google-dependency/">first article</a> I realized my biggest priority to get out of Google was to get rid of Gmail, and I have wanted to do this for several years already, but a few things always felt like too much to handle and got in the way, particularly:</p>
<ol>
<li>My huge e-mail archive</li>
<li>All the places I would have to update my e-mail as the credential for login and/or to receive communications.</li>
</ol>
<p>Sure one could just set-up an auto redirect of e-mails from the old address to the new one and forget it<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, which is what a lot of services offer to configure automatically to lure you, but that just sweeps the problem under the rug. I set forth to understand the size of the first problem then.</p>
<nav id="TableOfContents">
  <ul>
    <li><a href="#cleaning-up-my-archive">Cleaning up my archive</a>
      <ul>
        <li><a href="#step-1-google-one-storage-manager">Step 1: Google One Storage Manager</a></li>
        <li><a href="#step-2-manually-scouring-the-mailbox">Step 2: Manually scouring the mailbox</a></li>
        <li><a href="#step-3-fine-tooth-comb">Step 3: Fine-tooth comb</a></li>
      </ul>
    </li>
    <li><a href="#wrap-up">Wrap-up</a></li>
  </ul>
</nav>
<h2 id="cleaning-up-my-archive">Cleaning up my archive</h2>
<p>It&rsquo;s been at least 20 years since I created my account<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> and, incredibly, e-mail hasn&rsquo;t changed much since then. There was the advent and downfall of <a href="https://tupscal.xyz/blog/2024/01-10-snoozed-until-99/">Inbox by Gmail</a> for me and the fact that most people now read their messages on their phones, rather than on a computer, but in terms of interface it remains roughly the same, with the same dominant players and a notable improvement in filtering spam.</p>
<p>At some point Gmail introduced tabs to categorize e-mails, though for some reason I turned them off, never looked back and resorted instead to my labels<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, which categorized everything: promotional e-mails, university news, travel confirmations, purchase receipts and so on. All in all, there was so much archive that I kinda of saw Gmail as a hoarder dragon with me trying to get away:</p>
<figure><img src="/images/2026/02-22_gmail_cleanup/dragon_email_hoarder.png"
    alt="The image shows a dragon in a mountainous cave lying down atop a gigantic pile of e-mails. He is rainbow-patterned, resembling Google, and there is a small man looking terrified running from him with one of the mails in hand." height="200"><figcaption>
      <p>AI-generated image using <a href="https://chatgpt.com/">ChatGPT</a> with a prompt akin to <em>&ldquo;A dragon, mimicking the kind of common knowledge that dragons are hoarders of treasure, but in this case, it&rsquo;s of e-mail. The dragon is prismatic, like the ones described in D&amp;D, but instead of single color, it is multi-colored patterned with the Google colors and in front of it there is a Bilbo Baggins-like nerd with beard and turtle-patterned glasses running from him and his pile of e-mails&rdquo;</em></p>
    </figcaption>
</figure>

<p>Anyway, I decided to start the purge because I was rapidly approaching my total Google storage quota and though Gmail was far from being the biggest villain in terms of space hogging, it sounded like the perfect excuse to finally do it. At the time it was taking 5.5 GB of my storage spread over 30,000 e-mails and if I combed through each of them in 2s, it would take me over 16 hours to going through them all. It was too much<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>, and still it wasn&rsquo;t realistic: opening, skimming and taking action in 2s, were it to be 5s instead, it would eat up almost 2 entire days, so I needed another approach.</p>
<h3 id="step-1-google-one-storage-manager">Step 1: Google One Storage Manager</h3>
<p>On its Storage Manager, Google offers a &ldquo;Clean up suggested items&rdquo;, which for Gmail, shows you  what are your e-mails with the largest attachments: larger than 20MB, between 10MB and 20MB or smaller than 10MB. I started from there and I quickly got down to 3GB by deleting not more than 100 items, from there though it&rsquo;s not the greatest interface to continue grinding, as I was left with 14 &ldquo;large&rdquo; e-mails taking 130MB and was left alone to find the takers of the remaining 2.9GB.</p>
<p>I can think of a couple reasons why Google doesn&rsquo;t make it easier to manage your mailbox:</p>
<ol>
<li>The tool does help you clean-up the bulk quickly, a good tradeoff.</li>
<li>It earns more if you give up and just beef up your Google One plan.</li>
<li>It likely isn&rsquo;t worth investing in Gmail anymore, as a kind of stable commodity.</li>
</ol>
<p>Therefore I needed other strategies to keep moving.</p>
<h3 id="step-2-manually-scouring-the-mailbox">Step 2: Manually scouring the mailbox</h3>
<p>I then switched to go through the e-mails guided by my labels. Starting with &ldquo;promotions&rdquo;, I would go to its last page, select all and take a quick glance at their titles, unchecking the ones I wanted to keep. It was working, but as the pages went by, there were more and more messages I had to deselect to keep, and as each page only showed up to 50 mails having to uncheck 10 of them would mean undoing 20% of the check all every page, with potential to grow, so it wouldn&rsquo;t scale unless they were 99% junk e-mail.</p>
<p>Then I figured it would be better to stop deleting at every page and start accumulating the selections in bigger batches<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> which seemed to be fair enough, as I had over two thousand e-mails triaged with 2,000 marked for deletion, but then something happened:</p>

    <div class="admonition error admonition--headless">
      <div class="admonition-content">
        <p>I clicked on the wrong place and all of the selections were gone.</p>
      </div>
    </div><p>It almost physically hurt, tens of minutes of work vanished and I was mourning having to do it again so I&rsquo;d rather change tactics: scan a few pages looking at the most common sender, search for them, clean them up and repeat, which would make sure I was cleaning up the &ldquo;most prevalent&rdquo;. This made it more manageable to decide what to keep or not, as within a given sender there was more predictability over the content and with primarily the top 10 most common senders, I axed another ten thousand e-mails. Here are them in case you&rsquo;re curious:</p>
<ol>
<li>Amazon - 2,000</li>
<li>TED - 1,421</li>
<li>TeeNOW - 800</li>
<li>Centauro - 809</li>
<li>Nubank - 750</li>
<li>Airbnb - 696</li>
<li>Uber - 533</li>
<li>Kickstarter - 452</li>
<li>Tripadvisor - 417</li>
<li>Humble Bundle - 415</li>
</ol>
<p>The rest was a lot more boring, rinsing and repeating until I was left with one thousand e-mails in total (down from 30,000!), and you know what the size of my inbox was at this point? 2.5 GB 🤡</p>
<h3 id="step-3-fine-tooth-comb">Step 3: Fine-tooth comb</h3>
<p>I was appalled, how come I had deleted 97% of my mails after having cleaned up most of the ones larger than 10MB and still was halfway there in terms of storage? At this point it was a manageable amount of e-mails, at least, so I decided to take the long route and look at each of them individually.</p>
<p>Google does not show any size data on Gmail even though you can search giving a size constraint, thus I needed another way to inspect them. I decided to download everything using <a href="https://takeout.google.com/">Google Takeout</a>, a service that allows you to get any and all data Google has about you so you can own and take it away. It delivers you a zip with one or more files within, depending on what you requested, how much data there is and how you decided to split it<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>. In my case they were 2 files: a tiny <code>JSON</code> with my mail settings and a 2.55GB <code>.MBOX</code> file with all my mail.</p>
<p>Having never seen the <code>.mbox</code> format before, my first thought was to open it in Visual Studio Code, which is what I do every time I see a new extension, and this is what I got:</p>
<figure><img src="/images/2026/02-22_gmail_cleanup/vscode_size_warning_en.png"
    alt="A warning message shown by Visual Studio Code stating the file hasn&#39;t been displayed due to it being too large and allowing the user to open it anyway." height="200"><figcaption>
      <p>Surely you don&rsquo;t want to open a 2.55GB file?</p>
    </figcaption>
</figure>

<p>&ldquo;Open anyway&rdquo;, we didn&rsquo;t come all this way to stop here VSCode!</p>
<figure><img src="/images/2026/02-22_gmail_cleanup/vscode_size_crash_en.png"
    alt="An error pop-up showing that Visual Studio Code malfunctioned while trying to open the large file." height="200"><figcaption>
      <p>Yay, a crash!</p>
    </figcaption>
</figure>

<p>I tried a few other editors and they also refused<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>, this was not going to work, upon searching most of the suggestions to read an <code>.MBOX</code> file were to either use <a href="https://www.thunderbird.net/">Thunderbird</a>, Mozilla&rsquo;s offline e-mail client, or an online service. I didn&rsquo;t want to use the former because I thought it would be more complicated than I needed to, after all it is a mail client and I&rsquo;m not migrating, yet. The latter because being online you never know what they might be doing with my data. Eventually I found an open source alternative <a href="https://github.com/eneam/mboxviewer">MBox Viewer</a>:</p>
<figure><img src="/images/2026/02-22_gmail_cleanup/mbox_en.png"
    alt="A simple window that looks a lot like an offline e-mail client with a list of e-mails showing the date, title, sender, recipients, size and a preview of the selected e-mail below." height="200"><figcaption>
      <p>A collapsed view of the MBox Viewer showing my e-mail archive</p>
    </figcaption>
</figure>

<p>From the get-go you can see several interesting things:</p>
<ol>
<li>It allows me to sort all mails by any of the columns, which:
<ul>
<li>Could have made my step 2 easier if I sorted by &ldquo;from&rdquo;</li>
<li>Empowers me to sort by size and find the leftover big mails!</li>
</ul>
</li>
<li>It shows &ldquo;Mail xx of 39191&rdquo;, but I thought I had wiped it down to 1 thousand !?</li>
</ol>
<p>Turns out the takeout service exports everything including the spam folder, which I had empty, and the trash, which still contained over 30k e-mails, as Gmail only purges messages that have been in the trash for longer than 30 days. I clicked on the almighty &ldquo;empty trash now&rdquo; button and after a few minutes and two attempts<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup> it was empty and to my surprise, Gmail was now only taking 0.23GB of my storage! I guess all the cleaning of step 1 was effective because those were files too large for the trash to handle, but not the ones in step 2, it&rsquo;s a bit of a relief that the latter was not in vain.</p>
<p>Still I wanted to keep cleaning up my mail, because if I&rsquo;m to take it anywhere on the next step, I don&rsquo;t want to carry useless e-mails, even if they don&rsquo;t take up space, so I went to Google Takeout for another go. I tried opening it on VSCode for fun and it worked<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup>, even so I kept on using MBox Viewer where it said there were 2366 mails, roughly twice what I was seeing listed on Gmail. Luckily it has a feature to &ldquo;Rebuild Gmail labels&rdquo;, so you can see them categorized in the same way on the app, and here&rsquo;s what this number was broken down:</p>
<table>
  <thead>
      <tr>
          <th>Category</th>
          <th>Number of Mails</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Inbox</td>
          <td>21</td>
      </tr>
      <tr>
          <td>Archived</td>
          <td>1360</td>
      </tr>
      <tr>
          <td>Sent</td>
          <td>562</td>
      </tr>
      <tr>
          <td>Chat</td>
          <td>805</td>
      </tr>
  </tbody>
</table>
<p>These are counting each mail in a thread separately, which is where part of the divergence might come from. Also, the numbers add up to more than the total, as one mail can be both a chat and archived.</p>
<p>My biggest struggle now was to decide whether I would part ways with nostalgia or not: before starting the cleanup a lot of my archived e-mails were either useless (promotions), useful (like purchase receipts)<sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup> or potentially useful: conversation history with friends and family which might have something I wanted to remember at some point or not. Deleting the latter is a difficult action, because it is the kind of thing that gets you thinking stuff like:</p>
<blockquote>
<p>Wouldn&rsquo;t it be fun to read these 20 years from now?</p>
</blockquote>
<p>Conversely, they have been there for 10 years and I haven&rsquo;t read them ever since. In the end, I decided to delete all my chats and some more of the archived e-mails, keeping only the threads with family and friends, they&rsquo;re neatly grouped if I ever think about deleting them.</p>
<h2 id="wrap-up">Wrap-up</h2>
<p>I feel a peace of mind of finally having done this clean-up and preparing the groundwork for any migration to happen and I&rsquo;m satisfied settling at 0.2GB total space as this would be small enough to migrate to almost any of the free e-mail services out there. Out of complete chance, when I was finishing this article up, I received this e-mail:</p>
<figure><img src="/images/2026/02-22_gmail_cleanup/yahoo_gone_en.png"
    alt="An e-mail from Google stating that one of my backup e-mails for recovering the account, using Yahoo, is now unreachable." height="200"><figcaption>
      <p>Farewell my Yahoo e-mail</p>
    </figcaption>
</figure>

<p>Seems like Yahoo decided to delete my very inactive Yahoo e-mail address and I&rsquo;m not out of a backup e-mail, kind of like compelling me to keep this series at a very active pace 😊.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Which is what I intend to do at first to not overcommit.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Likely more, since I fetched this date from YouTube&rsquo;s &ldquo;joined date&rdquo;, but that only goes as far as its acquisition by Google.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Or folders, depending on what the service you use calls them.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Even if I was very unoccupied at the time.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Maybe when the number of &ldquo;mails to keep&rdquo; topped 50?&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>You can choose to split the content in files of 1, 2, 4, 10 and 50GB.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>Antigravity (which is essentially VSCode, so warned and crashed in the same way) and Windows Notepad, which refused to open without a way to override.&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>On the first try it bailed out from deleting everything and still had 5k e-mails left, but on the second it finished successfully.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>A file with 3,543,445 lines! I guess the previous one crashed because there was an integer overflow somewhere (specially given the negative number in the crash message), but 10x this number of lines is nowhere close to the infamous INT_MAX, so it must be somewhere else.&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>For which I needed one just after deleting and I couldn&rsquo;t tell whether I had misdeleted or if it was never there.&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Breaking Up with Google #1 — How Deep Am I In?</title><link>https://tupscal.xyz/blog/2026/02-08-breaking-up-google-dependency/</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2026/02-08-breaking-up-google-dependency/</guid><description>&lt;hr&gt;
&lt;p&gt;This article is the first of the &amp;ldquo;Breaking Up With Google&amp;rdquo; series, an experiment in untangling myself from Google’s ecosystem — one service at a time. Follow the tag &lt;a href="https://tupscal.xyz/tags/breaking-up-with-google/"&gt;#breaking-up-with-google&lt;/a&gt; to see more.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;It&amp;rsquo;s the beginning of 2026 and despite not having written yearly goals, I decide to rekindle an old one:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Stop using so many of Google&amp;rsquo;s products.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;m not being paranoid and moving away from the internet &lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, though I have seen some stories of people being banned from Google&amp;rsquo;s services for &lt;a href="https://www.businessinsider.com/google-users-locked-out-after-years-2020-10"&gt;apparently no reason&lt;/a&gt; or for &lt;a href="https://www.reddit.com/r/gamedev/comments/1e2c9hk/my_google_developer_account_was_banned_and_im_not/"&gt;an explanation they don&amp;rsquo;t seem to have anything to do with&lt;/a&gt;. Maybe these people are hiding part of the story, nevertheless it scares me every now and then that it might eventually happen with me.&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p>This article is the first of the &ldquo;Breaking Up With Google&rdquo; series, an experiment in untangling myself from Google’s ecosystem — one service at a time. Follow the tag <a href="https://tupscal.xyz/tags/breaking-up-with-google/">#breaking-up-with-google</a> to see more.</p>
<hr>
<p>It&rsquo;s the beginning of 2026 and despite not having written yearly goals, I decide to rekindle an old one:</p>
<blockquote>
<p>Stop using so many of Google&rsquo;s products.</p>
</blockquote>
<p>I&rsquo;m not being paranoid and moving away from the internet <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, though I have seen some stories of people being banned from Google&rsquo;s services for <a href="https://www.businessinsider.com/google-users-locked-out-after-years-2020-10">apparently no reason</a> or for <a href="https://www.reddit.com/r/gamedev/comments/1e2c9hk/my_google_developer_account_was_banned_and_im_not/">an explanation they don&rsquo;t seem to have anything to do with</a>. Maybe these people are hiding part of the story, nevertheless it scares me every now and then that it might eventually happen with me.</p>
<p>Over the past years I have convinced myself that being one of their paying customers likely reduces my chances of being targeted by a &ldquo;random&rdquo; hammer ban, but I think it&rsquo;s just wishful thinking, given it&rsquo;s all chump change for Google. I figured then that the best thing to do would be to reason about all of their services I currently use and their importance to me if lost, so I have somewhere to start from:</p>
<table>
  <thead>
      <tr>
          <th>Service</th>
          <th>Importance</th>
          <th>Impact</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Gmail</td>
          <td>Critical</td>
          <td>Loss of archived e-mails, becoming unreachable by several services, being locked away from some website logins<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</td>
      </tr>
      <tr>
          <td>Photos</td>
          <td>High</td>
          <td>Loss of pictures and videos not backed up anywhere else<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, would be sad, but not life-changing.</td>
      </tr>
      <tr>
          <td>Keep</td>
          <td>Medium</td>
          <td>Loss of notes not backed up anywhere else, but that aren&rsquo;t usually carrying critical information (mostly read it later links or historical data)</td>
      </tr>
      <tr>
          <td>Calendar</td>
          <td>Medium</td>
          <td>Missing some appointments and losing records, could mostly be reconstructed.</td>
      </tr>
      <tr>
          <td>Drive</td>
          <td>Low</td>
          <td>No real loss, as everything is backed up on my computer. Right?<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup></td>
      </tr>
      <tr>
          <td>Maps</td>
          <td>Low</td>
          <td>Would lose several places marked as favorite and such, but would be recoverable.</td>
      </tr>
      <tr>
          <td>Docs</td>
          <td>Low</td>
          <td>No real loss, I think? As far as I know everything is on Drive, and I could reconstruct the documents somewhere else with a new account.</td>
      </tr>
  </tbody>
</table>
<p>It is clear then that I should start from Gmail, given it is the only one I think is critical, but to do so I should first clean it up and that&rsquo;s a story for another post, hope you follow the series<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>!</p>
<figure><img src="/images/2026/02-08-google_fence_en.png"
    alt="The image shows a skeleton jumping an Google-themed obstacle and saying &#34;Get your fence away from me, dude!&#34; and a human body with exposed muscles and imprinted Google logos running after it" height="200"><figcaption>
      <p>AI-generated image using <a href="https://chatgpt.com/">ChatGPT</a> with the prompt <em>&ldquo;Queria adaptar o meme em anexo pro esqueleto que está na frente estar falando &ldquo;sai com sua cerca pra lá maluco&rdquo; e estivesse pulando uma cerca ou um obstáculo de corrida com obstáculos. O corpo de trás que mostra a anatomia deve ter referências sutis a diversos produtos da Google. Pode utilizar outro estilo de desenho ou pintura que fique mais caricato se ficar melhor&rdquo;</em></p>
    </figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Though if you&rsquo;re interested in such a thing, there&rsquo;s a step-by-step guide on <a href="https://www.optoutproject.net/the-cyber-cleanse-take-back-your-digital-footprint/">The Opt Out Project</a>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Several services today don&rsquo;t allow you to set-up a password, but instead have you type your e-mail then a confirmation number sent to it.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Because of course you cannot configure photos to be synced offline as part of Google Drive.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Figured out not really when writing this post, as these services have defaulted to &ldquo;leave everything on cloud until you need it, to save space on your computer&rdquo;. Dangerous, but I have that setting changed, so crisis averted.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>And that I have perseverance to follow through.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Experimentation - Windows Launchers</title><link>https://tupscal.xyz/blog/2026/01-25-windows_launchers/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2026/01-25-windows_launchers/</guid><description>&lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#what-are-launchers"&gt;What are Launchers?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#why-change-launchers"&gt;Why change Launchers?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#picking-launchers"&gt;Picking Launchers&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#my-usage-of-launchers"&gt;My usage of launchers&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#a-note-on-windows-jump-list"&gt;A note on Windows&amp;rsquo; Jump List&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#testing-the-launchers"&gt;Testing the Launchers&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#wox-v1"&gt;Wox v1&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#flow-launcher"&gt;Flow Launcher&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#raycast"&gt;Raycast&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#plug-in-showdown"&gt;Plug-in showdown&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#browsing-plugins"&gt;Browsing Plugins&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#using-plugins"&gt;Using Plugins&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#tested-plugins"&gt;Tested Plugins&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-verdict"&gt;The Verdict&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
&lt;h2 id="what-are-launchers"&gt;What are Launchers?&lt;/h2&gt;
&lt;p&gt;Every time someone needs to do something different on Windows, like open a file or find an application, most will either resort to their desktop shortcuts or slowly navigate their start menu until they find it, while some might even search on Windows Explorer and fewer still will hit the windows keyboard key and go from there.&lt;/p&gt;</description><content:encoded><![CDATA[<nav id="TableOfContents">
  <ul>
    <li><a href="#what-are-launchers">What are Launchers?</a></li>
    <li><a href="#why-change-launchers">Why change Launchers?</a></li>
    <li><a href="#picking-launchers">Picking Launchers</a></li>
    <li><a href="#my-usage-of-launchers">My usage of launchers</a>
      <ul>
        <li><a href="#a-note-on-windows-jump-list">A note on Windows&rsquo; Jump List</a></li>
      </ul>
    </li>
    <li><a href="#testing-the-launchers">Testing the Launchers</a>
      <ul>
        <li><a href="#wox-v1">Wox v1</a></li>
        <li><a href="#flow-launcher">Flow Launcher</a></li>
        <li><a href="#raycast">Raycast</a></li>
      </ul>
    </li>
    <li><a href="#plug-in-showdown">Plug-in showdown</a>
      <ul>
        <li><a href="#browsing-plugins">Browsing Plugins</a></li>
        <li><a href="#using-plugins">Using Plugins</a></li>
        <li><a href="#tested-plugins">Tested Plugins</a></li>
      </ul>
    </li>
    <li><a href="#the-verdict">The Verdict</a></li>
  </ul>
</nav>
<h2 id="what-are-launchers">What are Launchers?</h2>
<p>Every time someone needs to do something different on Windows, like open a file or find an application, most will either resort to their desktop shortcuts or slowly navigate their start menu until they find it, while some might even search on Windows Explorer and fewer still will hit the windows keyboard key and go from there.</p>
<figure><img src="/images/2026/01-25_experimentation_launchers/windows_launcher.png"
    alt="A screenshot of one usage of the windows launcher for doing a sum calculation. It shows the numbers 64&#43;51 on the search bar at the top, the calculator with the operation and result on the right and an option to search for this expression on the web on the left."><figcaption>
      <p>Trying a sum operation after hitting the windows key</p>
    </figcaption>
</figure>

<p>The windows key today is the starting point of what most would call a launcher: press it and from there find files, apps, do web searches or math without having to open the calculator. The idea is that it will take you to anywhere you might need to go, regardless of where that is, and while this can be extremely useful, the modern launchers go even further.</p>
<h2 id="why-change-launchers">Why change Launchers?</h2>
<p>The big problem with Windows native launcher is that it is too basic, barely customizable<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> and often has a hard time finding files, thus apart from the basic searches where you would expect it to work on, it mostly leaves you wanting more.</p>
<p>Custom launchers today have a lot of built-in extensions to make your life easier on the launch itself: money conversion, shortcuts to actions inside popular apps<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, common browser searches and even to system commands. It&rsquo;s a keyboard-driven approach to using the computer with a single starting point: instead of going to each app to do your thing, solve it all on the launcher itself.</p>
<p>It is great, so let&rsquo;s dive a bit into what is out there.</p>
<h2 id="picking-launchers">Picking Launchers</h2>
<p>I&rsquo;ve curated a small list of launchers from what I found to be the most popular on Windows:</p>
<table>
  <thead>
      <tr>
          <th>Launcher</th>
          <th>Latest Version</th>
          <th>Open Source?</th>
          <th>Plugins/Extensions</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://wox-launcher.github.io/Wox/">Wox</a></td>
          <td>2.0.0 (Jan 2026)<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></td>
          <td>Yes</td>
          <td>Yes, ~350<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup></td>
      </tr>
      <tr>
          <td><a href="https://www.flowlauncher.com/">Flow Launcher</a></td>
          <td>2.0.3 (Nov 2025)</td>
          <td>Yes</td>
          <td>Yes, ~300</td>
      </tr>
      <tr>
          <td><a href="https://www.raycast.com/windows">Raycast</a></td>
          <td>0.42.3.0 (Jan 2026)</td>
          <td>No</td>
          <td>Yes, ~2500</td>
      </tr>
      <tr>
          <td><a href="https://learn.microsoft.com/en-us/windows/powertoys/command-palette/overview">PowerToys Command Palette</a><sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></td>
          <td>0.96.1 (Nov 2025)</td>
          <td>Yes</td>
          <td>Yes, ~25<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup></td>
      </tr>
      <tr>
          <td><a href="https://keypirinha.com/index.html">Keypirinha</a></td>
          <td>2.26 (Nov 2020)</td>
          <td>No</td>
          <td>Yes, ~20</td>
      </tr>
  </tbody>
</table>
<p>My goal here is share my findings after testing the first three in the table:</p>
<ol>
<li><strong>Wox</strong>: my main launcher for several years which feels a bit stuck in time and limited<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>.</li>
<li><strong>Flow Launcher</strong>: looks like a spiritual successor to Wox<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup> and is also open source.</li>
<li><strong>Raycast</strong>: because it looks like the most powerful, deriving from a successful implementation for MacOS.</li>
</ol>
<figure><img src="/images/2026/01-25_experimentation_launchers/launchers_on_shelf.png"
    alt="The images shows a grocery-store like shelf with plain boxes with the logo of each of Wox v1, Wox v2, Raycast and Flow Launcher." height="200"><figcaption>
      <p>AI-generated image using <a href="https://chatgpt.com/">ChatGPT</a> with the prompt <em>&ldquo;I need a header image for a post that is a thorough evaluation of different Windows launchers, namely Wox v1, Wox v2, Raycast and Flow Launcher. Please generate one and make sure you include the logos of the 4, which are attached, where they are actually boxes in a store&rsquo;s shelf waiting to be picked&rdquo;</em></p>
    </figcaption>
</figure>

<p>I decided not to test PowerToys Command Palette, because PowerToys are experimental features for Windows with a not so consistent support and they eventually graduate to be Windows native tools anyway. Also as already noted, I found it difficult to find its plugins<sup id="fnref1:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>. I didn&rsquo;t give Keypirinha a chance due to its apparent state of abandonment, not receiving any new release since 2020, even if it still works.</p>
<h2 id="my-usage-of-launchers">My usage of launchers</h2>
<p>I have been using Wox as my launcher for years and it&rsquo;s mostly very simple usage with just the built-in plugins to do three things:</p>
<ol>
<li><strong>Search for files</strong>: I don&rsquo;t like Windows native search, it often finds no match at all even when you know the file exists. Wox combined with <a href="https://www.voidtools.com/downloads/">Everything</a> completely changes the search experience and makes it very useful.</li>
<li><strong>Quickly search within a given service</strong>: Surely searching Google when you need to look something up will lead you to what you need, but sometimes you know upfront that you want to restrict the search to a given website. In my case this was searching directly at JIRA or Confluence (bug tracker and wikis I use at work) to get there faster by just prepending my Wox command with <em>j</em> or <em>w</em>, respectively.</li>
<li><strong>Do calculations</strong>: open it up and do some math, nothing fancy.</li>
</ol>
<p>Every now and then I would also use it to run terminal/shell commands and that&rsquo;s it, I was happy for years and not longing for more until I stumbled upon <a href="https://www.flowlauncher.com/">Flow Launcher</a> and saw it could be much more.</p>
<h3 id="a-note-on-windows-jump-list">A note on Windows&rsquo; Jump List</h3>
<p>Introduced with Windows 7, jump lists are those shortcuts to frequent actions you take on a given application to speed up your usage. They show up in two places: when you right click a pinned application on your taskbar or when you search for this application in the context of the windows key.</p>
<p>I rarely ever use the option from the taskbar, as I usually don&rsquo;t like to keep many applications open nor pinned, but I became obsessed with its search counterpart. You see, in a given week at work I&rsquo;m often editing the same presentations and spreadsheets and as soon as I&rsquo;m done, I close them, but eventually I&rsquo;ll need to get back. When that happens, I don&rsquo;t want to have to remember where they are to slowly navigate there<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup> or alternatively to open the application, like PowerPoint and then browse its recent tab. Instead I just search for the application, see what shows up and pick the file I want, it works 95% of the time.</p>
<figure><img src="/images/2026/01-25_experimentation_launchers/windows_jump_list.png"
    alt="A screenshot of one usage of the windows launcher for seeing the recent actions and files of a given application&#39;s jump list. In this screenshot the user searched for &#34;Excel&#34;, the Microsoft application, and saw a jump list of the 9 most recently used spreadsheets." height="200"><figcaption>
      <p>All of my not so creatively named spreadsheet files which I recently opened</p>
    </figcaption>
</figure>

<p>It was not a requirement for me that the main launcher should support this, as I&rsquo;m fine remembering to use the Windows one when that&rsquo;s the case, but it would be great if it did, so I could centralize everything.</p>
<h2 id="testing-the-launchers">Testing the Launchers</h2>
<figure><img src="/images/2026/01-25_experimentation_launchers/launchers_side_by_side.png"
    alt="A montage of screenshots of the three different launchers. On the top left the search bar for wox, which is just a blank input line. On the bottom left the Flow Launcher which shows a blank input line with a search hint and the current time as well as some suggestions of shortcuts. On the right, Raincast has a different look, but similar feel as Flow Launcher." height="200"><figcaption>
      <p>Launchers as they appear when the hotkey is pressed. Wox (top left), Flow Launcher (bottom left) and Raincast (right)</p>
    </figcaption>
</figure>

<h3 id="wox-v1">Wox v1</h3>
<p>It is simple, fast and it gets the job done. It doesn&rsquo;t look fancy as the others do<sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup>, still I used it all this time, with just the built-in plugins<sup id="fnref:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup> and was satisfied, period. To this day some people get a bit shocked when I just hit the hotkey and type a JIRA key into an empty search bar, as seen above, and all of a sudden I&rsquo;m there, without touching the mouse.</p>
<p>It also does a very good job at searching files on my system once I integrated it with Everything, especially because I have several files with the same name but on different folders, like 2025.txt<sup id="fnref:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup>, and it would display the results with the path, so I could quickly find which one I wanted.</p>
<p>There is only a minor nuisance: sometimes it gets calculations wrong. It is not catastrophic, I&rsquo;m good at doing math mentally and most of the time use Wox for double checking, notice it was wrong, erase the last digit and type again, which would then fix it<sup id="fnref:13"><a href="#fn:13" class="footnote-ref" role="doc-noteref">13</a></sup>. Still it bothered me.</p>
<p>All in all Wox was fit for all my needs, except sometimes unpredictably, it wasn&rsquo;t.</p>
<h4 id="a-note-on-wox-v2">A note on Wox v2</h4>
<p>I realize it might be a bit hypocritical on my end to test Raycast on a beta version and not give Wox the same chance, but a very fast trial showed a big blocker:</p>
<figure><img src="/images/2026/01-25_experimentation_launchers/wox_comparisons.png"
    alt="A screenshot of versions 1 and 2 of Wox showing that v1 correctly identifies comma as the decimal separator and outputs 51 for the sum of 19.5 &#43; 31.5, but v2 fails to see this as a mathematical operation and just hints at Google Search and AI." height="200"><figcaption>
      <p>Trying to sum 19,5 + 31,5 on Wox v1 and v2.</p>
    </figcaption>
</figure>

<p>In Brazil the decimal separator is the comma. Wox v1 allows you to configure it and also interprets both dot and commas as decimal separators at the same time, so if for any crazy reason you try <code>19,5 + 31.5</code>, it would still output <code>51</code>. v2 on the other hand neither allows configuration of the decimal separator, nor automatically identifies comma as one, as seen above, but I filed <a href="https://github.com/Wox-launcher/Wox/issues/4325">an issue</a> for them to improve and the developer is on to it!</p>
<h3 id="flow-launcher">Flow Launcher</h3>
<p>Right from the installer I&rsquo;m guided through the app and hotkey configuration and get a feel that the Flow Launcher was developed with better user experience in mind. It also has better experience when in use, since it has hints of quick access shortcuts like <code>Alt + number</code> to directly open a result<sup id="fnref:14"><a href="#fn:14" class="footnote-ref" role="doc-noteref">14</a></sup>:</p>
<figure><img src="/images/2026/01-25_experimentation_launchers/flow_alt_results.png"
    alt="A screenshot of the flow launcher with the search term &#34;Settings&#34; and five results, showing you can quickly navigate to any by typing the corresponding Alt key plus the search result number." height="200"><figcaption>
      <p>Searching for settings and having quick navigation to the top 5 results with the alt key</p>
    </figcaption>
</figure>

<p>There is also the option of opening a context menu on the result, which is helpful if you searched for a file and want to open it in a different program than the default, for example.</p>
<p>Thinking about my basic needs, I could easily configure its built-in web search plugin to navigate to JIRA and Confluence. I did have a harder time with its file search capability: the native one wasn&rsquo;t useful at all. When I configured it to use Everything it improved dramatically, but then sometimes it seems like Everything does not start-up or crashes and all of a sudden file search hangs. Then we get to the final boss, the calculator:</p>
<figure><img src="/images/2026/01-25_experimentation_launchers/flow_calculator.png"
    alt="A screenshot of the flow launcher with the three attempts of summing up 19.5 and 31.5, mixing comma and dot as decimal separator and showing different results." height="200"><figcaption>
      <p>Trying to sum the same numbers using different and mixed decimal separators</p>
    </figcaption>
</figure>

<p>Contrary to Wox v2 its decimal separator is configurable and as long as you did configure, you can calculate using the same, but compared to Wox v1, it cannot deal with mixing comma and periods<sup id="fnref:15"><a href="#fn:15" class="footnote-ref" role="doc-noteref">15</a></sup>, which hopefully they&rsquo;ll <a href="https://github.com/Flow-Launcher/Flow.Launcher/issues/4231">agree to fix</a>. I also could not use the <a href="https://github.com/Flow-Launcher/Flow.Launcher/issues/1358">Windows key on the hotkey</a>, but that can be worked around with muscle memory more easily.</p>
<h3 id="raycast">Raycast</h3>
<p>Of the three tested alternatives, Raycast is the only one which is not open source and it has some added quirks or differences due to this:</p>
<ol>
<li>Instead of downloading from GitHub, you download from the Microsoft Store<sup id="fnref:16"><a href="#fn:16" class="footnote-ref" role="doc-noteref">16</a></sup>, theoretically a safer place to browse and install applications.</li>
<li>It is not 100% free, with &ldquo;Raycast Pro&rdquo; and &ldquo;Advanced AI&rdquo; plans required if you want native AI integration or cloud backup. I find it fair enough since these cost money, but limiting custom themes or clipboard history to paid plans is a bit more questionable.</li>
<li>It works a lot better out of the box, looks more polished and has great documentation, probably due to having a budget from the paid plans to hire one or more full time developers, instead of being a hobby project like the others.</li>
</ol>
<p>Looping back to my three basic needs, its file search worked flawlessly from the very first use, without having to configure Everything<sup id="fnref:17"><a href="#fn:17" class="footnote-ref" role="doc-noteref">17</a></sup> with an added benefit that it seems to sort the search results better, ranking recent files first and even considering lists of ignored files.</p>
<figure><img src="/images/2026/01-25_experimentation_launchers/raycast_search.png"
    alt="A screenshot of the Raycast launcher with the word &#34;experiment&#34; being searched and a list of matching results." height="200"><figcaption>
      <p>Searching through the raw file of this text</p>
    </figcaption>
</figure>

<p>Configuring the quick web searches worked, but was a bit different, since Raycast expects you to configure everything from its search bar. There were minor usability quirks, like hitting the key then tab to fill the query, instead of space, but one could get used to it.</p>
<p>Then on the most challenging of the tests, the calculator, it seems to do as great a job as Wox v1, with the added benefit that it looks cooler:</p>
<figure><img src="/images/2026/01-25_experimentation_launchers/raycast_calculator.png"
    alt="A screenshot of the Raycast launcher with the calculator open to do the calculation of 19,5 &#43; 31.5. It outputs the correct results even with the mixed decimal separators." height="200"><figcaption>
      <p>Doing mixed decimal separator sum on Raycast</p>
    </figcaption>
</figure>

<h2 id="plug-in-showdown">Plug-in showdown</h2>
<p>I have been basically using Wox with the native plugins up until now, but when I installed the newest launchers I found life could be a lot easier with some plugins, so I decided to write a separate section for my experience trying them out.</p>
<h3 id="browsing-plugins">Browsing Plugins</h3>
<p>You can search and install plugins from within the launcher search bar on all of them, though only Raycast will show and use statistics like number of downloads, sorting by it automatically and will allow filtering by categories. Additionally, you can use each of their websites to browse them, with Wox offering a very simple interface with no filtering or sorting, Flow allowing filtering and using random sorting and Raycast boasting the same capabilities as its native search option.</p>
<h3 id="using-plugins">Using Plugins</h3>
<p>An interesting thing about Raycast is that it allows each plugin to have multiple commands and you can define hotkeys for each of them if you&rsquo;d like. The downside of this is that it kind of expects you to select a plugin command first, then enter the query, whereas for Wox or Flow you can just type the plugin hotkey followed by the command and there you go, which seemed like faster usage over time.</p>
<h3 id="tested-plugins">Tested Plugins</h3>
<p>I chose some plugins which I knew would be useful from my daily habits and interests and ranked them using medals. An ❌ is unavailability, whereas a 🚧 denotes it is there, but malfunctions.</p>
<table>
  <thead>
      <tr>
          <th>Plugin</th>
          <th>Flow</th>
          <th>Raycast</th>
          <th>Wox v1</th>
          <th>Wox v2</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Board Game Geek</td>
          <td>🚧</td>
          <td>🍎-only</td>
          <td>❌</td>
          <td>❌</td>
      </tr>
      <tr>
          <td>Currency Converter</td>
          <td>🥈</td>
          <td>🥇</td>
          <td>🚧</td>
          <td>❌</td>
      </tr>
      <tr>
          <td>Obsidian</td>
          <td>🥉</td>
          <td>🥈</td>
          <td>❌</td>
          <td>🥇</td>
      </tr>
      <tr>
          <td>Spotify</td>
          <td>🥇</td>
          <td>🥈</td>
          <td>🚧</td>
          <td>🚧</td>
      </tr>
      <tr>
          <td>Thesaurus</td>
          <td>❌</td>
          <td>🥈</td>
          <td>🥈</td>
          <td>❌</td>
      </tr>
  </tbody>
</table>
<ul>
<li><strong>Board Game Geek</strong>: No working implementation, since <a href="https://github.com/macro21KGB/Flow.Launcher.Plugin.BoardGameGeek/issues/1">Flow&rsquo;s errors</a> and Raycast&rsquo;s is MacOS exclusive.</li>
<li><strong>Currency Converter</strong>: It&rsquo;s built-in on Raycast&rsquo;s calculator, so it looks neat, but is non-configurable. On Flow it&rsquo;s a plug-in and a bit uglier, but it allows configuring default currency, so you can input a single number and see what it converts to, without specifying source and destination currency.</li>
<li><strong>Obsidian</strong>: Flow&rsquo;s is only a shortcut to open Obsidian, whereas both Raycast and Wox v2 show previews. I prefer Wox&rsquo;s because it requires less typing and it searches on demand.</li>
<li><strong>Spotify</strong>: Couldn&rsquo;t get past authorization on Wox. On Raycast it requires selecting a command then doing something, whereas on Flow you can type the command, which seemed faster. Interesting to note that both request a lot of Spotify permissions, but Flow&rsquo;s requests a bit more.</li>
<li><strong>Thesaurus</strong>: I found it to be a tie, Raycast shows it in a much nicer format, but errors out more frequently, whereas Wox v1 is trustworthy, but a bit more confusing.</li>
</ul>
<figure><img src="/images/2026/01-25_experimentation_launchers/thesaurus_comparisons.png"
    alt="A screenshot of both Wox v1 and Raycast Thesaurus plugins showing the result for the search of &#34;game&#34; with Wox results being lengthy and non-organized and Raycast being very complete and categorized." height="200"><figcaption>
      <p>Wox v1 (top) vs Raycast (bottom) searching for the same word &ldquo;game&rdquo;</p>
    </figcaption>
</figure>

<h2 id="the-verdict">The Verdict</h2>
<p>I&rsquo;ll try to use Raycast from now on, it is clearly the most polished and powerful, despite its usage mode not being my preferred style. Flow looks great compared to Wox v1, but would often show weird behaviors. I&rsquo;ll keep an eye out for Wox v2&rsquo;s official release though, as it improves on the visuals and seems to be incorporating some strengths of the other two, and it is open source, which is always a plus!</p>
<p>None of them ultimately had support to Windows jump lists and none was a clear winner on all of my assessments, so the conclusion is:</p>
<blockquote>
<p>I was happy with Wox and now I&rsquo;m not satisfied with any hahahahahaha</p>
</blockquote>
<p>Hope you enjoyed this article and happy launching 😂.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I looked and there are 5 togglable configurations.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Like searching within your Obsidian notes or playing music on Spotify.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>The latest stable version seems to be <a href="https://github.com/Wox-launcher/Wox/releases/tag/v1.3.183">v1.3.183</a>, all others that follow are either marked as beta or pre-release, but I&rsquo;m considering the 2.0.0 because it seems to be a big rewrite in the making and it more closely resembles what the other launchers are doing today.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Depending on whether you&rsquo;re running version 1 or 2.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>If you know PowerToys, you might be thinking about <a href="https://learn.microsoft.com/en-us/windows/powertoys/run">PowerToys Run</a>, which is also a launcher bundled within it, but the Command Palette is considered its successor, hence why I&rsquo;m listing it instead.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>It&rsquo;s hard to tell with precision as their extensions are just like any other app on the Microsoft store and as such it&rsquo;s difficult to search &amp; browse only extensions of the Command Palette. There are even <a href="https://www.reddit.com/r/PowerToys/comments/1kr9ume/command_pallet_extensions_thread/">threads on Reddit</a> of people trying to build a list for easier browsing.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>When I started this I didn&rsquo;t know there was a major revamp in the works with version 2.0.0.&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>I noticed this when I saw several plugins on Flow by the author of Wox and even a &ldquo;porting Wox plugins guide&rdquo; on Flow&rsquo;s documentation.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>Especially if it involves going through several folders on Microsoft Teams.&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>The upcoming version 2.0 looks more modern, but I didn&rsquo;t test it at length because of details to come in the next paragraph!&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p>Funnily enough when I started the experimentation phase for all the launchers I was confident that Wox was letting me down in terms of plugins, just to find out during the writing of the post that they have been there all the time, I just never clicked to install them 😂.&#160;<a href="#fnref:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:12">
<p>Please don&rsquo;t judge me.&#160;<a href="#fnref:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:13">
<p>Likely it misses the notification of &ldquo;new character entered&rdquo; and as such doesn&rsquo;t register the last digit, getting the wrong result.&#160;<a href="#fnref:13" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:14">
<p>While Wox v1 also natively supports this, it has no hints, so I never found out. I didn&rsquo;t see support for this on Wox v2 nor Raycast, but then both are still in beta, so maybe it will still come.&#160;<a href="#fnref:14" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:15">
<p>You might be thinking I&rsquo;m very picky right now, but I promise you that working mostly typing in English and speaking in Portuguese makes you choose the decimal separator almost at random.&#160;<a href="#fnref:15" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:16">
<p>Fun fact, while writing this, I decided to look up the other launchers on Microsoft Store. I didn&rsquo;t find Flow, but I did find Wox and it was not free there! It seems like someone might have &ldquo;stolen&rdquo; it and published it for a profit, as <a href="https://github.com/Wox-launcher/Wox/issues/4327">confirmed by the developer</a>.&#160;<a href="#fnref:16" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:17">
<p>Maybe it&rsquo;s used under the hood, but there was no hint about it anywhere.&#160;<a href="#fnref:17" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>2025, a lazy retrospective</title><link>https://tupscal.xyz/blog/2025/12-31-lazy-retrospective/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/12-31-lazy-retrospective/</guid><description>&lt;p&gt;As 2025 comes to a close, I thought it would be useful to revisit what I have written and the goals I set in the beginning of the year. First I wanted to write a post a month&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; then I also wanted to try different writing styles to see what would suit me best. Here&amp;rsquo;s a quick glimpse on everything I put &lt;del&gt;on paper&lt;/del&gt; online and some quick follow-ups on each article.&lt;/p&gt;</description><content:encoded><![CDATA[<p>As 2025 comes to a close, I thought it would be useful to revisit what I have written and the goals I set in the beginning of the year. First I wanted to write a post a month<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> then I also wanted to try different writing styles to see what would suit me best. Here&rsquo;s a quick glimpse on everything I put <del>on paper</del> online and some quick follow-ups on each article.</p>
<h2 id="experimentation">Experimentation</h2>
<p>When I envisioned this series I kind of thought I&rsquo;d be able to embark on a multi-month intensive testing of everything, which is what you see on both the Browser and the Microlearning series. That did limit how many experiments I could run in parallel aside from also having a job and normal life, but it was good to do so, hence I intend to continue it for years to come.</p>
<ul>
<li><em>2025-08-24</em> <a href="https://tupscal.xyz/blog/2025/08-24-microlearning/">The Year of Experimentation - Microlearning</a>: I didn&rsquo;t return to my Italian course on Duolingo nor to Brilliant.</li>
<li><em>2025-02-23</em> <a href="https://tupscal.xyz/blog/2025/02-23-year-experimentation-browsers/">The Year of Experimentation - Browsers</a>: Brave continues to be my main browser<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>!</li>
<li><em>2025-01-19</em> <a href="https://tupscal.xyz/blog/2025/01-18-year-experimentation/">The Year of Experimentation</a>: I did test some board game apps, but felt it was too niche to write about.</li>
</ul>
<h2 id="chronicles">Chronicles</h2>
<p>By far the easiest to write texts, because they kind of come up from a situation I experienced and as such are mostly ready.</p>
<ul>
<li><em>2025-11-23</em> <a href="https://tupscal.xyz/blog/2025/11-23-ode-local-basketball/">An ode to our small basketball</a>: We didn&rsquo;t attend another basketball game, but due to agenda conflicts!</li>
<li><em>2025-10-17</em> <a href="https://tupscal.xyz/blog/2025/10-17-tales-nerdy-day-off/">Nerdy tales from a day off</a>: The reimaged cellphone has been in the drawer ever since.</li>
<li><em>2025-06-30</em> <a href="https://tupscal.xyz/blog/2025/06-30-pharmacist-and-binary-search/">The pharmacist and the binary search</a>: I still have some free samples from that day.</li>
<li><em>2025-03-16</em> <a href="https://tupscal.xyz/blog/2025/03-16-upf-good-bad-ugly/">Ultra-Processed Food: The Good, the Bad and the Ugly</a>: I kinda stopped drinking whey, not sure if due to this.</li>
</ul>
<h2 id="politicsclimate">Politics/Climate</h2>
<p>Climate and politics intertwine in the two posts I wrote, but then it was difficult not to, as they involved urban planning decisions.</p>
<ul>
<li><em>2025-07-07</em> <a href="https://tupscal.xyz/blog/2025/07-07-bh-pmau/">Belo Horizonte, where&rsquo;s my tree?</a>: according to the city hall, 2025 was the year with most trees planted, still they&rsquo;re mostly on a single of the city&rsquo;s regions.</li>
<li><em>2025-04-29</em> <a href="https://tupscal.xyz/blog/2025/04-29-felt-climate-crisis-yet/">Have you felt the climate crisis yet?</a>: after writing this I kind stopped visiting the reservoir website<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></li>
</ul>
<h3 id="open-source">Open Source</h3>
<p>Just relayed into the blog posts I wrote trying to cover a bit more in-depth what we were doing in OpenRCT2.</p>
<ul>
<li><em>2025-08-29</em> <a href="https://tupscal.xyz/blog/2025/08-29-openrct2-0426-behind-scenes/">OpenRCT2&rsquo;s v0.4.26 behind the scenes</a></li>
<li><em>2025-05-31</em> <a href="https://tupscal.xyz/blog/2025/05-31-openrct2-0423-behind-scenes/">OpenRCT2&rsquo;s v0.4.23 behind the scenes</a></li>
</ul>
<p>That&rsquo;s a wrap, is anyone there reading on the other side? What do you enjoy reading the most?
Hopefully I will write a lot more stuff in 2026 😊</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Which I did, on average, but I failed in September.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Though I&rsquo;ve been suffering with Bitwarden auto-fill and I&rsquo;m not sure it is to blame&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Since then the sanitation company has been put on queue for being sold to private investors and we&rsquo;ve seen diminishing levels of potable waters in the reservoir 🫠.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>An ode to our small basketball</title><link>https://tupscal.xyz/blog/2025/11-23-ode-local-basketball/</link><pubDate>Sun, 23 Nov 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/11-23-ode-local-basketball/</guid><description>&lt;p&gt;My wife and I had the privilege of visiting Seattle earlier this year to attend the wedding of some dear friends and while most people would take the chance to squeeze as many side trips as possible, we decided to enjoy all that the city had to offer for the next 7 days&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;The WNBA playoffs were happening and the &lt;a href="https://en.wikipedia.org/wiki/Seattle_Storm"&gt;Seattle Storm&lt;/a&gt; would be hosting the &lt;a href="https://en.wikipedia.org/wiki/Las_Vegas_Aces"&gt;Las Vegas Aces&lt;/a&gt; in a couple days for the second game of the series, with the first being a major blowout in favor of the Aces. We bought the tickets and headed to the Climate Pledge Arena, as I wanted Leticia to have the &amp;ldquo;US sports game experience&amp;rdquo;&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;. It was indeed a complete experience: playoff shirts, halftime show, sound bites we chant to this day&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt; and a thrilling comeback by the Storm to win the game and tie the series&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;! It was exhilarating, we wanted more and I promised Letícia we would watch a local game when we got back to Brazil&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>My wife and I had the privilege of visiting Seattle earlier this year to attend the wedding of some dear friends and while most people would take the chance to squeeze as many side trips as possible, we decided to enjoy all that the city had to offer for the next 7 days<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>The WNBA playoffs were happening and the <a href="https://en.wikipedia.org/wiki/Seattle_Storm">Seattle Storm</a> would be hosting the <a href="https://en.wikipedia.org/wiki/Las_Vegas_Aces">Las Vegas Aces</a> in a couple days for the second game of the series, with the first being a major blowout in favor of the Aces. We bought the tickets and headed to the Climate Pledge Arena, as I wanted Leticia to have the &ldquo;US sports game experience&rdquo;<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. It was indeed a complete experience: playoff shirts, halftime show, sound bites we chant to this day<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> and a thrilling comeback by the Storm to win the game and tie the series<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>! It was exhilarating, we wanted more and I promised Letícia we would watch a local game when we got back to Brazil<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>.</p>
<p>Fast forward a couple months and I <del>remember</del> plan for us to attend the match between <a href="https://en.wikipedia.org/wiki/Minas_T%C3%AAnis_Clube_%28basketball%29">Minas</a> and <a href="https://en.wikipedia.org/wiki/Esporte_Clube_Pinheiros_%28basketball%29">Pinheiros</a><sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> for the <em>Novo Basquete Brasil</em> (<a href="https://en.wikipedia.org/wiki/Novo_Basquete_Brasil">NBB</a>). It is walking distance from our home and the ticket price is just R$20 (~$4), half the price of watching a movie in the local cinema<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>. Surely basketball in Brazil doesn&rsquo;t have the same prestige as football, but it is still the A-league and the price seemed a bargain, especially for families looking for some entertainment.</p>
<p>We walk up to the game and it is very tranquil: the arena can support 4400 people, but the announcer says there are ~800 in attendance and with the fans spread out and not being die-hard supporters, he has a tough time getting them to engage the chants<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>. Nevertheless some elements of amusement are there: the players are announced and enter the game amid a small pyrotechnic sequence, there are a few storm sound effects (since the team is Minas Storm<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup>), a shy <a href="https://en.wikipedia.org/wiki/Jumbotron">jumbotron</a> and even a small band.</p>
<p>The game begins and it is an instant nostalgia hit, as we had relatively frequent trips to that sports club as children to play exhibition games or small tournaments. Every play a different memory comes to mind from one of the many quotes from our beloved coach at the time, <em>Careca</em><sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup>:</p>
<blockquote>
<p>Don&rsquo;t stop dribbling if you don&rsquo;t know what you&rsquo;re going to do!</p>
</blockquote>
<blockquote>
<p>If you go for the layup on the left and switch to the right hand, I&rsquo;ll replace you!</p>
</blockquote>
<blockquote>
<p>Box out to get the rebound!</p>
</blockquote>
<p>And many more I find hard to faithfully translate to English. The game is undoubtedly not as high level as an NBA game, yet still enjoyable: instead of the flashy slam dunks, we get the fierce whole court defense<sup id="fnref:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup>. No half-time contests to win a big check, but rather a friendly guy throwing the ball to the crowd and challenging them to make the shot from the stands.</p>
<p>I realize it&rsquo;s not a competition between which country has the best basketball, just about having a good time with who I like, so we walk back home blaming the players who made wrong calls, commenting about funny moments and talking about seeing another game in two days<sup id="fnref:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup>.</p>
<figure><img src="/images/2025/11-23_pinheiros_dunking.png" height="200"><figcaption>
      <p>AI-generated image with the prompt <em>&ldquo;An illustration of a big humanoid pine tree (treant-like) dunking a basketball over a humanoid fox dressed in blue jersey and a jaguar dressed in white and blue jersey.&rdquo;</em> using <a href="https://chatgpt.com/">ChatGPT</a>.</p>
    </figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>At the expense of many american dollars 💸.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>I had the chance of watching NBA and NHL on past trips, but NFL is still a to-do in my list.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>&ldquo;Eeeeverybody clap your hands: 👏🏼👏🏼👏🏼👏🏼👏🏼&rdquo;.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>They ended up losing the third game and being eliminated, but turns out the Aces are one of the hottest teams and they actually won the title! They have actually won the championship 3 of the past 4 years.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>I make a coordinated effort to do the same activities in my hometown as the ones we do when travelling. Sure, I cannot go to the beach in Belo Horizonte, but I don&rsquo;t want to be a hypocrite that spends 3 days visiting museums abroad and does not visit one a year in Belo.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Beware, severely outdated wikipedia pages 🥲.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>And 10 times cheaper than the WNBA game!&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>Especially the &ldquo;everybody clap your hands&rdquo;, which we hear surprised. No wonder few people react, since it is played in English hahaha.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>I just realized they have the same name as Seattle&rsquo;s team hahah. Serendipity?&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>Affectionate nickname that literally translates to &ldquo;Bald&rdquo;.&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p>Something you hardly ever see on NBA save for the playoff games.&#160;<a href="#fnref:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:12">
<p>We did, Cruzeiro against Pinheiros, and Pinheiros won again.&#160;<a href="#fnref:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Nerdy tales from a day off</title><link>https://tupscal.xyz/blog/2025/10-17-tales-nerdy-day-off/</link><pubDate>Fri, 17 Oct 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/10-17-tales-nerdy-day-off/</guid><description>&lt;p&gt;Today is a &lt;a href="https://www.cadence.com/en_US/home.html"&gt;Cadence&lt;/a&gt; Recharge Day, a day off for all employees, and while for many recharging is sitting on the couch watching Netflix all day, to me it is about doing &lt;del&gt;weird&lt;/del&gt; new stuff I didn&amp;rsquo;t have time to do during the week&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. The topics in this blog post are a bit all over, but hopefully enjoyable. Here we go!&lt;/p&gt;
&lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#installing-a-custom-android-os"&gt;Installing a Custom Android OS&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#tidying-up-my-wifes-computer"&gt;Tidying up my wife&amp;rsquo;s computer&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#electronic-arts-ea-dark-patterns"&gt;Electronic Arts (EA) dark patterns&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
&lt;figure&gt;&lt;img src="https://tupscal.xyz/images/2025/10-17_tales_recharge/doing_nerdy_stuff.png"
 alt="A bearded white man sat down at a desk fiddling with a phone and two computers" height="200"&gt;&lt;figcaption&gt;
 &lt;p&gt;Picture generated by AI by feeding it this text and giving it the prompt &lt;em&gt;&amp;ldquo;Generate a drawing-style image that fits with whomever is writing this post and the activities described by the writing&amp;rdquo;&lt;/em&gt; using &lt;a href="https://chatgpt.com/"&gt;ChatGPT&lt;/a&gt; then saying &amp;ldquo;Looks nice, but the human has three arms and it lacks a beard. It also should use a desktop rather than a laptop and there should be another desktop on another desk at the back&amp;rdquo;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Today is a <a href="https://www.cadence.com/en_US/home.html">Cadence</a> Recharge Day, a day off for all employees, and while for many recharging is sitting on the couch watching Netflix all day, to me it is about doing <del>weird</del> new stuff I didn&rsquo;t have time to do during the week<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. The topics in this blog post are a bit all over, but hopefully enjoyable. Here we go!</p>
<nav id="TableOfContents">
  <ul>
    <li><a href="#installing-a-custom-android-os">Installing a Custom Android OS</a></li>
    <li><a href="#tidying-up-my-wifes-computer">Tidying up my wife&rsquo;s computer</a></li>
    <li><a href="#electronic-arts-ea-dark-patterns">Electronic Arts (EA) dark patterns</a></li>
  </ul>
</nav>
<figure><img src="/images/2025/10-17_tales_recharge/doing_nerdy_stuff.png"
    alt="A bearded white man sat down at a desk fiddling with a phone and two computers" height="200"><figcaption>
      <p>Picture generated by AI by feeding it this text and giving it the prompt <em>&ldquo;Generate a drawing-style image that fits with whomever is writing this post and the activities described by the writing&rdquo;</em> using <a href="https://chatgpt.com/">ChatGPT</a> then saying &ldquo;Looks nice, but the human has three arms and it lacks a beard. It also should use a desktop rather than a laptop and there should be another desktop on another desk at the back&rdquo;.</p>
    </figcaption>
</figure>

<h2 id="installing-a-custom-android-os">Installing a Custom Android OS</h2>
<p>I have always wanted to try a custom ROM, ever since I first suffered from the lack of updates from Samsung on my first Android phone<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, but I lacked courage. It was a shifting set of concerns, which started with:</p>
<blockquote>
<p>&ldquo;what if it bricks and I don&rsquo;t have money to buy another&rdquo;</p>
</blockquote>
<p>And morphed into:</p>
<blockquote>
<p>&ldquo;What if I can&rsquo;t install any of the banking apps there&rdquo;.</p>
</blockquote>
<p>It didn&rsquo;t help that every time I needed to switch phones to a new one, the old was so bad it wouldn&rsquo;t be worth the effort, but not today!</p>
<p>We&rsquo;ve had an older Android phone lying around the house for the past couple months, so I decided to give <a href="https://lineageos.org/">LineageOS</a> a try<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. There are many thorough steps to follow and I was afraid it would take forever to do it and still fail, specially when seeing messages like:</p>
<blockquote>
<p>These will only work if you follow every section and step precisely.</p>
</blockquote>
<p>Turns out that the instructions are clear and straight forward<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> and I was done in 30 minutes or less<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>! I stared in silence and awe as it booted with the new operational system, achieving something I always wanted to do, and then I wondered:</p>
<blockquote>
<p>Cool, what do I do with this phone now? 😂</p>
</blockquote>
<p>A bit anti-climatic, I know, but that&rsquo;s where I stand now and I&rsquo;m very open to suggestions hahaha.</p>
<h2 id="tidying-up-my-wifes-computer">Tidying up my wife&rsquo;s computer</h2>
<p>In early 2024 I set up to <del>burn</del> spend some of my cash to build a more powerful computer<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>, using every excuse I had from:</p>
<blockquote>
<p>&ldquo;it&rsquo;s been 12 years since I last built one&rdquo;</p>
</blockquote>
<p>to</p>
<blockquote>
<p>&ldquo;I deserve it!&rdquo;</p>
</blockquote>
<p>In the process I thought it would be useful to salvage the old parts to have a second computer which my wife would use, and so it was done, but I never really cleaned up my old stuff from there, until today.</p>
<p>Being a decade old computer, one would imagine it had lots of leftover files and applications that only I ever used, so I opened <a href="https://www.uderzo.it/main_products/space_sniffer/index.html">SpaceSniffer</a> and started deleting. I quickly went from 120 GB free space to 252GB (half of the SSD!), which will happily be used in the future for more The Sims 4 content. I tried updating Windows<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup> and a few other stuff and was about to sign off with a smile when I noticed this:</p>
<figure><img src="/images/2025/10-17_tales_recharge/gone_icons.png"
    alt="A screenshot of the Windows task bar showing that some of the app icons disappeared" height="200">
</figure>

<p>Apparently some of the apps pinned to the Windows task bar were not showing icons anymore. They still worked fine when clicking, they were just completely transparent and it didn&rsquo;t look good<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>. You see, I had been playing with all sorts of stuff one shouldn&rsquo;t<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup>: cleaning the registry using <a href="https://www.revouninstaller.com/">Revo Uninstaller</a>, manually deleting Windows files, so I got what I deserved.</p>
<p>I tried every solution that the top Google hits gave me, including Gemini&rsquo;s, and nothing worked: restarting the PC, reinstalling the apps, clearing the icon cache in 3 or 4 different ways&hellip; I then stumbled upon <a href="https://hyperborea.org/tech-tips/invisible-taskbar-icons/">Kelson Vibber</a>&rsquo;s post which said, at the very beginning:</p>
<blockquote>
<p>&ldquo;[&hellip;] it’s often fixed by…uninstalling Google Drive.&rdquo;</p>
</blockquote>
<p>I didn&rsquo;t want to believe it<sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup>, so I skipped to the next paragraph and tried some additional Windows commands to check for corrupted files, despite his claims that it didn&rsquo;t work for him, and neither did it for me.</p>
<p>I went back to searching the web and found another testimony about needing to fiddle with Google Drive. My old user, now deleted from the PC, had Google Drive, but my wife&rsquo;s didn&rsquo;t, so it was one of the apps that were purged. I then went into Kelson&rsquo;s <a href="https://hyperborea.org/tech-tips/google-drive-reinstall/">other post</a>, cleaned up my files, to no avail, and then threw a hail mary by reinstalling Google Drive, which is when <strong>all of the icons reappeared</strong> and I kept staring at the screen, shocked<sup id="fnref:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup> and praising Kelson<sup id="fnref:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup>.</p>
<h2 id="electronic-arts-ea-dark-patterns">Electronic Arts (EA) dark patterns</h2>
<p>If you&rsquo;ve visited my <a href="https://github.com/tupaschoal">GitHub profile</a> or talked to me about open source, you likely know that I maintain a website called <a href="https://justdeleteme.xyz/">https://justdeleteme.xyz/</a>, whose purpose is to be:</p>
<blockquote>
<p>A directory of direct links to delete your account from web services.</p>
</blockquote>
<p>Sadly, several companies do not provide big red buttons to delete your account automatically and you have to mail them asking for your right-to-be-forgotten or similar. In several cases the channel to do this will not be straight forward to find, which is why our service is useful!</p>
<p>Nothing though had ever been so shady as what we found out on this <a href="https://github.com/jdm-contrib/jdm/issues/2660#issuecomment-3405478543">recent discussion</a> about Electronic Arts (EA), where the mail for the data protection officer is on the privacy page, but hidden under the main banner and only accessible from the source code, see it for yourself:</p>
<figure><img src="/images/2025/10-17_tales_recharge/shady_ea.png"
    alt="A screenshot of the browser on EA&#39;s privacy page showing the e-mail is indeed hidden in the source code" height="200">
</figure>

<p>I&rsquo;m a firm preacher of the <em>benefit of the doubt</em>, but even my faith was put to test with cases like this. Let&rsquo;s just hope it is an oversight and that Saudi Arabia fixes it, now that they <a href="https://www.rockpapershotgun.com/ea-are-about-to-be-bought-for-50-billion-by-saudi-arabia-and-jared-kushners-investment-firms-claims-report">own EA</a> 🙃.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Including sometimes writing these blog posts!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Leaving it with the crappy and bloated proprietary Android skin they were making at the time.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>For anyone following the Android history, it&rsquo;s the spiritual successor of CyanogenMod.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>The tutorial is likely that lengthy to avoid frequently asked questions and unnecessary troubleshoot.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>And it could have been faster, if I wasn&rsquo;t debugging the problems on my wife&rsquo;s computer in parallel, as per the other section of this blog post 🤐.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>I even thought about writing a piece on it, but I think I lost the timing, let me know if you&rsquo;re interested!&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>But couldn&rsquo;,t since it&rsquo;s locked on Windows 10&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>I&rsquo;m doing all of this without telling my wife (including the post), so how would I explain to her that to open WhatsApp she would now just have to count where a fifth icon would be, click and trust the process? 😂&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>&ldquo;If it ain&rsquo;t broke, don&rsquo;t fix it&rdquo;, right?&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>Sorry Kelson!&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p>Although I suspect it is foul play of the virtual filesystem it uses, it still looked like magic.&#160;<a href="#fnref:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:12">
<p>I did uninstall it again and rebooted to see whether the icons would go away again, but to my relief they didn&rsquo;t🤞🏼!&#160;<a href="#fnref:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>OpenRCT2's v0.4.26 behind the scenes</title><link>https://tupscal.xyz/blog/2025/08-29-openrct2-0426-behind-scenes/</link><pubDate>Fri, 29 Aug 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/08-29-openrct2-0426-behind-scenes/</guid><description>&lt;hr&gt;
&lt;p&gt;This article was originally written for the &lt;a href="https://openrct2.io/blog/2025/08/behind-scenes-0-4-26"&gt;OpenRCT2 blog&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#compression--openrct2"&gt;Compression &amp;amp; OpenRCT2&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#compression-on-v0425"&gt;Compression on v0.4.25&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#compression-on-v0426"&gt;Compression on v0.4.26&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#results"&gt;Results&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#acknowledgments"&gt;Acknowledgments&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#how-can-i-help"&gt;How can I help?&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
&lt;p&gt;Our game is an open source re-implementation of RollerCoaster Tycoon 2 with many added features and fixes added over the past 11 years&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; which surely made it gain some weight. That doesn&amp;rsquo;t mean we still don&amp;rsquo;t want it running on low-end systems&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; so &lt;a href="https://github.com/LRFLEW"&gt;LRFLEW&lt;/a&gt; went for a ride and applied a few semaglutide pens to some files we generate making them up to 30% smaller while compressing and decompressing up to 12 times faster!&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p>This article was originally written for the <a href="https://openrct2.io/blog/2025/08/behind-scenes-0-4-26">OpenRCT2 blog</a>.</p>
<hr>
<nav id="TableOfContents">
  <ul>
    <li><a href="#compression--openrct2">Compression &amp; OpenRCT2</a></li>
    <li><a href="#compression-on-v0425">Compression on v0.4.25</a></li>
    <li><a href="#compression-on-v0426">Compression on v0.4.26</a>
      <ul>
        <li><a href="#results">Results</a></li>
      </ul>
    </li>
    <li><a href="#acknowledgments">Acknowledgments</a></li>
    <li><a href="#how-can-i-help">How can I help?</a></li>
  </ul>
</nav>
<p>Our game is an open source re-implementation of RollerCoaster Tycoon 2 with many added features and fixes added over the past 11 years<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> which surely made it gain some weight. That doesn&rsquo;t mean we still don&rsquo;t want it running on low-end systems<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> so <a href="https://github.com/LRFLEW">LRFLEW</a> went for a ride and applied a few semaglutide pens to some files we generate making them up to 30% smaller while compressing and decompressing up to 12 times faster!</p>
<p>Let&rsquo;s dive into such an amazing change, shall we? If your answer was: &ldquo;Hell no, you clown, I&rsquo;d rather read the pull requests myself&rdquo;, here you go:</p>
<ul>
<li><a href="https://github.com/OpenRCT2/OpenRCT2/pull/24701">Refactor Compression and Streams, and Add IStream Direct Interface - #24701</a></li>
<li><a href="https://github.com/OpenRCT2/OpenRCT2/pull/24728">Don&rsquo;t Double-Compress Park Chunks in Replay File - #24728</a></li>
<li><a href="https://github.com/OpenRCT2/OpenRCT2/pull/24734">Use ZStandard Compression for PARK and PARKREP Files #24734</a></li>
</ul>
<p>Here we go 🎢</p>
<h2 id="compression--openrct2">Compression &amp; OpenRCT2</h2>
<blockquote>
<p>To simplify, from here onwards I&rsquo;ll refer to &ldquo;compression&rdquo; as a synonym of both compressing and decompressing a file.</p>
</blockquote>
<p>When you&rsquo;re playing there are multiple situations where we might create a file, here are some of them:</p>
<ol>
<li>Creating game saves/scenarios (<code>*.park</code>)</li>
<li>Recording a replay (<code>*.parkrec</code>)</li>
<li>Crashing the game<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> (<del><code>*.sad</code></del> <code>*.dmp</code> and friends)</li>
</ol>
<p>They each have different constraints for speed and size: replays are usually done on demand and people can wait for longer for them to be saved, especially because they can be bigger, whereas you don&rsquo;t want the game stuttering every time it is auto-saving, so tuning the compression and decompression is a tough job! For this work, LRFLEW tackled the first two items, since they are the most common.</p>
<h2 id="compression-on-v0425">Compression on v0.4.25</h2>
<p>At this version we were using <a href="https://zlib.net/">zlib</a> as our compression library. It is a battle-proven algorithm, around since 1995 and effectively a de-facto standard which you can easily find built-in into many operational systems and that is likely being used right now by more than one of your running applications.</p>
<p>It continues to be so pervasive even though it is 30 years old because many of the competing implementations that arose since then would either achieve higher compression at slower runtimes, or faster execution at the expense of less compression.</p>
<h2 id="compression-on-v0426">Compression on v0.4.26</h2>
<p>Many big-tech companies have poured endless resources on developing better compression algorithms, as sending or keeping data around can become quite expensive. Some of them have open-sourced these technologies, with Google opening up <a href="https://github.com/google/brotli">Brotli</a> to the world and Meta releasing <a href="https://github.com/facebook/zstd">Zstandard</a> (aka Zstd). While the former can achieve amazing compression rates, it usually is at the expense of running times and since it would not be a panacea for the usages outlined in the beginning of this section, we settled for the latter.</p>
<p>Here is how ZStandard fares against zlib in terms of speed and size to compress a file:
<figure><img src="/images/2025/08-29_openrct2_behind_scenes/speed_compression.png"
    alt="Graph showing compression speed vs ratio of different zlib and Zstd configuration levels, with Zstd outperforming on all of them" height="200"><figcaption>
      <p>Image taken from Zstandard&rsquo;s website</p>
    </figcaption>
</figure>
</p>
<p>And this is how much faster it can decompress these files:
<figure><img src="/images/2025/08-29_openrct2_behind_scenes/speed_decompression.png"
    alt="Graph showing the speed at which lzma, zlib and zstd decompress a file, with zstd outperforming them all" width="500"><figcaption>
      <p>Image taken from Zstandard website</p>
    </figcaption>
</figure>
</p>
<h3 id="results">Results</h3>
<p>These algorithms are very customizable and you can pick a higher level of compression to get a smaller resulting file if you&rsquo;re willing to wait for longer. On Zstd these levels range from 1 to 22, so there was a lot of measuring and tuning to do. Thankfully LRFLEW did that meticulously and reported back, here&rsquo;s a table summarizing it all:</p>
<table>
  <thead>
      <tr>
          <th>Compression Situation</th>
          <th>Zstd level</th>
          <th>Size Improvement</th>
          <th>Speed Improvement</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Automatic Saving</td>
          <td>4</td>
          <td>12.5% smaller</td>
          <td>12.8x faster</td>
      </tr>
      <tr>
          <td>Manually Saving</td>
          <td>7</td>
          <td>20.5% smaller</td>
          <td>4.5x faster</td>
      </tr>
      <tr>
          <td>Creating Replays</td>
          <td>18</td>
          <td>28.0% smaller</td>
          <td>1.7x faster</td>
      </tr>
  </tbody>
</table>
<p><strong>Note:</strong> Decompressing became roughly 3.5x faster across the board regardless of the situation.</p>
<p>For all we know, everyone should see OpenRCT2 occupying less space on your drives from now on, as well as creating and opening these file types faster. It&rsquo;s what we call a perfect &ldquo;drop-in replacement&rdquo;!</p>
<h2 id="acknowledgments">Acknowledgments</h2>
<p>If it is still not yet clear, give a huge shoutout to <a href="https://github.com/LRFLEW">LRFLEW</a> for chasing this. Not only he had to write comprehensive changes to the codebase to achieve it, but did so with patience of writing detailed reports of the findings, separating it into smaller pull requests where applicable and monitoring potential fallout after merge to do hot fixes. Welcome back, friend!</p>
<h2 id="how-can-i-help">How can I help?</h2>
<ol>
<li>Play OpenRCT2 and have fun</li>
<li>Spread the word of our game</li>
<li>Support the developers that have GitHub Sponsor programs turned on</li>
<li>On the compressing domain, we can still investigate:
<ol>
<li>Whether we can also apply Zstd to crash reports</li>
<li>If we want to start compressing other assets like object or parkpatch JSONs</li>
<li>Whether we want to release assets from Open* repositories in another format, and as such make it faster to download during build, potentially speeding up development and CI/CD checks</li>
</ol>
</li>
<li>Open up an issue or pull request if you find another opportunity!</li>
</ol>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Yes, it is that old, soon it&rsquo;ll be able to get a driver&rsquo;s license in some countries.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>We found out recently that <a href="https://github.com/kloptops/openrct2">someone had ported</a> it to ArkOS to run on things like <a href="https://retrocatalog.com/retro-handhelds/r35s">R35S</a>.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>We&rsquo;d hope this would only ever happen to your coasters, but unfortunately it is not true.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>The Year of Experimentation - Microlearning</title><link>https://tupscal.xyz/blog/2025/08-24-microlearning/</link><pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/08-24-microlearning/</guid><description>&lt;hr&gt;
&lt;p&gt;This article is part of the &lt;a href="https://tupscal.xyz/blog/2025/01-18-year-experimentation/"&gt;&amp;ldquo;Year of Experimentation&amp;rdquo; series&lt;/a&gt;, check out the other entries there!&lt;/p&gt;
&lt;hr&gt;
&lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#what-is-microlearning"&gt;What is Microlearning?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#why-microlearning"&gt;Why Microlearning?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#picking-the-apps"&gt;Picking the apps&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#using-the-apps"&gt;Using the apps&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#learning"&gt;Learning&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#gamification"&gt;Gamification&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-verdict"&gt;The Verdict&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#on-gamification"&gt;On Gamification&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#on-duolingo"&gt;On Duolingo&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#on-brilliant"&gt;On Brilliant&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#final-thoughts"&gt;Final Thoughts&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
&lt;h2 id="what-is-microlearning"&gt;What is Microlearning?&lt;/h2&gt;
&lt;p&gt;In a very non-scientific way, I see it as:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A way to get lazy people to learn something new, with little effort.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you want a &lt;del&gt;better&lt;/del&gt; more comprehensive explanation you can rely on &lt;a href="https://en.wikipedia.org/wiki/Microlearning"&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p>This article is part of the <a href="https://tupscal.xyz/blog/2025/01-18-year-experimentation/">&ldquo;Year of Experimentation&rdquo; series</a>, check out the other entries there!</p>
<hr>
<nav id="TableOfContents">
  <ul>
    <li><a href="#what-is-microlearning">What is Microlearning?</a></li>
    <li><a href="#why-microlearning">Why Microlearning?</a></li>
    <li><a href="#picking-the-apps">Picking the apps</a></li>
    <li><a href="#using-the-apps">Using the apps</a>
      <ul>
        <li><a href="#learning">Learning</a></li>
        <li><a href="#gamification">Gamification</a></li>
      </ul>
    </li>
    <li><a href="#the-verdict">The Verdict</a>
      <ul>
        <li><a href="#on-gamification">On Gamification</a></li>
        <li><a href="#on-duolingo">On Duolingo</a></li>
        <li><a href="#on-brilliant">On Brilliant</a></li>
      </ul>
    </li>
    <li><a href="#final-thoughts">Final Thoughts</a></li>
  </ul>
</nav>
<h2 id="what-is-microlearning">What is Microlearning?</h2>
<p>In a very non-scientific way, I see it as:</p>
<blockquote>
<p>A way to get lazy people to learn something new, with little effort.</p>
</blockquote>
<p>If you want a <del>better</del> more comprehensive explanation you can rely on <a href="https://en.wikipedia.org/wiki/Microlearning">Wikipedia</a>.</p>
<h2 id="why-microlearning">Why Microlearning?</h2>
<p>I had the urge of acquiring new knowledge, but the thought of starting a multi-month course in <a href="https://www.edx.org/">edX</a>, <a href="https://www.udemy.com/">Udemy</a> or <a href="https://www.coursera.org/">Coursera</a> would immediately make me sweat, it felt like too much of a commitment before knowing what I actually wanted to be diving into<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, and as such I never started any.</p>
<p>One day, though, there was an upcoming trip to Italy<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> and I wanted to learn some basic Italian to be able to communicate, so I downloaded <a href="https://en.duolingo.com/">Duolingo</a> and that&rsquo;s how it all started.</p>
<h2 id="picking-the-apps">Picking the apps</h2>
<p>Contrary to the <a href="https://tupscal.xyz/blog/2025/02-23-year-experimentation-browsers">browsers experiment</a> this didn&rsquo;t start as a contest to elect the best microlearning app for me, but rather as a way to finally get into learning something which I had always longed for, but had been procrastinating. I had two deficits I wanted to work on: learning Italian and some computer science theory.</p>
<figure><img src="/images/2025/08-24_microlearning/brilliant_vs_duolingo.png"
    alt="Picture showing the mascots of Duolingo and Brilliant facing each other" height="200"><figcaption>
      <p>Picture generated by AI with the prompt <em>&ldquo;Make a picture where the mascots of these two attached pictures are in a battle/duel pose against each other that is lively and colorful&rdquo;</em> using <a href="https://chatgpt.com/">ChatGPT</a> and providing the images of the mascots</p>
    </figcaption>
</figure>

<p>There wasn&rsquo;t too much of a thought process for picking up the apps, I picked up <a href="https://en.duolingo.com/">Duolingo</a> for Italian and <a href="https://brilliant.org/">Brilliant</a> for technical subjects, because these were the names that came to mind<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. Upon searching the web I found some potential alternatives to both. For languages, I found out about <a href="https://www.pimsleur.com/">Pimsleur</a>, <a href="https://www.memrise.com/">Memrise</a> and <a href="https://www.lingodeer.com/">LingoDeer</a> and for scientific knowledge there is <a href="https://imprintapp.com/">Imprint</a> and <a href="https://deepstash.com/">Deepstash</a>. I&rsquo;m mentioning them here as a way to take notes for myself, but also because I would love to hear about the experience anyone had with these.</p>
<h2 id="using-the-apps">Using the apps</h2>
<p>There is a famous saying in Brazilian schools when a desperate student didn&rsquo;t do the coursework and looks for help from their fellow nerd<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>, the nerd says:</p>
<blockquote>
<p>Copy it, just don&rsquo;t make it look exactly the same.</p>
</blockquote>
<p>It is a simple, yet clever, phrase to explain how to try and fool the teacher that everyone did their own assignment and it fits like a glove for this case, since the apps look uncannily similar:</p>
<figure><img src="/images/2025/08-24_microlearning/brilliant_duolingo_lesson_overlay.gif"
    alt="Animation showing Duolingo and Brilliant&#39;s interface and how they don&#39;t look so different" height="200">
</figure>

<p>I can&rsquo;t say who pioneered this interface and all its quirks. Duolingo started in 2011, while Brilliant was born a year later. More often than not the apps don&rsquo;t become super famous right off the bat, so they could have come up with a similar interface concurrently, as many inventions have<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, what I do remember is that Duolingo once sported <a href="https://blog.duolingo.com/new-duolingo-home-screen-design/">a very different interface</a>. In any case, let&rsquo;s dive into how each app works.</p>
<h3 id="learning">Learning</h3>
<p>On both apps you start by picking up a course and then following a linear path, as shown on the image above. Every course has bite-sized lessons for you to do and they get progressively more difficult as you complete them, to dive deeper into the subject. I was most of the time using the paid version on them, which allows you to do multiple lessons a day and also eliminate the ads that can be somewhat disruptive.</p>
<h4 id="duolingo">Duolingo</h4>
<p>Duolingo leads you to do different lesson types: it can be a listening/reading activity where you need to fill in the blanks, a practice session to revisit some things you learned in the past or just a session with new content you will be presented to.</p>
<p>There are multiple ways you can input the answer:</p>
<ul>
<li>Translating a sentence from one language into another by typing or selecting from predetermined words</li>
<li>Saying a sentence out loud for the microphone</li>
<li>Picking from one of a set of options</li>
</ul>
<p>If you fail, you can see where you did wrong, but you cannot fix it on the spot. Some lesson types will ask you again at the end to check whether you&rsquo;ve learned from your mistake, some will not.</p>
<h4 id="brilliant">Brilliant</h4>
<p>The Brilliant lessons don&rsquo;t seem to be as separated by types as Duolingo&rsquo;s. You&rsquo;ll only know how you will be assessed when you&rsquo;re within the course and moving there. As you do, some of the options to answer are:</p>
<ul>
<li>Picking one of multiple choices</li>
<li>Typing out the correct answer</li>
<li>Running a program to get the answer<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup></li>
</ul>
<p>If you fail, you are not immediately prompted with the answer, as you would in Duolingo, but rather you can try another one or click to see the solution. Regardless of whether you got it right from the first try or not, you always have a &ldquo;Why?&rdquo; button to see a more thorough explanation behind what was the expected response.</p>
<h3 id="gamification">Gamification</h3>
<p>After you get started, both apps rely heavily on gamification to keep you engaged, such as:</p>
<ol>
<li><strong>Levels</strong>: When finishing a set of lessons, they will say you&rsquo;re now &ldquo;Level X in subject&rdquo;, as a small pat on your back<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>.</li>
<li><strong>Experience Points (A.K.A XP)</strong>: You get &ldquo;XP&rdquo; as a small reward every time you answer correctly or finish a lesson. This XP is displayed on your profile and can serve as a way for you to measure how far you&rsquo;ve come and to compare yourself with other people.</li>
<li><strong>Leagues</strong>: There is a separate counter for the experience you&rsquo;ve earned in a given week, which will be used to put you on a leaderboard competing against other people for the title of &ldquo;who learned the most&rdquo;<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>. If you rank high or low enough, you are promoted or demoted to another division.</li>
<li><strong>Streaks</strong>: It is not microlearning if you are not doing it a bit every day, so they will keep track of how many consecutive days you&rsquo;ve been coming back for learning<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup>.</li>
<li><strong>Notifications</strong>: They will ping you <strong>a lot</strong> during the day both by e-mail and by notifications<sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup> to remind that you: are about to lose your streak, didn&rsquo;t do a lesson today yet, will be demoted in the league, etc<sup id="fnref:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup>.</li>
</ol>
<p>Duolingo goes a lot farther here on the social: friends quest, friends feed, monthly badges, achievements, followers. There&rsquo;s something for everyone.</p>
<figure><img src="/images/2025/08-24_microlearning/duolingo_multiple_gamification.gif"
    alt="Animation showing multiple Duolingo tabs with plenty of gamification features" height="200">
</figure>

<h2 id="the-verdict">The Verdict</h2>
<p>They work, for a while, especially to get you moving and out of a place of comfort<sup id="fnref:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup>. As any of the friends or family members that traveled with me to Italy can attest, I was indeed able to sustain some basic to moderately complex conversation/interaction with locals and I only ever learned the language using Duolingo, which states I&rsquo;m level A2 after finishing Italian (from Portuguese)<sup id="fnref:13"><a href="#fn:13" class="footnote-ref" role="doc-noteref">13</a></sup>.</p>
<p>On Brilliant&rsquo;s side, I can&rsquo;t tell for sure. I was a lot more eager to do Brilliant lessons than Duolingo&rsquo;s, averaging 40min a day compared to 15min on Duolingo, but then I was also doing the latter for almost 8 months straight, while the former I did for only one. I finished 5 Brilliant courses, was halfway through the sixth, and was really into some of the learning, like understanding Greediness (in algorithm) or the beginning of Quantum Computing, but I didn&rsquo;t have any immediate need to apply its knowledge, so its effect was more to get me into a curious state.</p>
<h3 id="on-gamification">On Gamification</h3>
<p>Gamification and apps that provide me a lot of data about my habits get me every time. I can&rsquo;t tell you how many times I was on Duolingo for 5 more min than I wanted to, just to get the &ldquo;15min a day&rdquo; challenge, or the number of extra lessons I did to make sure my friend and I wouldn&rsquo;t fail the &ldquo;friends quest&rdquo;.</p>
<p>After finishing a lesson on Duolingo and extending your streak, you are encouraged to remind all the friends on your &ldquo;friends streak&rdquo; about the daily lesson and though that sounds helpful and motivating, it meant getting several notifications a day from people at various parts of the day, a bit mental. There were days I did exercises on both of them half-sleeping just because I didn&rsquo;t want to lose my streak.</p>
<h3 id="on-duolingo">On Duolingo</h3>
<p>Duolingo deserves credit as I learned some Italian there, it was also truthfully enjoyable even though it is mostly a memorization exercise. Since it doesn&rsquo;t provide a &ldquo;Why?&rdquo; button like Brilliant<sup id="fnref:14"><a href="#fn:14" class="footnote-ref" role="doc-noteref">14</a></sup>, you&rsquo;re never really learning grammar, just guessing or trying to reverse engineer it. That being said, I was very satisfied, until I finished the course, then there were two things which were very annoying.</p>
<p>The first was doing the &ldquo;time challenges&rdquo;. Every section you have two lessons where you can get from one to three stars depending on whether you are able to &ldquo;beat&rdquo; the lesson in less than 90 seconds. I can guess the rationale behind those, something like: &ldquo;if you can answer fast, you likely learned it&rdquo;, but it rapidly became a &ldquo;how can I cut corners to be able to beat the time&rdquo; considering the app will sometimes fail to listen to my voice, take a while to validate the answer or prompt me with super long sentences that will eat a chunk of my remaining time.</p>
<p>The second is the daily refresher which was just bad, because it repeats lessons you have already done and there were days I was even prompted with the <strong>same</strong> listening session twice. This was sometimes aggravated by the facts that some lessons were just teaching wrong word translations<sup id="fnref:15"><a href="#fn:15" class="footnote-ref" role="doc-noteref">15</a></sup>, and though I flagged several, I kept seeing them repeat months on end.</p>
<h3 id="on-brilliant">On Brilliant</h3>
<p>I was very excited on learning the topics, the graphics used to explain the concepts are gorgeous and the diversity of interactive stuff is legitimately <em>brilliant</em><sup id="fnref:16"><a href="#fn:16" class="footnote-ref" role="doc-noteref">16</a></sup>. It is a lot less pushy on you on the gamification side, compared to Duolingo, and the aforementioned &ldquo;Why?&rdquo; button to explain the reason for a given answer is extremely useful, as sometimes one might just have not understood it.</p>
<p>That being said, I don&rsquo;t feel like it can get you through more than the concepts of a given technology, when I tried some more advanced courses like Quantum Computing I increasingly felt the need to guess the answer or to go back and review, it seemed to be doing some leaps in understanding that were hard to follow.</p>
<h2 id="final-thoughts">Final Thoughts</h2>
<p>It&rsquo;s a method worth trying, especially if from the very beginning you have enough mental <del>will</del> awareness to get the reins of gamification and accept missing a day or two because you had an exhausting day or feel like doing something else. I can see how spending 20-30 min on Duolingo + 30min on Brilliant daily killed some of my other habits like reading or programming on open source<sup id="fnref:17"><a href="#fn:17" class="footnote-ref" role="doc-noteref">17</a></sup>, so it demands some sort of control<sup id="fnref:18"><a href="#fn:18" class="footnote-ref" role="doc-noteref">18</a></sup>.</p>
<p>I recommend you try, with these settings: one app at a time, with all notifications disabled and maybe a timer, that&rsquo;s how I intend to continue on Duolingo, now that I learned it has extended the Italian course.</p>
<p>Happy microlearning!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Spoiler: it wasn&rsquo;t, as I probably spent more aggregated time on the microlearning itself than I would have if I took any course on these platforms.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Or two, since I went to Italy twice 10 years apart and on both occasions I downloaded Duolingo a few months in advance to get ready.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Advertising works after all, it seems.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>The fellow nerd was frequently me.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>But not the airplane! RIP Santos Dumont.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Because Brilliant has a lot of courses on technical content like Programming, there are several of them that provide you with an environment to actually type and run code directly on the app to get a result. It&rsquo;s very cool!&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>On Duolingo they might even use this to say where you stand on the <a href="https://en.wikipedia.org/wiki/Common_European_Framework_of_Reference_for_Languages#Common_reference_levels">CEFR</a> level.&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>In quotes because I don&rsquo;t really think it helps you learn sometimes, it just pushes you to hit some right notes to get ranked higher.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>I got as high as 230 something days on Duolingo and 30 on Brilliant.&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>Until you figure out how to disable it.&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p>Duolingo will even change the app icon to have its mascot crying or angry at you.&#160;<a href="#fnref:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:12">
<p>Not literally, as I usually did it from my bed or the couch.&#160;<a href="#fnref:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:13">
<p>I just found out after having no extra lessons for over a month that Duolingo extended the Italian course the week I stopped doing it 🤡.&#160;<a href="#fnref:13" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:14">
<p>I later found out it does, but it is on &ldquo;Duolingo Max&rdquo;, a higher paid tier I was not on and only worked on the Italian (from English) course.&#160;<a href="#fnref:14" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:15">
<p>Because I think it mixes Portuguese from Brazil and Portugal.&#160;<a href="#fnref:15" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:16">
<p>No pun intended&#160;<a href="#fnref:16" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:17">
<p>Probably a victory to them, since you staying on the app is their business.&#160;<a href="#fnref:17" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:18">
<p>I&rsquo;ve been experimenting with a 20min daily timer on Instagram and it has worked wonders.&#160;<a href="#fnref:18" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Belo Horizonte, where's my tree?</title><link>https://tupscal.xyz/blog/2025/07-07-bh-pmau/</link><pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/07-07-bh-pmau/</guid><description>&lt;p&gt;My relationship with the Belo Horizonte City Hall (often abbreviated PBH) is complicated: on one side I love tools like the &lt;a href="https://bhmap.pbh.gov.br/"&gt;BH Map&lt;/a&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; and the ease at which we can request &lt;strong&gt;MANY&lt;/strong&gt; services &lt;a href="https://servicos.pbh.gov.br/"&gt;online&lt;/a&gt;&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;, on another it is frustrating that there is so much inconsistency in the services being done and that some great projects never come to life.&lt;/p&gt;
&lt;p&gt;The idea behind this article was born out of the frustration with a service and then grew as I found the &amp;ldquo;Belo Horizonte&amp;rsquo;s Municipal Plan of Afforestation&amp;rdquo; (&lt;a href="https://prefeitura.pbh.gov.br/sites/default/files/estrutura-de-governo/meio-ambiente/2025/pmaunovo.pdf"&gt;PMAU-BH&lt;/a&gt;) on my searches. Overall I think it&amp;rsquo;s an interesting story, especially if you live here, so let&amp;rsquo;s get to it!&lt;/p&gt;</description><content:encoded><![CDATA[<p>My relationship with the Belo Horizonte City Hall (often abbreviated PBH) is complicated: on one side I love tools like the <a href="https://bhmap.pbh.gov.br/">BH Map</a><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> and the ease at which we can request <strong>MANY</strong> services <a href="https://servicos.pbh.gov.br/">online</a><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, on another it is frustrating that there is so much inconsistency in the services being done and that some great projects never come to life.</p>
<p>The idea behind this article was born out of the frustration with a service and then grew as I found the &ldquo;Belo Horizonte&rsquo;s Municipal Plan of Afforestation&rdquo; (<a href="https://prefeitura.pbh.gov.br/sites/default/files/estrutura-de-governo/meio-ambiente/2025/pmaunovo.pdf">PMAU-BH</a>) on my searches. Overall I think it&rsquo;s an interesting story, especially if you live here, so let&rsquo;s get to it!</p>
<nav id="TableOfContents">
  <ul>
    <li><a href="#túlio-and-pbhs-service-portal">Túlio and PBH&rsquo;s Service Portal</a>
      <ul>
        <li><a href="#origin">Origin</a></li>
        <li><a href="#stump-removal-and-planting">Stump Removal and Planting</a></li>
        <li><a href="#the-end">The end?</a></li>
      </ul>
    </li>
    <li><a href="#the-pmau-bh">The PMAU-BH</a>
      <ul>
        <li><a href="#planting-and-existing-trees">Planting and Existing Trees</a></li>
        <li><a href="#rain-gardens">Rain Gardens</a></li>
        <li><a href="#adoro-bh">Adoro BH</a></li>
      </ul>
    </li>
    <li><a href="#final-thoughts">Final Thoughts</a></li>
  </ul>
</nav>
<h2 id="túlio-and-pbhs-service-portal">Túlio and PBH&rsquo;s Service Portal</h2>
<h3 id="origin">Origin</h3>
<p>For some reason I always knew it was possible to request different services from the city hall (PBH) on their website, but up until 2002 I had never used it for anything else other than identifying myself for violating a few traffic laws<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>.</p>
<p>In 2022, with the end of the global pandemic and the return to office, I started filing several complaints about buses being overcrowded, since it was common to lose a few because I could not get into them. Initially, the replies were good, things like &ldquo;we&rsquo;ve notified the company responsible&rdquo; or &ldquo;the timetable will be reviewed&rdquo;, which gave me a faint hope that something would be done.</p>
<p>Over time, the new requests started being dismissed for not containing the number of the vehicle. I understood then that their posture had changed and they were looking to blame the driver for the overcrowding, rather than reviewing the lines and their capacities<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>. Do you see now how the relationship is complicated?</p>
<p>In the same year, I registered that the street where I lived was seeing a lot of car accidents by the corner, as it seemed that many drivers were not seeing the STOP sign there, so I requested it to also be painted on the ground. The response I got was:</p>
<blockquote>
<p>[&hellip;] after surveying the area, we propose painting the STOP on the ground, a pedestrian crossing, parking lines and the saying &ldquo;SLOW DOWN 30km/h&rdquo;, aside from warning signs of the mandatory stop.</p>
</blockquote>
<p>It overcame any expectation I had, since they not only did what they wrote, but also installed a speed bump, so I felt my own safety as a pedestrian had increased<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>. It was the faith in the public service slightly restored.</p>
<h3 id="stump-removal-and-planting">Stump Removal and Planting</h3>
<p>A year later, 2023, I saw a <a href="https://www.instagram.com/p/CyqG0SDuu0s/?utm_source=ig_web_copy_link&amp;igsh=MzRlODBiNWFlZA==">post on Instagram</a> from the <em>Bora Plantar</em> collective<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> which explained how to ask for trees to be planted onto the city&rsquo;s sidewalks and the removal of tree stumps to later allow for new ones to be planted. I thought this was very cool and really motivating, I even commented on the post back then that I didn&rsquo;t know the city hall did the removal of tree stumps<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>.</p>
<p>Since then, every time I was wandering around the city I would take note of empty plant beds or tree stumps on Google Keep and make a request. Yes, the response and execution time varied wildly, usually there were three ways the request would be answered:</p>
<ol>
<li>Most would be like &ldquo;recommend the planting of X<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>&rdquo; or &ldquo;planting can&rsquo;t be done according to DN69&hellip;&rdquo;. I even recommend you see their <a href="https://prefeitura.pbh.gov.br/meio-ambiente/cartilha-de-plantio-de-arvores">Tree Planting Guide</a>, if you know Portuguese, it&rsquo;s very well explained and illustrated.</li>
<li>Some would only return with &ldquo;planting done&rdquo; or &ldquo;denied&rdquo;.</li>
<li>Once I got a thorough analysis of the whole street - where it was and wasn&rsquo;t possible to plant, the reason why and all of the recommendations. This response was great for me for two reasons:
<ol>
<li>To show that there are competent and willing people in the public service, contrary to popular belief.</li>
<li>To show me that I could request trees to be planted even if there weren&rsquo;t existing plant beds, as the city hall might open up a new one!</li>
</ol>
</li>
</ol>
<figure><img src="/images/2025/07-07_pmau/tree_requests.png" width="400"><figcaption>
      <p>Image generated by AI with the prompt <em>&ldquo;Uma ilustração de um homem de 30 e poucos anos, barbudo e usando óculos redondos com textura de tartaruga olhando para um aplicativo de mapa no celular e fiscalizando canteiros de árvores vazios pelas ruas de Belo Horizonte, Minas Gerais - Brasil.&rdquo;</em> using <a href="https://chatgpt.com/">ChatGPT</a>.</p>
    </figcaption>
</figure>

<p>Since then I made around 200 requests and, as a good citizen, followed them closely, including going to the place to verify that the service had been done<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup>. I had a success rate of roughly 70%<sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup> and I like to think that, at least on the Gutierrez neighborhood, I made some difference for the upcoming years:</p>
<figure><img src="/images/2025/07-07_pmau/all_requests.png"><figcaption>
      <p>View of all the requests made. Green trees are plantings done, red are denied ones and brown holes where the tree stump was removed</p>
    </figcaption>
</figure>

<h3 id="the-end">The end?</h3>
<p>At some point in March of 2025, the page to request new trees was heavily updated. Among some improvements there was the capability of specifying how many trees were being requested, as well as choosing a specific species, both welcome changes as I would have to type less. I was not counting, however, on the third change which was requiring the attachment of the municipal property tax of the property at the given address.</p>
<p>I was devastated, this change would end my hobby of trying to afforest the city, limiting it only to my properties<sup id="fnref:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup> and the squares or central plant beds, usually already with enough trees. I understand that the responsibility for the sidewalk is of the owner of the property and that many think trees will damage it <sup id="fnref:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup>, at the same time I know most of them will not oppose to the tree being planted, nor will they ever file a request for it to be done, for lack of interest or knowledge<sup id="fnref:13"><a href="#fn:13" class="footnote-ref" role="doc-noteref">13</a></sup>. The lack of a centralized planning, in my opinion, will only lead to a city with a decreasing number of trees.</p>
<h2 id="the-pmau-bh">The PMAU-BH</h2>
<p>While dealing with the frustration of not being able to request new trees to be planted, I stumbled upon the &ldquo;Belo Horizonte&rsquo;s Municipal Plan of Afforestation&rdquo;, as stated in the introduction. <a href="https://prefeitura.pbh.gov.br/noticias/dia-mundial-do-meio-ambiente-pbh-anuncia-plano-de-arborizacao-proar-bh-e-escolas-verdes">Recently showcased</a> to the city community, it is a 200-page long document that covers everything from the history of tree planting in the city until the detailed planning of the next 5 years. For the ones interested in the theme, it&rsquo;s quite an interesting read, be it to get a hold of what is being planned and be able to participate and demand it to be executed or to find out all of the species we have in t he city and which ones cannot be taken down.</p>
<p>From my brief reading, I chose three topics to dive into: continuity of the planting, rain gardens and the program &ldquo;Adoro BH&rdquo; (I love BH).</p>
<h3 id="planting-and-existing-trees">Planting and Existing Trees</h3>
<p>According to <a href="https://prefeitura.pbh.gov.br/sites/default/files/estrutura-de-governo/meio-ambiente/2025/pmaunovo.pdf">PMAU-BH</a> (page 42), one of its specific goals is to::</p>
<blockquote>
<p>III. Promote the expansion and maintenance of the urban tree coverage.&quot;</p>
</blockquote>
<p>It is an excellent goal, since as seen on table 8 (page 180), Belo Horizonte (BH) has around 550 thousand trees and needs an additional 400 thousand to get to the desired coverage level. A few questions arise:</p>
<ul>
<li>BH has an area of 331km² (IBGE), but only 7,4km² (2%) are parks (page 55)<sup id="fnref:14"><a href="#fn:14" class="footnote-ref" role="doc-noteref">14</a></sup>. Some impressive data: Barreiro is the largest region in the city and has only 5 parks (0,4km²) while the East region has a single park of 0,04km².</li>
<li>According to PBH&rsquo;s <a href="https://prefeitura.pbh.gov.br/meio-ambiente/indicadores-ambientais-destinacao-de-plantios">&ldquo;Treemeter&rdquo;</a>, a hundred thousand trees were planted since 2020:
<ul>
<li>Half of them were planted on Pampulha which, according to Table 9 (page 180), historically already has double the tree coverage of all other city regions. It&rsquo;s fundamental to look beyond the raw numbers, as it would be possible to &ldquo;overplant&rdquo; on Pampulha to get to the desired metrics without touching any other region.</li>
<li>In the first 6 months of 2025 only 2800 plantings were done. If the average is kept, it will be the year with fewer trees planted since the beginning of the series, in 2020<sup id="fnref:15"><a href="#fn:15" class="footnote-ref" role="doc-noteref">15</a></sup>. Not a good start for the PMAU.</li>
<li>22 thousand trees were removed since 2021 and 123 thousand were pruned (page 86), usually drastically which leads to their removal later. This makes it even harder to get to the proper tree coverage.</li>
<li>According to the PMAU the planting is usually done either by citizen request or environmental compensation<sup id="fnref:16"><a href="#fn:16" class="footnote-ref" role="doc-noteref">16</a></sup> (page 83). Only 4 thousand plantings were done by request since 2020, a number that is bound to go down now that the proof of ownership of the property is a requirement.</li>
</ul>
</li>
<li>45% of the existing trees are exotic (page 125) and despite there being measures planned to contain them, tables 19 and 20 (pages 199 and 202), the city hall continues to grow 20% of exotic species among its tree saplings (page 75). It&rsquo;s urgent to reduce this percentage on the tree nursery in favor of our native flora<sup id="fnref:17"><a href="#fn:17" class="footnote-ref" role="doc-noteref">17</a></sup>.</li>
</ul>
<p>Therefore there is a lot to be answered and questioned on the PMAU with regards to the maintenance and expansion of the trees in the city.</p>
<h3 id="rain-gardens">Rain Gardens</h3>
<p>Another project listed on the PMAU-BH is the one about installing &ldquo;rain gardens&rdquo; over the city (page 92). They&rsquo;re basically small gardens on the street with exposed soil that allows the rainwater to infiltrate, preventing it from flowing and accumulating, causing flooding.</p>
<p>I&rsquo;m very much in favor of the project<sup id="fnref:18"><a href="#fn:18" class="footnote-ref" role="doc-noteref">18</a></sup>, since it increases the city&rsquo;s greens and can mitigate the impact of the heavy rains. Interesting to note that the project contains a mechanism to allow <a href="https://servicos.pbh.gov.br/servicos&#43;adote-um-jardim-de-chuva&#43;663e60cfdd212a2b422248ca">citizens to adopt the gardens</a>, to keep them alive, clean and working, with an added benefit of up to 10% discount on the municipal property tax. A year ago, the program&rsquo;s success was being commemorated given that there were 64 rain gardens and <a href="https://prefeitura.pbh.gov.br/noticias/programa-da-pbh-adote-um-jardim-de-chuva-ja-tem-mais-de-110-pedidos-de-adesao">113 people willing to adopt them</a>, showcasing community interest to expand the project!</p>
<p>The current status is not so exciting, though, as a year after the news about too many requests, 50 of them still <a href="https://docs.google.com/spreadsheets/d/e/2PACX-1vSea8_3P0QlFql8-HJ7hM48WB0_tgHZDadgEfisfvHlPOaNlMU2Ymgyk7NMXClXjafQTWw-5V4HmzDy/pubhtml">remain available</a>. I would love to understand if it is due to the city hall bureaucracy, if people give up or if the requests are denied because the applicants do not fill the minimum criteria, like living on the same street as the garden. Adding to that, the project writing stated an additional 200 gardens would be done every year, but two years later there are still only the original 64. I&rsquo;m thinking that they will argue that there is lack of interest from the citizens, despite there being a public interest.</p>
<figure><img src="/images/2025/07-07_pmau/jardins.png"
    alt="Most of the gardens remain available and are on the Pampulha region"><figcaption>
      <p>Belo Horizonte map with the location of the adopted and available rain gardens.</p>
    </figcaption>
</figure>

<p>Finally, the project was again only done at Pampulha, on &ldquo;spaces with [&hellip;] predominantly residential areas and low vehicle prevalence&rdquo;. Although positive that it was done on peripheral neighborhoods, usually not adopted by such environmental programs, it was still done on the region with the most tree coverage of the city. The expansion of the initial project into other regions that suffer from flooding and that had different characteristics would have been very important to compare citizen&rsquo;s adhesion to it.</p>
<h3 id="adoro-bh">Adoro BH</h3>
<p>The last project I want to highlight from the document is the &ldquo;Adoro BH&rdquo; (page 92). It states that any person or company can <a href="https://prefeitura.pbh.gov.br/relacoes-institucionais/adoro-bh">adopt a public space</a> to help on its conservation<sup id="fnref:19"><a href="#fn:19" class="footnote-ref" role="doc-noteref">19</a></sup> in exchange of affixing a pane with the name of whomever did it there. In addition, it also foresees the expansion and creation of new public spaces, green areas and water resources/bodies, but there isn&rsquo;t much information if that has ever happened voluntarily.</p>
<figure><img src="/images/2025/07-07_pmau/adorobh.png"
    alt="It&#39;s possible to see a vast superiority of the number of spaces still to be adopted"><figcaption>
      <p>Belo Horizonte map showing available and adopted areas via the Adoro BH program</p>
    </figcaption>
</figure>

<p>As seen on the city hall&rsquo;s own map, despite the program being in place for two years, it doesn&rsquo;t seem to have been picking up speed, I believe due to the small benefits to whomever does it.</p>
<h2 id="final-thoughts">Final Thoughts</h2>
<p>When I started writing this text, more focused on my hobby of requesting trees to be planted, I never thought I would end up spending a few hours of my free morning reading the afforestation city plan. Coincidentally, I pondered about talking on this subject several times and didn&rsquo;t, but picked just the time when PMAU had been released. Funny, huh?</p>
<p>Currently I&rsquo;m very skeptical about the changes still to come, especially due to the lack of progress on the documents I have highlighted. Yet, even though I&rsquo;m being pessimistic, I made an extra effort to state every page and link where the information I quoted came from, because I believe the plan was well elaborated and, if we have more people interested in understanding and following it, we might have success.</p>
<p>Let&rsquo;s supervise, audit and hope 😊.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>It&rsquo;s an interactive map where you can see different information about the city, from garbage collection schedules, through building data up until the distribution of antennas in the city.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Sadly one still can&rsquo;t request a pedestrian semaphore to be fixed neither online nor by phone, as I realized from my last attempt.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>It&rsquo;s on the service portal that you make a request to identify who the lawbreaker was in case of a fine, which I had some in the pandemic when returning home a bit too fast 😓.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Speaking of urban mobility, have you checked the <a href="https://bh.busao0800.com/">campaign for free buses in Belo Horizonte</a>?&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>I still saw an accident after that, but if not even a semaphore solves it in some cases, it wouldn&rsquo;t be the preventive signage that would fix hehehe.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Which I now realized was also present at a seminar about the plan that I attended at the municipal chamber on 07/02/2024.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>I was harassed by a person saying it really was not possible, as the city hall would never do it. Like a good straight man, this challenge motivated me even more.&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>I even saw our endangered &ldquo;pau-brasil&rdquo; once!&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>Recently I was even using the &ldquo;public bikes&rdquo; to do so, in what I affectionately nicknamed the &ldquo;Tree Patrol&rdquo;.&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>Several are still ongoing. Like I said, the response time can be very unpredictable.&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p>Which in this case is a single one.&#160;<a href="#fnref:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:12">
<p>34% according to PMAU-BH (page 153).&#160;<a href="#fnref:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:13">
<p>Once a request was denied because the owner of the store told the worked that &ldquo;the tree will cover my shop&rsquo;s sign when it grows&rdquo; 🫠.&#160;<a href="#fnref:13" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:14">
<p>I&rsquo;m trusting that ChatGPT did <a href="https://chatgpt.com/share/68669c3c-3458-800d-ad81-544fa74ec444">the math right</a> given table 1 (page 55).&#160;<a href="#fnref:14" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:15">
<p>That&rsquo;s even considering that the services on 2020-2021 were slower due to the global COVID pandemic.&#160;<a href="#fnref:15" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:16">
<p>It is very common for new developments in the city to be obligated to plant trees somewhere as compensation for removing some where the development is being done.&#160;<a href="#fnref:16" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:17">
<p>For more details about valuing the native species, I recommend following the biologist <a href="https://www.instagram.com/p/DLlGLgOMnfM/">Ricardo Cardim</a>.&#160;<a href="#fnref:17" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:18">
<p>My brother too, as he informally adopted one in São Paulo, right Tapas? 😊&#160;<a href="#fnref:18" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:19">
<p>&ldquo;Liberty Square&rdquo; (Praça da Liberdade), for example, is available!&#160;<a href="#fnref:19" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>The pharmacist and the binary search</title><link>https://tupscal.xyz/blog/2025/06-30-pharmacist-and-binary-search/</link><pubDate>Mon, 30 Jun 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/06-30-pharmacist-and-binary-search/</guid><description>&lt;p&gt;Just the other day I sought a &lt;del&gt;pharmacy&lt;/del&gt; chemist&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; to buy skin care products prescribed by my dermatologist to treat an annoying beard irritation which was not going away&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;. These products can be quite expensive here in Brazil, not sure if that is also the case elsewhere, so I was looking at them and realizing I would be spending several hundred Brazilian reais into just two or three products, but well, I needed the issue sorted, right?&lt;/p&gt;</description><content:encoded><![CDATA[<p>Just the other day I sought a <del>pharmacy</del> chemist<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> to buy skin care products prescribed by my dermatologist to treat an annoying beard irritation which was not going away<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. These products can be quite expensive here in Brazil, not sure if that is also the case elsewhere, so I was looking at them and realizing I would be spending several hundred Brazilian reais into just two or three products, but well, I needed the issue sorted, right?</p>
<p>In here, drugstores often offer you discounts at the counter just by providing your taxpayer&rsquo;s ID number<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, however in this case I was not willing to find out at the last moment, so I asked the pharmacist whether those prices were final, to which I heard:</p>
<blockquote>
<p>Let me see how much discount I can give to you.</p>
</blockquote>
<p>I was intrigued, not knowing they had this authority to just &ldquo;arbitrarily&rdquo; reprice the items, so she got to the computer, took on the &ldquo;Math Lady&rdquo;<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> pose and started trying prices.</p>
<figure><img src="/images/2025/nazare_skin_care.png"><figcaption>
      <p>Picture generated by AI with the prompt <em>&ldquo;Create a cartoonish version of the Brazilian math woman meme, but instead of only equations, there are also skin care products&rdquo;</em> using <a href="https://chatgpt.com/">ChatGPT</a>.</p>
    </figcaption>
</figure>

<p>I inspected closer and noticed she had scanned all three products into the store&rsquo;s system and then opened a &ldquo;discount tab&rdquo;. There she could input any price for each item and have the system tell her that the discount had been exceeded or that the new price was valid.</p>
<p>If you know binary search, you are likely smiling at this point, but if you don&rsquo;t, let me explain: one of the products had a hefty R$150 price tag, if she tried to lower its price R$1 by R$1, and the minimum price was R$120, she would need 30 attempts to get to it! Now by using binary search, she can try: 75, 112, 132, 122&hellip; and eventually get to R$130 with only 7 attempts<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, four times less than she would have tried before. To my surprise, that was roughly what she was doing, probably unaware of the theory behind it, but intuitively trying to speed up this guessing game.</p>
<p>There are many real life situations where binary search is useful:</p>
<ol>
<li>Looking at recorded camera footage and trying to find a day and time where some visible change occurred (like when someone hit your car at the garage or stole something from your house).</li>
<li>Picking the right drill for a hole or wrench for a nut.</li>
<li>Finding a word in a dictionary 👴.</li>
<li>&hellip;</li>
</ol>
<p>I left there very happy, partly because I ended up getting a 20% discount<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>, partly for seeing another theory successfully applied. In a sense a &ldquo;university-themed&rdquo; continuation to my &ldquo;<a href="https://tupscal.xyz/blog/2024/02-26-learned-in-school/">What I learned in school and actually needed in life!</a>&rdquo;, but without knowing whether that woman had ever taken any algorithm lesson 🤣.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I couldn&rsquo;t lose the chance of rewatching and sharing this <a href="https://youtu.be/ygYJqt8pvLc">Limmy&rsquo;s show sketch</a>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>If you&rsquo;ve been following me, I was in the USA a couple weeks ago and I had to present an awards ceremony, so I took the chance and shaved my beard with a razor, which is always a bad idea, as it gets me into this itchy state.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>In what actually turned out to be a scandalous scheme to track consumers and eventually led to some drugstores being <a href="https://www.grcworldforums.com/legal-and-regulation/brazilian-pharmacy-fined-for-illegal-use-of-customer-data/2217.article">fined</a>.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>This is a very famous <a href="https://en.wikipedia.org/wiki/Math_Lady">Brazilian meme</a> that somehow became global!&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>I won&rsquo;t dive into how binary search works, please read its <a href="https://en.wikipedia.org/wiki/Binary_search">Wikipedia article</a> which does a great job at explaining all its details or ask any AI for a quick step-by-step summary.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Also partly because I saw someone trying their best to help a stranger, regardless of the business best interest (though I know for sure the pharmacy is not losing any money).&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>OpenRCT2's v0.4.23 behind the scenes</title><link>https://tupscal.xyz/blog/2025/05-31-openrct2-0423-behind-scenes/</link><pubDate>Sat, 31 May 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/05-31-openrct2-0423-behind-scenes/</guid><description>&lt;hr&gt;
&lt;p&gt;This article was originally written for the &lt;a href="https://openrct2.io/blog/2025/05/behind-scenes-0-4-23"&gt;OpenRCT2 blog&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;At OpenRCT2 we have been doing a monthly release since the beginning of 2024 and with releases so frequent, it&amp;rsquo;s always a concern that people will not notice a change, specially if they skip a release or two. &lt;a href="https://www.youtube.com/watch?v=rwag--Y5T5Q&amp;amp;list=PLKSsRPxziyw5mjbDv79XviaxrCw1vbIt4&amp;amp;pp=0gcJCWMEOCosWNin"&gt;Deurklink&amp;rsquo;s &amp;ldquo;what&amp;rsquo;s new&amp;rdquo; videos&lt;/a&gt; have been of great help (thank you!) and even if some people do not watch it, we know they&amp;rsquo;ll eventually find out about a new ride or feature just by playing or skimming through the changelog, but what about what&amp;rsquo;s done behind the scenes? Let&amp;rsquo;s dive into what the community has been doing on that front!&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p>This article was originally written for the <a href="https://openrct2.io/blog/2025/05/behind-scenes-0-4-23">OpenRCT2 blog</a>.</p>
<hr>
<p>At OpenRCT2 we have been doing a monthly release since the beginning of 2024 and with releases so frequent, it&rsquo;s always a concern that people will not notice a change, specially if they skip a release or two. <a href="https://www.youtube.com/watch?v=rwag--Y5T5Q&amp;list=PLKSsRPxziyw5mjbDv79XviaxrCw1vbIt4&amp;pp=0gcJCWMEOCosWNin">Deurklink&rsquo;s &ldquo;what&rsquo;s new&rdquo; videos</a> have been of great help (thank you!) and even if some people do not watch it, we know they&rsquo;ll eventually find out about a new ride or feature just by playing or skimming through the changelog, but what about what&rsquo;s done behind the scenes? Let&rsquo;s dive into what the community has been doing on that front!</p>
<h2 id="reducing-window-invalidation">Reducing window invalidation</h2>
<p><a href="https://github.com/mixiate">Mix</a> has been all over the place (in a good way!) recently, mostly doing work on rides and attractions, but once he took a broom and swept the window code very hard. When the dust settled (and we stopped coughing) it was cleaner than <a href="https://github.com/OpenRCT2/OpenRCT2/pull/24433">it had ever been</a>.</p>
<p>Ok, I&rsquo;ll stop with the analogies, what happened is that every window is actively listening to a series of game events to understand if it has to do something in response. Here are a few examples:</p>
<ol>
<li>When you resize a window, it needs to be redrawn, as the content it previously showed considered different dimensions.</li>
<li>If the New Ride/Attraction window is open and something is invented, it should now list the newly invented thing.</li>
<li>If the Finance tab is open, it should &ldquo;livestream&rdquo; every purchase and payment the game is registering as it progresses.</li>
<li>And so on&hellip;</li>
</ol>
<p>The easiest solution<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> is to make every window react to everything, and as such they will always be &ldquo;up-to-date&rdquo;, but that is also making the computer process a lot more stuff than it should, since the game is hardly ever broadcasting events that affect everything at every frame. The ideal solution is that each window should be carefully studied to be sensitive only to those events that are relevant to them, though this brings two difficulties with which Mix had to deal with:</p>
<ol>
<li>Actually finding out what each window needs. Examples: <a href="https://github.com/OpenRCT2/OpenRCT2/pull/24433/commits/07635362def90e042f01a982d601692d60db38d9">[a]</a> and <a href="https://github.com/OpenRCT2/OpenRCT2/pull/24433/commits/7fcfef97f7dd0345fca52bffc948a3ce57b81057">[b]</a>.</li>
<li>Fixing windows who should not be reacting to a given event, but did so because it &ldquo;fixed a bug&rdquo;<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. Examples: <a href="https://github.com/OpenRCT2/OpenRCT2/pull/24433/commits/07635362def90e042f01a982d601692d60db38d9">[c]</a> and <a href="https://github.com/OpenRCT2/OpenRCT2/pull/24433/commits/7fcfef97f7dd0345fca52bffc948a3ce57b81057">[d]</a>.</li>
</ol>
<p>In one case, having the Scenery window open and not taking any action (like moving the mouse, or the window), it could be invalidating itself up to 40 times per second, and doesn&rsquo;t invalidate once. That&rsquo;s at least 40 less calculations that we&rsquo;re burdening your CPU with, this not only improves the performance of the game, but also makes it easier for us to debug, since the unoptimized builds will run faster<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. This happened to several other windows, so the improvements stack up, thanks Mix!</p>
<h2 id="preventing-unnecessary-tweening-of-entities">Preventing unnecessary tweening of entities</h2>
<p>In animation there is a concept called <em>tweening</em>, which can be poorly explained as the smoothing out of a movement or transition to make it look more natural<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>. Imagine you have a guest moving from the park entrance to a ride queue, you can&rsquo;t just remove the guest from one coordinate and make it appear in the next, because that will not look like walking. At the same time, you don&rsquo;t want to have to write code to describe every step it takes, so you do approximations.</p>
<p>In OpenRCT2 we apply tweening to all peeps and vehicles, which are the things that move the most, but then <a href="https://github.com/OpenRCT2/OpenRCT2/pull/24467">Matt found out</a> we were doing this even when it was not needed:</p>
<ol>
<li>When the game was zoomed out - after all why smoothing out a movement that you&rsquo;re barely even seeing? It&rsquo;s like opening a map and seeing a continent, but still spending time drawing all the roads of a given town, even though it is impossible to see.</li>
<li>When the entity was not visible - as opposed to above, where if you squint you still might be able to see<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, this time the thing is not even on-screen, so why bother animating it smoothly?</li>
</ol>
<p>As with the reduction in the window invalidation, this was all about avoiding making the code process stuff that is not needed. Thanks Matt!</p>
<h2 id="cleanup-of-peep-code">Cleanup of <em>Peep</em> Code</h2>
<p>In the original game, a lot of the code was shared among different entities, because of size constraints, but that didn&rsquo;t make up for a very readable code, nor one easy to maintain and make sense of. One such example is the <em>Peep</em><sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> code, which would take turns depending on whether it was a guest or a staff, but always start in the same function, because in the end, they&rsquo;re all people, right?<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup></p>
<p>One small example is checking for every Peep whether it was a Staff or a Guest, because if it is the latter, we should update its thoughts. With the <a href="https://github.com/OpenRCT2/OpenRCT2/pull/24465">separation done by Matt</a> it is now clear which routine belongs to whom and the game needs to do a lot less verification. In the future, this will also allow us to refactor this code knowing that we&rsquo;re touching either only Guest or only Staff functions.</p>
<h2 id="hidden-cost-of-the-shared_ptr-abstraction">Hidden cost of the shared_ptr abstraction</h2>
<p>The last one is for my fellow C++ nerds out there: you know that memory management has always been pointed out to be one of the weaknesses of the language<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>, until C++ 11 came along and introduced smart pointers. You could then create objects and let the compiler make up the code for managing the lifetime of that object, which was great, right? Yeah, most of the times, it just so happens that these abstractions are no panacea and can introduce overhead, which is what <a href="https://github.com/OpenRCT2/OpenRCT2/pull/24404">Matt and Mix uncovered</a>.</p>
<p>The PR diff is big, but just because we changed some fundamental objects like UIContext to be returned by reference, as we know exactly when they&rsquo;re created and deleted, such as here:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-diff" data-lang="diff"><span class="line"><span class="ln">1</span><span class="cl"><span class="gd">- std::shared_ptr&lt;IAudioContext&gt; GetAudioContext() override
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="gi">+ IAudioContext&amp; GetAudioContext() override
</span></span></span><span class="line"><span class="ln">3</span><span class="cl">  {
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="gd">-     return _audioContext;
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="gi">+     return *_audioContext;
</span></span></span><span class="line"><span class="ln">6</span><span class="cl">  }
</span></span></code></pre></div><p>And then we had to change tons of usages of operator <code>-&gt;</code> to <code>.</code>  :</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-diff" data-lang="diff"><span class="line"><span class="ln">1</span><span class="cl"><span class="gd">- GetContext()-&gt;GetUiContext()-&gt;SetKeysPressed(key, scancode);
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="gi">+ GetContext()-&gt;GetUiContext().SetKeysPressed(key, scancode);
</span></span></span></code></pre></div><p>Contrary to the other topics in this post, here we had almost no difference into what the code was doing, we just changed the way the objects were being stored and retrieved, which gave a 5 FPS gain on ZehMatt&rsquo;s machine.</p>
<p>And that&rsquo;s a wrap, hope you can see all these differences live in the upcoming v0.4.23!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>And laziest too, but don&rsquo;t blame on us, there are <strong>A LOT</strong> of windows and events in OpenRCT2.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>The correct would be to say it camouflaged a bug, since the window being on an invalid state due to a change that should not have affected it is undesired.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>And for the lazy &ldquo;cout debuggers&rdquo; like me, it will not be crazy to add messages to be printed on window code anymore, since previously they were impossible to follow.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>I myself didn&rsquo;t know what it was, and had to ask Matt.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Maybe not, but let&rsquo;s assume you would.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Peep being how we refer to the little people in the game&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>Even when we manually pick annoying guests and throw them into the water!&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>Funnily enough, also one of the strengths, for some.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Have you felt the climate crisis yet?</title><link>https://tupscal.xyz/blog/2025/04-29-felt-climate-crisis-yet/</link><pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/04-29-felt-climate-crisis-yet/</guid><description>&lt;p&gt;Back when I planned this post a couple months ago, the news in Brazil would naturally not cease to talk about the &lt;a href="https://www.cnbc.com/2024/12/13/coffee-prices-analysts-warn-it-may-take-years-for-the-rally-to-fade.html"&gt;rising price of coffee&lt;/a&gt; and how it would affect everyone, since we&amp;rsquo;re major producers and consumers of the magic bean. I myself don&amp;rsquo;t drink it, but a lot of people that I care about do and I guess it was the first time people were seriously talking about the effects of a climate crisis, because a part of their daily routines had become considerably more expensive in a glimpse.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Back when I planned this post a couple months ago, the news in Brazil would naturally not cease to talk about the <a href="https://www.cnbc.com/2024/12/13/coffee-prices-analysts-warn-it-may-take-years-for-the-rally-to-fade.html">rising price of coffee</a> and how it would affect everyone, since we&rsquo;re major producers and consumers of the magic bean. I myself don&rsquo;t drink it, but a lot of people that I care about do and I guess it was the first time people were seriously talking about the effects of a climate crisis, because a part of their daily routines had become considerably more expensive in a glimpse.</p>
<figure><img src="/images/2025/04-29_coffee_dollars.jpeg" height="200"><figcaption>
      <p>Picture generated by AI with the prompt <em>&ldquo;Draw a full transparent coffee pot tilted and slowly dripping coffee onto a giant water body, like a water supply reservoir, but every drip is a dollar bill instead of a coffee droplet&rdquo;</em> using <a href="https://designer.microsoft.com/image-creator">Microsoft Designer</a>.</p>
    </figcaption>
</figure>

<p>Sure we&rsquo;ve all been hearing about numerous consequences of messing up the weather: rising oceans with disappearing islands, smaller crop yields, increase in frequency of &ldquo;natural&rdquo; disasters and unpredictable rain patterns<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, but these consequences hadn&rsquo;t hit some people so directly yet and it took many by surprise. Sadly, I have been actively worried about the climate crisis for at least 10 years 😓.</p>
<p>If you lived in Brazil in the early 2010s<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> you cannot have missed <a href="https://www.telegraph.co.uk/news/picturegalleries/earth/11242908/Brazils-worst-drought-in-80-years-from-the-air-in-pictures.html">the news</a> about how our biggest city, São Paulo, was rapidly approaching water shortage due to the extended drought not allowing the refilling its now infamous &ldquo;Cantareira&rdquo; system. People would report everyday on what the current level of the reservoir would be and what measures were being taken: rationing, installing pumps to get water from shallow layers that the drainage would not normally reach, start building new reservoirs.</p>
<p>A big &ldquo;upside&rdquo; of these events is that someone demanded the companies providing the sanitation service to start implementing systems to report the level of these water bodies, as transparency would make it easier for anyone to monitor, ask questions and demand change. Though São Paulo seemed to have the most pressing crisis, it was not the only big city with a looming water shortage, so were Rio de Janeiro and my city, Belo Horizonte, which is how a decade ago I started to stare at this almost daily:</p>
<table>
  <thead>
      <tr>
          <th></th>
          <th>24/April</th>
          <th>25/April</th>
          <th>26/April</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Paraopeba System</td>
          <td>88,0%</td>
          <td>88,1%</td>
          <td>88,2%</td>
      </tr>
      <tr>
          <td>Rio Manso</td>
          <td>93,5%</td>
          <td>93,6%</td>
          <td>93,9%</td>
      </tr>
      <tr>
          <td>Serra Azul</td>
          <td>79,5%</td>
          <td>79,5%</td>
          <td>79,4%</td>
      </tr>
      <tr>
          <td>Vargem das Flores</td>
          <td>86,2%</td>
          <td>86,1%</td>
          <td>86,1%</td>
      </tr>
  </tbody>
</table>
<p>It is a moving three-day snapshot of the water reservoir levels that supply Belo Horizonte<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> showing their recent trends in either filling up, draining down or staying stable. It is a beauty in itself given how it is both simple and effective at building my nerves, after all if it hasn&rsquo;t been raining, for sure the percentages will be shrinking<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> and after a few months in that situation, drought will be upon us.</p>
<p>Luckily we&rsquo;ve had a streak of years between 2020 and 2024 which had the systems all maxed out. This helps in calming me down, because if it is raining constantly<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> we can almost certainly rest assured that the old problem will be delayed for another year, but if it doesn&rsquo;t, then we might be approaching a water crisis again, which is how December of 2024 looked:</p>
<figure><img src="/images/2025/04-29_water_levels.png"
    alt="The graph shows a series of ups and downs as the rainy and dry seasons go by with the course of the years, with the capacity being not so high between 2017 and 2020 and high ever since, showing a decline only in 2024" height="200"><figcaption>
      <p>Monthly level of the water reservoirs that supply water to the city of Belo Horizonte from 01/2017 to 04/2025</p>
    </figcaption>
</figure>

<p>As I said in the beginning of the post, it took longer to rain, but it is also taking longer for the rain to cease, so we can never know how the situation will be when (and if) we actually have a dry season<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>. That&rsquo;s my &ldquo;climate crisis hyperfocus&rdquo; of the past decade, which gets me back to the post opening question:</p>
<blockquote>
<p>Have you felt the climate crisis yet?</p>
</blockquote>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>And as I type it has consistently rained over the past month in Belo Horizonte, contradicting Tom Jobim&rsquo;s famous song that &ldquo;the waters of March close the summer&rdquo;, that is, the start of the dry season.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>And maybe even abroad, since it became grim.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Which I sourced from <a href="https://copasa.com.br/wps/portal/internet/abastecimento-de-agua/nivel-dos-reservatorios">Copasa&rsquo;s website</a> on 04/28/2025 and converted to a native table on the blog for easier reading.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Luckily it is not that simple, since it might have rained upstream and slowly reaching the reservoirs.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>But not too much, since it also wreaks havoc onto many parts of the city when it does.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>And if that comes, people will not cease to start recommending individual actions such as rationing or taking shorter showers, as if we were to blame and as if the individual consumption would not be a mere fraction of what is daily drawn for industries and agriculture.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Ultra-Processed Food: The Good, the Bad and the Ugly</title><link>https://tupscal.xyz/blog/2025/03-16-upf-good-bad-ugly/</link><pubDate>Sun, 16 Mar 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/03-16-upf-good-bad-ugly/</guid><description>&lt;hr&gt;
&lt;p&gt;It is 5:50 am on a Saturday and I&amp;rsquo;m already awake. Due to routinely waking up at 5:30ish on the weekdays, my body can&amp;rsquo;t help but think I want to rise up at this time every day, and so it makes sure I do. I slowly leave the room to avoid waking up my wife, close the door then start my morning routine: go to the toilet, open the whole house, drink a small glass of milk with whey protein and creatine.&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p>It is 5:50 am on a Saturday and I&rsquo;m already awake. Due to routinely waking up at 5:30ish on the weekdays, my body can&rsquo;t help but think I want to rise up at this time every day, and so it makes sure I do. I slowly leave the room to avoid waking up my wife, close the door then start my morning routine: go to the toilet, open the whole house, drink a small glass of milk with whey protein and creatine.</p>
<p>As I start shaking the milk to make it homogeneous, a thought comes into my head: why am I still drinking this everyday? After all it seems like its benefits are mostly a &ldquo;maybe&rdquo; for both <a href="https://www.webmd.com/vitamins/ai/ingredientmono-833/whey-protein">whey</a> and <a href="https://www.webmd.com/vitamins/ai/ingredientmono-873/creatine">creatine</a>, nonetheless it seems to have just become an easy habit as it provides an easy option of nutrition to start the day. In this case I continued having it because I was ultimately curious to taste the &ldquo;Brazilian Peanut Candy&rdquo; flavor and intrigued with the fact that it was the only one who didn&rsquo;t seem to be as ultra-processed food (UPF) like the others<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. It actually tasted good, so I thought that maybe I should write about all this and here we are<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<hr>
<nav id="TableOfContents">
  <ul>
    <li><a href="#the-ugly-whey-protein-">The Ugly: Whey Protein 🥛</a></li>
    <li><a href="#the-bad-bread-">The Bad: Bread 🥖</a></li>
    <li><a href="#the-good-potato-chips-">The Good: Potato Chips 🍠</a></li>
    <li><a href="#takeaways">Takeaways</a></li>
  </ul>
</nav>
<p>If you were remotely close to me in October 2024 you knew I was tremendously shaken up by Chris Van Tulleken&rsquo;s book <a href="https://www.goodreads.com/book/show/62586003-ultra-processed-people">Ultra-Processed People</a>. It&rsquo;s not like it was the first time I was ever hearing about the concept of UPFs, however it served to increase my appetite<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> for understanding food even more and it has led me to make some amazing discoveries over the past 6 months or so, which I anecdotally share with you this fine morning.</p>
<h2 id="the-ugly-whey-protein-">The Ugly: Whey Protein 🥛</h2>
<p>See, every time I had to buy a refill for my supplement, I would try and pick a different flavor, to test which one was more appealing. I always knew these were artificial, after all the concept of the whole product was to be a &ldquo;concentrated/isolated protein powder&rdquo;, so if it has a taste, it had to contain something else. In January 2025 I decided to try a different brand and when browsing I noticed it had ultra high resolution pictures of the product package on its webpage, which allowed me to read the ingredient list:</p>
<blockquote>
<p>Whey Protein Concentrate, Flavor, Xanthan Gum, Sucralose</p>
</blockquote>
<p>That was for the Vanilla offering, but when I picked others, I saw it didn&rsquo;t change at all, regardless if it was White Chocolate, Banana or Strawberry<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>. Bar from the &ldquo;White Chocolate&rdquo;, the others feel like natural flavors and one might expect them to have more natural ingredients<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> when compared to things like &ldquo;Brazilian Peanut Candy&rdquo;, but they do not. Turns out that the latter also contained &ldquo;Crushed Peanuts and Cocoa Powder&rdquo; and this was an interesting enough discovery to fuel my questionable habit for a few more months<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>. Therefore Whey Protein is &ldquo;The Ugly&rdquo;, because it still is an UPF, but it tries to not be as much in some cases.</p>
<h2 id="the-bad-bread-">The Bad: Bread 🥖</h2>
<p>Over time I grew the habit of reading the ingredient list of the products I bought at the local bakery. Sure they didn&rsquo;t seem very trustworthy, after all it&rsquo;s hard to believe that an appetizing chocolate panettone would only use 4 ingredients<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>. Still, knowing they were all prepared and baked there and not in an industrial warehouse made me a bit calmer that they wouldn&rsquo;t be an UPF, as this typically requires very controlled and meticulous industrial processes.</p>
<p>Yet those days were coming to an end, since I&rsquo;d be moving away from that apartment into another which was in a distant enough neighborhood that would prevent my almost daily visits to the bakery. Being at the new place, I had to start buying bread from a local supermarket instead and, though I was skeptical at first, it didn&rsquo;t take long for me to find both very inviting and dreadful options. Who would have thought a simple orange cake or a brioche-like sweet bread would have over 20 ingredients in the list, including soy lecithin, whereas the financier would have only 5 or 6? I was appalled, the bread became &ldquo;The Bad&rdquo;.</p>
<h2 id="the-good-potato-chips-">The Good: Potato Chips 🍠</h2>
<p>There is no shortage of options when you want to buy potato chips these days and there we were at the supermarket again looking for a big one to buy and serve as a light snack for our upcoming barbecue. I was visibly grumpy, knowing this is like in the top 5 most remembered UPFs or bad foods. Out of habit, I read the ingredient list of the one my wife picked:</p>
<blockquote>
<p>Potato, Salt, Oil <sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup></p>
</blockquote>
<p>Wait, just those 3? Sure they still aren&rsquo;t super healthy since they have a lot of salt and fat, but not finding any weirdly named ingredient was a pleasant and unexpected surprise to which I would happily swipe my card to pay 😂. Against all odds, the potato chips became &ldquo;The Good&rdquo;.</p>
<figure><img src="/images/2025/03-16_good_bad_ugly.jpg"
    alt="The image shows a potato chips package with the title &#34;The Good&#34;, a bread package with the title &#34;The Bad&#34; and a Whey one with the title &#34;The Ugly&#34;" height="200"><figcaption>
      <p>Picture generated by AI after asking for another AI to generate an image description with <em>&ldquo;I&rsquo;m writing an article that uses the title of the movie &ldquo;The Good, The Bad and The Ugly&rdquo; as a word play for categorizing three different types of food I was buying. Create a description for an AI to generate an image containing three different packages where each of them is categorized as follows: the good is a potato chips package, the bad is a bread package and the ugly is a whey protein supplement package.&rdquo;</em> using <a href="https://chatgpt.com/">ChatGPT</a>. Small edits were made to fix glaring imperfections on the generated image</p>
    </figcaption>
</figure>

<h2 id="takeaways">Takeaways</h2>
<p>I didn&rsquo;t write this to have takeaways really, I just wanted to share interesting cases where I was surprised by the item being either more ultra-processed than I expected, less or just, different? Hence the word play with the title.</p>
<p>It&rsquo;s an interesting exercise to read the ingredient list<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup> because sometimes you have several similar products in front of you, looking the same and you know they even taste the same, but one is &ldquo;simpler&rdquo; and potentially healthier. After a while you will have built a list of brands you trust and shopping becomes easier and not a reading session 🤣.</p>
<p>Let me know if you have a trusted list or if you ever find a product that was a lot more or less UPF than you expected!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>It is still clearly an UPF, but at least it contains more &ldquo;natural&rdquo; ingredients.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Breaking the fourth wall much?&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>No pun intended.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Strawberry also had dye for making it pinkish.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Or less artificial ones.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Turns out even more months than I would have expected. Despite having bought the &ldquo;Brazilian Peanut Candy&rdquo; flavor, I actually got &ldquo;Milk Fudge&rdquo; and they didn&rsquo;t want to fix their mistake, so I had to wait for a few months to try what I originally intended to.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>And the chocolate chips are for sure very artificial.&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>That&rsquo;s what I remember, it&rsquo;s not a scientifically accurate description, but I&rsquo;m sure there were just 3 ingredients.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>Though it might be a bit nerve-racking when you see that the list doesn&rsquo;t finish.&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>The Year of Experimentation - Browsers</title><link>https://tupscal.xyz/blog/2025/02-23-year-experimentation-browsers/</link><pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/02-23-year-experimentation-browsers/</guid><description>&lt;hr&gt;
&lt;p&gt;This article is part of the &lt;a href="https://tupscal.xyz/blog/2025/01-18-year-experimentation/"&gt;&amp;ldquo;Year of Experimentation&amp;rdquo; series&lt;/a&gt;, check out the other entries there!&lt;/p&gt;
&lt;hr&gt;
&lt;nav id="TableOfContents"&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#why-browsers"&gt;Why Browsers?&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#my-browser-usage"&gt;My Browser usage&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#picking-the-browsers"&gt;Picking the Browsers&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#a-note-on-chromium"&gt;A note on Chromium&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-contenders"&gt;The Contenders&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#testing-the-browsers"&gt;Testing the Browsers&lt;/a&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;a href="#arc--arc-browser"&gt;Arc / Arc Browser&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#brave"&gt;Brave&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#firefox"&gt;Firefox&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
 &lt;li&gt;&lt;a href="#the-verdict"&gt;The Verdict&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/nav&gt;
&lt;h2 id="why-browsers"&gt;Why Browsers?&lt;/h2&gt;
&lt;p&gt;All of my rambling into the &lt;a href="https://tupscal.xyz/blog/2025/01-18-year-experimentation/"&gt;Year of Experimentation intro&lt;/a&gt; originated from a discussion with a couple of friends about the possibility of &lt;a href="https://www.bloomberg.com/news/articles/2024-11-18/doj-will-push-google-to-sell-off-chrome-to-break-search-monopoly"&gt;Google Chrome being sold&lt;/a&gt; to break Google&amp;rsquo;s monopoly. I remember a friend was torn on this possibility, because, once logged in, he found using Chrome was pretty convenient as it got to sync all of his activity and preferences (such as bookmarks, passwords and extensions) to his devices. To me, it was just another browser, and I have actually been actively fighting back logging in to sync for years&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. That was over three months ago, 11/20/2024 and I was cracking my knuckles to get started.&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p>This article is part of the <a href="https://tupscal.xyz/blog/2025/01-18-year-experimentation/">&ldquo;Year of Experimentation&rdquo; series</a>, check out the other entries there!</p>
<hr>
<nav id="TableOfContents">
  <ul>
    <li><a href="#why-browsers">Why Browsers?</a></li>
    <li><a href="#my-browser-usage">My Browser usage</a></li>
    <li><a href="#picking-the-browsers">Picking the Browsers</a>
      <ul>
        <li><a href="#a-note-on-chromium">A note on Chromium</a></li>
        <li><a href="#the-contenders">The Contenders</a></li>
      </ul>
    </li>
    <li><a href="#testing-the-browsers">Testing the Browsers</a>
      <ul>
        <li><a href="#arc--arc-browser">Arc / Arc Browser</a></li>
        <li><a href="#brave">Brave</a></li>
        <li><a href="#firefox">Firefox</a></li>
      </ul>
    </li>
    <li><a href="#the-verdict">The Verdict</a></li>
  </ul>
</nav>
<h2 id="why-browsers">Why Browsers?</h2>
<p>All of my rambling into the <a href="https://tupscal.xyz/blog/2025/01-18-year-experimentation/">Year of Experimentation intro</a> originated from a discussion with a couple of friends about the possibility of <a href="https://www.bloomberg.com/news/articles/2024-11-18/doj-will-push-google-to-sell-off-chrome-to-break-search-monopoly">Google Chrome being sold</a> to break Google&rsquo;s monopoly. I remember a friend was torn on this possibility, because, once logged in, he found using Chrome was pretty convenient as it got to sync all of his activity and preferences (such as bookmarks, passwords and extensions) to his devices. To me, it was just another browser, and I have actually been actively fighting back logging in to sync for years<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. That was over three months ago, 11/20/2024 and I was cracking my knuckles to get started.</p>
<h2 id="my-browser-usage">My Browser usage</h2>
<p>On that same conversation I told them how it should theoretically be easy for me to switch browsers. Since it seemed I was not using any fancy feature, I only needed two things to be able to replace my current browser:</p>
<ol>
<li>A good private/incognito mode<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</li>
<li>Support for a Bitwarden extension<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> <sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.</li>
</ol>
<p>I was <strong>very</strong> wrong. Turns out I took for granted a lot of bells and whistles which I really cared about would be always there for me. They were not and we will get to that later.</p>
<h2 id="picking-the-browsers">Picking the Browsers</h2>
<p>Wanting to set sail, I went <del>shopping</del> browsing (no pun intended) for what would be the alternatives to my Google Chrome setup, my default browser for over 10 years. I&rsquo;ve always had another browser installed, in case one failed to load a website, so I had some contact with the bigger ones over the years: Microsoft Edge, Mozilla Firefox, Opera. They all seemed to be doing roughly the same things, with some differences here and there, like Opera shipping with a built-in VPN.</p>
<p>What I was going for was whether there was any alternative offering me something novel that would convince me to do the switch. Additionally, I would love for it to be open source<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> and not based on Chromium, but couldn&rsquo;t.</p>
<h3 id="a-note-on-chromium">A note on Chromium</h3>
<p>Chromium is a web browser made by Google and used as the foundation for Google Chrome. If you&rsquo;re not tech-savvy, you&rsquo;ll likely be surprised to find out that, counterintuitively, it is also the base of several other competitor browsers, like the aforementioned Edge and Opera, as well as Samsung Internet (for Samsung smartphones).</p>
<p>This was a change in how browsers work and it was not always like this, but since Google Chrome became such a governing power over the years, climbing to <a href="https://gs.statcounter.com/browser-market-share">65% of the market share</a> in 15 years while the second has 15%, everyone just followed its lead and tried to take a ride on its success. I didn&rsquo;t want to use only Chromium-based browsers for two reasons: not to favor the monopoly, and because I feel like the browser would just feel like Chrome under a different name<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>.</p>
<h3 id="the-contenders">The Contenders</h3>
<figure><img src="/images/2025/02-23_experimentation_browser/brave_arc_firefox.jpeg" height="200"><figcaption>
      <p>Picture generated by AI with the prompt <em>&ldquo;Draw the Google chrome logo atop an ornamented throne, with three people kneeling in front of it, each of these people having a symbol logo of either Mozilla Firefox, Arc browser or Brave browser&rdquo;</em> using the <a href="https://designer.microsoft.com/image-creator">Microsoft Designer</a>. The three logos on the bottom had to be added manually</p>
    </figcaption>
</figure>

<p>I did some very light research and settled for three alternatives that seemed to cover some of my curiosities:</p>
<ol>
<li><a href="https://arc.net/">Arc</a> (desktop) + <a href="https://arc.net/search">Arc Search</a> (Android)</li>
<li><a href="https://brave.com/">Brave</a> (desktop and Android)</li>
<li><a href="https://www.mozilla.org/firefox/">Firefox</a> (desktop) + <a href="https://www.mozilla.org/firefox/browsers/mobile/focus/">Firefox Focus</a> (Android)</li>
</ol>
<p>I wanted to put these to real test to find out their strengths and shortcomings, so I decided I would be testing each for at least 2 weeks, to have the opportunity to use very situational features I would not see myself needing in a short 1-hour session sitting. I left a few interesting choices on the backlog: <a href="https://duckduckgo.com/">DuckDuckGo</a>, <a href="https://vivaldi.com/">Vivaldi</a>, <a href="https://nyxt.atlas.engineer/">Nyxt</a>. Maybe I&rsquo;ll revisit this with their testing someday.</p>
<h2 id="testing-the-browsers">Testing the Browsers</h2>
<h3 id="arc--arc-browser">Arc / Arc Browser</h3>
<h4 id="arc">Arc</h4>
<p>Arc launched a few years ago and it had a <a href="https://www.theverge.com/23462235/arc-web-browser-review">lot of buzz</a>, with people touting that it was &ldquo;life-changing and the reinvention of browsers, even the Chrome-killer<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>&rdquo;. At the time I was very curious, but as it happens once in a while, it was only available for MacOS, so I left it dormant until now. Here&rsquo;s how it looks:</p>
<figure><img src="/images/2025/02-23_experimentation_browser/arc_first_look.png"
    alt="Picture of the Arc Browser window opened on Tulio&#39;s blog. It shows a sidebar on the left with a few tabs and Tulio&#39;s blog at the center-right" height="200">
</figure>

<p>The first thing you&rsquo;ll notice is that it ditches the tabs at the top and instead place them at the left. It can be toggled on and off by clicking a button or using a shortcut<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup> and it can be configured in a way that you can have multiple &ldquo;spaces&rdquo;, like one for work, one for personal life, hobbies, etc&hellip; I barely had any bookmarks, so this didn&rsquo;t help on getting me pumped up, still I gave it a go.</p>
<h5 id="arc-what-i-liked">Arc: What I liked</h5>
<p>The browsing felt very very fast, maybe because it comes with a built-in ad-blocker and I hadn&rsquo;t been using one on Chrome, so the initial impression was great.</p>
<p>Arc is all about improving how you manage and visit the websites and an impressive great feature was <em>Peek</em>:</p>
<figure><img src="/images/2025/02-23_experimentation_browser/arc_peek.gif"
    alt="A short recording of the Arc Browser showing the use of the Peek feature on several links of a news page, opening and closing a window on top with previews of the page." height="200">
</figure>

<p>If you hold <em>shift</em> before clicking a link, it will render that page on a pop-up over the current webpage. I found this to be very useful to read news, where previously I used to just hold <em>ctrl</em> and open a ton of tabs, now I could <em>peek</em> into them, read, then peek onto the next one. It works seamlessly and you can easily upgrade it to a full tab, if you need to, or to open it in split view. A very neat feature!</p>
<figure><img src="/images/2025/02-23_experimentation_browser/arc_split.png"
    alt="A screenshot of the Arc Browser with two pages split side-by-side using Arc&#39;s built-in split view feature." height="200">
</figure>

<p>Arc also has built-in capabilities for all sort of split views. I often find myself splitting Chrome into two windows just to have <em>Google Keep</em> on one side and <em>Gmail</em> on the other, so I see where the Arc developers were coming from. Turns out for my use Windows 11 already does a good enough job at split views, so even though I was forcing myself to use Arc&rsquo;s, I&rsquo;d still eventually just fallback to what I was already accustomed to. Nice feature, but didn&rsquo;t get me too excited.</p>
<p>Finally, it looks nice, polished and modern.</p>
<h5 id="arc-what-i-disliked">Arc: What I disliked</h5>
<p>Not much, to be honest, I actually enjoyed the experience on desktop, I just came by <del>three</del>  two<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup> issues really:</p>
<ol>
<li>At some point I was on a website where I needed to download multiple files and it just blocked them and never gave me the chance to review and allow. I really needed to download them, so I used Chrome to complete the task.</li>
<li>It has the concept of pinned pages and it somehow automatically pins pages it knows you will come back, like the big gmail icon you see on the top left corner or the folder of GitHub Pull Requests. The latter I found interesting, but I had a really hard time with the former, as the default behavior of opening links on pinned pages was to use <em>Peek</em> mode, rather than a new tab, but if you opened that pinned page in split view, then it would be considered as a normal page and use tabs instead. This confused me every single time I was using Gmail.</li>
</ol>
<h4 id="arc-search">Arc Search</h4>
<p>The counterpart of Arc for mobile is Arc Search and it is a <strong>very different</strong> experience of what you have in desktop:</p>
<figure><img src="/images/2025/02-23_experimentation_browser/arc_search_home.jpg"
    alt="A screenshot of the Arc Search browser on Android, showing the search bar" width="300">
</figure>

<p>It continues to be very clean, but now it is also heavily simplified, in such a way that when I opened the settings menu for a page I was surprised to see less than 10 options, where Chrome would in turn have 15-20.</p>
<h5 id="arc-search-what-i-liked">Arc Search: What I liked</h5>
<p>Barely anything. There is a <em>Browse for me</em> feature that replaces the search and does an AI-curated summary of what you&rsquo;re searching for. It looks very nice when you&rsquo;re searching for news articles, but more often than not I was looking for websites, so it wasn&rsquo;t worth waiting 3-4 seconds while it summarized what the site was about, when I really just wanted to enter the website. You can turn this off, as well as hit the Google search directly if you click the search button on the keyboard rather than the <em>Browse for Me</em> button, but it was not super intuitive.</p>
<figure><img src="/images/2025/02-23_experimentation_browser/arc_search_ai.jpg"
    alt="A screenshot of the Arc Search browser AI feature, with an AI written summary of the search results" width="300">
</figure>

<h5 id="arc-search-what-i-disliked">Arc Search: What I disliked</h5>
<ol>
<li>It has a search bar widget for Android home that very often failed to load and would only work upon rebooting the phone.</li>
<li>Confusing use of search, as stated in the section above.</li>
<li>Bitwarden mobile would not work at all to fill in my passwords, until I found out I had to get into <a href="https://resources.arc.net/hc/en-us/articles/27777191046807-How-do-I-get-Bitwarden-to-work-with-Arc-Search-for-Android">Bitwarden&rsquo;s Beta</a><sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup>.</li>
<li>It is tricky to manage and recognize when you&rsquo;re on an incognito/private tab or not. As far as I understood you can only distinguish them because on seeing all tabs, the incognito ones are blacked out, while the others are not. Additionally, there is no option to &ldquo;Open in Incognito&rdquo; when you long click a link, which is one of the features I heavily used and was not aware, as I mentioned on the section about my browser usage.</li>
<li>No option to share image upon long click on one.</li>
<li>Incompatibility with gov.br&rsquo;s (Brazil&rsquo;s citizen system) login via gov.br app. I don&rsquo;t know why it doesn&rsquo;t appear, but it is the most convenient option to log into the system when you&rsquo;re on the phone, since it redirects authentication to the app where you can use fingerprint. Having to use the &ldquo;old login&rdquo; feels slow, when other browsers support this.</li>
</ol>
<h3 id="brave">Brave</h3>
<p>Brave was created and is touted as the browser that &ldquo;cares for your privacy and puts you in first place&rdquo;. The privacy thing does seem true, since according to <a href="https://privacytests.org/">privacytests.org</a> it really makes an effort to protect your data from being tracked, seemingly only losing to Librewolf and Tor<sup id="fnref:11"><a href="#fn:11" class="footnote-ref" role="doc-noteref">11</a></sup>. It also comes with embedded ad and tracker blocker, and even shows some stats, like seen on the image below.</p>
<figure><img src="/images/2025/02-23_experimentation_browser/brave_first_look.png"
    alt="Picture of the Brave Browser window opened on its homepage. It shows a sidebar on the right with a few buttons for Brave features, like wallet and AI, and the central page shows Brave&#39;s privacy statistics, like how many trackers it has blocked and data saved" height="200">
</figure>

<p>Note that summing my Brave session on Desktop and on Mobile, I had over 30k trackers and ads blocked, over a GB of data saved (from not loading all the ad data, I presume) and 27min saved<sup id="fnref:12"><a href="#fn:12" class="footnote-ref" role="doc-noteref">12</a></sup>. Other than that it offers a view that is not too far away from a standard Chrome view, as you see above and as I had sort of predicted on the &ldquo;Picking the Browsers&rdquo; section.</p>
<h4 id="brave-what-i-liked">Brave: What I liked</h4>
<ol>
<li>The built-in counter for saved data/ads. Sure it&rsquo;s a gimmick, but I love stats from things I&rsquo;m doing or using, and it&rsquo;s nice to see how much data was saved, for example.</li>
<li>It has its own search engine, which is fair. For &ldquo;harder searches&rdquo; I would fallback to using Google, but it was relatively rare. It does add AI summaries on some of the searches, but not all, it seems to have a good time figuring out when you&rsquo;d like an answer to a question than the <em>Browse for Me</em> feature of Arc, and I enjoyed this implementation. When programming I would often have this automatic AI feature explain some stuff to me and not even have to hit any documentation website, it was very useful especially for HTML and CSS.</li>
<li>You can copy a &ldquo;clean link&rdquo; which will remove all the tracking information from the link, usually added when you visit a page coming from somewhere else, like Instagram or a newsletter<sup id="fnref:13"><a href="#fn:13" class="footnote-ref" role="doc-noteref">13</a></sup>. I loved this, since these trackers can often make a short link very long and I would frequently manually remove them when sharing URLs with friends, for example, so that it didn&rsquo;t look like spam.</li>
<li>It is technically open source, apart from the implementation of their search engine.</li>
<li>On the Android app you can choose where to search every time: Brave, Google, Bing, etc. What got me surprised was that it seemed to automatically detect websites with compatible search and add to the bunch, which I only noticed when <a href="https://www.comparajogos.com.br/">comparajogos</a> showed up. Now I can even search for board game prices directly from the search bar, without having to get to the website first. Neat!</li>
</ol>
<figure><img src="/images/2025/02-23_experimentation_browser/brave_search_android.jpg"
    alt="Picture of the Brave Browser on Android, with a search query and several small buttons at the bottom showing possible search engines" width="300">
</figure>

<h4 id="brave-what-i-disliked">Brave: What I disliked</h4>
<p>There have been some <a href="https://en.wikipedia.org/wiki/Brave_%28web_browser%29#Controversies">controversies</a> surrounding Brave and a few regarding its CEO political stance. They make me a uncomfortable, but at the same time it seems they are most water under the bridge, by now.</p>
<h4 id="brave-what-i-couldnt-decide">Brave: What I couldn&rsquo;t decide</h4>
<p>There&rsquo;s a number of features I knew were there but either didn&rsquo;t use or didn&rsquo;t see value after using:</p>
<ol>
<li>Blocked private surfing, where you can configure the browser on Android to require a password/fingerprint to unlock the incognito pages when you&rsquo;re coming from another app.</li>
<li>Pay-to-surf: they have this feature where you opt-in to see ads and get paid on their own cryptocurrency in exchange, contrary to normal web surfing where you surf for free seeing tons of ads and the companies profit from ads you&rsquo;re seeing. It&rsquo;s interesting to see they&rsquo;re trying to inverse the mechanism, but I didn&rsquo;t opt-in as I&rsquo;d rather just not see any ads.</li>
<li>A paid &ldquo;Brave VPN&rdquo; service.</li>
<li>&ldquo;Brave Talk&rdquo; which offers free video calls for up to 4 people.</li>
<li>The &ldquo;Open [link] in Tor&rdquo; feature, which was too slow to open pages for me to care (I guess due to the nature of Tor browsing).</li>
</ol>
<h3 id="firefox">Firefox</h3>
<p>To wrap-up we get to Firefox. Once upon a time, when Google Chrome wasn&rsquo;t around, it was doing a pretty good job of fighting the current leader, Internet Explorer, where Firefox had almost a third of the market share. That has steeply declined ever since, and it is now 10 times smaller, with around 3%. It is a bit of a sad story, since Firefox is an open source browser developed by the Mozilla Foundation, a non-profit, almost making it the perfect &ldquo;instrument&rdquo; to fight against monopolies, nonetheless as we see in the market share, it has been struggling to keep up.</p>
<figure><img src="/images/2025/02-23_experimentation_browser/firefox_first_look.png"
    alt="Picture of the Firefox Browser window opened on its homepage." height="200">
</figure>

<h4 id="firefox-what-i-likeddisliked">Firefox: What I liked/disliked</h4>
<p>Here&rsquo;s the rough truth: nothing really called my attention, Firefox didn&rsquo;t bother much showing me around, explaining its shiniest and greatest features and I didn&rsquo;t bother searching either. That&rsquo;s probably one of the reasons why it sits in that position today, it doesn&rsquo;t stand out, it&rsquo;s neither hated nor loved, and in a world of increased polarization that doesn&rsquo;t take it very far.</p>
<p>There was one interesting quirk, though, <a href="https://support.mozilla.org/en-US/kb/firefox-reader-view-clutter-free-web-pages">Reader View</a> which is a feature that provides a minimalist, clutter-free visualization of a page:</p>
<figure><img src="/images/2025/02-23_experimentation_browser/firefox_reader_view.png"
    alt="Picture of the same page opened on two side by side Firefox Browser windows. The left one is the reader view and has nothing but text, while the right is the page as it looks normally, with styling, ads, and more." height="200">
</figure>

<p>Other than that, the squareish design always had me thinking I was using something outdated and the way tabs are managed on the Android app makes opening ans switching between private/incognito and normal tabs more cumbersome than I would have enjoyed.</p>
<h4 id="a-note-on-firefox-focus">A note on Firefox Focus</h4>
<p>When I set out for experimenting, I thought Firefox Focus would be the recommended Firefox app for Android, just like Arc Search companion for Arc. I was wrong, both Firefox and Firefox Focus exist for Android, but the latter is like a &ldquo;private mode only&rdquo; version of the former.</p>
<p>It is really fast, since it always has ad blocking enabled, never saves tracking information nor logins and there&rsquo;s no tabs by default<sup id="fnref:14"><a href="#fn:14" class="footnote-ref" role="doc-noteref">14</a></sup>. It will hardly ever become your default browser, though, since you likely want some logins to persist and sometimes need to switch back and forth between tabs. Some people might keep it around to be their way of using private tabs, but I think it just makes more sense to have a browser that supports both, as most do.</p>
<h2 id="the-verdict">The Verdict</h2>
<p>I&rsquo;m glad I spent a few months testing different browsers, since it showed me some features and possibilities I didn&rsquo;t even know were there or that I needed. In the end I&rsquo;m settling down on Brave, just because over the course of the weeks, it was the one I saw myself coming back to more often.</p>
<p>I&rsquo;ll give myself a little breathing room and maybe in a few months I&rsquo;ll test a few other alternatives mentioned at the beginning of the post. If you think I was unfair to a given browser or that I really should have tried a different one, let me know :).</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>And was pretty annoyed that every now and then Google Chrome would pester me to &ldquo;login otherwise I could be losing important information&rdquo;.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>If I have something to search for that I&rsquo;ll likely never be inquiring again, I&rsquo;ll do it on the incognito mode, as an attempt to not taint my history and (unwanted) recommendations for ads and search engines.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>For those unaware, <a href="https://bitwarden.com/">Bitwarden</a> is a <a href="https://en.wikipedia.org/wiki/Password_manager">password manager</a> and I have <a href="https://tupscal.xyz/blog/2024/03-04-fantastic-passwords/">written about it before</a>. Since I have over 280 credentials stored there, I <strong>really</strong> need it to be a functional internet user.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Theoretically I could get away with this requirement, given Bitwarden offers desktop applications, but I assumed it wouldn&rsquo;t be very convenient, despite never having tested it. I guess it&rsquo;s one more into the year of experimentation bucket!&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>And not maintained by a mega corporation.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>In some cases it did, but I had a few surprises.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>But it is also built on top of Chromium.&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>Shortcuts are heavily advertised on Arc for a better navigation experience.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>I noticed and took note that it had failed to import my bookmarks, even though that&rsquo;s like one of the most basic things a browser has to support to gain adoption. Turns out my Chrome on desktop didn&rsquo;t even have bookmarks, so I was the one to blame 😂. Please don&rsquo;t go back and read footnote #1.&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p>Though a nuisance at first, this turned out to be a good finding, since they&rsquo;re rewriting the app to be native and the beta looks and works a lot better than the current app version!&#160;<a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p>Note that Brave even includes &ldquo;Brave Tor&rdquo;, which is an option to open a page in a private Tor session, which could then satisfy the missing checks from the normal Brave.&#160;<a href="#fnref:11" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:12">
<p>I have no idea how it counts that, maybe because you don&rsquo;t waste time scrolling through ads? In any case the number is very small given how long I&rsquo;ve been using Brave.&#160;<a href="#fnref:12" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:13">
<p>People on marketing probably hate this feature, since it messes up how they measure the effectiveness of their ad campaigns and such.&#160;<a href="#fnref:13" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:14">
<p>On iOS it seems there are no tabs at all. On Android they exist, but you can only open links in new tabs, never create a new one out of the blue.&#160;<a href="#fnref:14" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>The Year of Experimentation</title><link>https://tupscal.xyz/blog/2025/01-18-year-experimentation/</link><pubDate>Sun, 19 Jan 2025 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2025/01-18-year-experimentation/</guid><description>&lt;hr&gt;
&lt;p&gt;This is the introductory article for the &amp;ldquo;Year of Experimentation&amp;rdquo; series. Read other posts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tupscal.xyz/blog/2025/02-23-year-experimentation-browsers"&gt;The Year of Experimentation - Browsers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tupscal.xyz/blog/2025/08-24-microlearning"&gt;The Year of Experimentation - Microlearning&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Throughout 2024 I stopped on multiple occasions and wondered why I hadn&amp;rsquo;t been trying new stuff anymore, specially tech-related. Around a decade or two ago, I installed new stuff all the time, be it on the computer&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; or on the smartphone, and that habit just vanished.&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p>This is the introductory article for the &ldquo;Year of Experimentation&rdquo; series. Read other posts:</p>
<ul>
<li><a href="https://tupscal.xyz/blog/2025/02-23-year-experimentation-browsers">The Year of Experimentation - Browsers</a></li>
<li><a href="https://tupscal.xyz/blog/2025/08-24-microlearning">The Year of Experimentation - Microlearning</a></li>
</ul>
<hr>
<p>Throughout 2024 I stopped on multiple occasions and wondered why I hadn&rsquo;t been trying new stuff anymore, specially tech-related. Around a decade or two ago, I installed new stuff all the time, be it on the computer<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> or on the smartphone, and that habit just vanished.</p>
<p>For the phone I remember switching launchers as I switched clothes, as well as installing new games and a multitude of apps to change every little aspect of my life: finance, habits, notes, tasks, alarm clock, file managers. For the desktop computer, it was mostly about keeping my system shining, at first: things to clean registry, to <em>defragment</em> memory, to make copies faster. Later on I also had the craze of installing browser plugins for everything.</p>
<p>None of these happen anymore and it bothers me to some extent. I think tinkering and fiddling with new stuff is a great tool to learn more, to experience fresh takes on already consolidated ideas and maybe find something that is a lot better than what I currently use. Here are a handful of reasons I thought about to explain why I am not drawn to this experimentation any longer:</p>
<ol>
<li><strong>Consolidated Experiences:</strong> Maybe the stuff today is just providing good enough value and I don&rsquo;t feel like needing to switch. The smartphones already come with plenty of good enough first party apps, why would I learn the ropes of another one if there is no annoying shortcoming on my current use?</li>
<li><strong>Lack of time (AKA adulthood):</strong> It might be that I was just struck by the weight of being an adult, therefore having to juggle work with new hobbies and a myriad of other things leaves little room for &ldquo;wasting time&rdquo; trying stuff that might not get anywhere.</li>
<li><strong>Being too locked-in</strong>: Perhaps the app just has me shackled due to one or more of these motives:
<ol>
<li>It dominates my attention and swallows my spare time, like constantly swiping on Instagram or even going at a few more lessons than anticipated on Duolingo<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</li>
<li>Everyone else is using it, like WhatsApp for messaging in Brazil.</li>
<li>It will be a lot of work to switch due to the volume of data or pervasiveness, such as letting go of my gmail e-mail address.</li>
<li>Because I can&rsquo;t switch, for instance standardized software at work.</li>
<li>There really is no good alternative (?)<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></li>
</ol>
</li>
</ol>
<p>Some of the above mentioned justifications are beyond my control, in particular the ones on the third topic<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>, but the first two are within my reach to change and that&rsquo;s what I&rsquo;m going after this year, not so creatively named &ldquo;<strong>The year of experimentation</strong>&rdquo;. Here are a handful of fields I&rsquo;ll be testing, in no particular order:</p>
<ul>
<li>Browsers</li>
<li>Task Managers</li>
<li>Board Game Apps<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></li>
<li>Android Launchers</li>
</ul>
<p>I have a couple of these under trial and others on my backlog. My goal for the year is not to merely test them, but to come back and report what it was like and whether any alternative was able to displace my previous go-to choice. I would love to hear from anyone who is out there reading this whether you have a new category proposal or a suggestion within the existing ones 😁.</p>
<p>Let the trials begin!</p>
<figure><img src="/images/2025/01-19_apps_computer.jpeg" height="200"><figcaption>
      <p>Picture generated by AI with the prompt <em>&ldquo;Draw an image with two canvasses, each with a different colored, but clean background. On one side there is a typical computer screen and on the other side a smartphone screen, and both screens are filled with inventive new attractive app icons. Don&rsquo;t add any hand holding them, use colored drawing style without looking childish.&rdquo;</em> using the <a href="https://designer.microsoft.com/image-creator">Microsoft Designer</a></p>
    </figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>And sometimes getting the so unwanted trojans, viruses and such 🫠.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>I understand this one is a bit more controversial, since you&rsquo;re technically spending time learning a new language, instead of <a href="https://en.wikipedia.org/wiki/Doomscrolling">doomscrolling</a>.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I don&rsquo;t have a good example, but maybe it really is just the best of its kind at the moment.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Albeit with some courage and resiliency, I could still trailblaze and change a few of these status quos.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Which I use to record my plays, browse my collection, see multiple statistics.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Welcome back music shuffle</title><link>https://tupscal.xyz/blog/2024/12-27-true-shuffle/</link><pubDate>Fri, 27 Dec 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/12-27-true-shuffle/</guid><description>&lt;p&gt;It was 2013, a bit more than a decade ago, and I was living and studying in the United Kingdom for a year, through a &lt;a href="https://en.m.wikipedia.org/wiki/Ci%C3%AAncia_sem_Fronteiras"&gt;government program&lt;/a&gt; that allowed us to attend foreign universities. I had never left my home country before, thus it was being a transformative experience for me, as I was getting the chance to experience plenty of things I could never find in Brazil&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. One of these turned out to be &lt;a href="https://en.wikipedia.org/wiki/Spotify"&gt;Spotify&lt;/a&gt;&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>It was 2013, a bit more than a decade ago, and I was living and studying in the United Kingdom for a year, through a <a href="https://en.m.wikipedia.org/wiki/Ci%C3%AAncia_sem_Fronteiras">government program</a> that allowed us to attend foreign universities. I had never left my home country before, thus it was being a transformative experience for me, as I was getting the chance to experience plenty of things I could never find in Brazil<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. One of these turned out to be <a href="https://en.wikipedia.org/wiki/Spotify">Spotify</a><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>I don&rsquo;t even remember whether I was still using <a href="https://en.wikipedia.org/wiki/Winamp">Winamp</a> or <a href="https://en.wikipedia.org/wiki/AIMP">AIMP</a> as my main audio player software back then<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, but what I do recall is that maintaining our song files was a serious chore that I shared with my older brother very zealously ever since we lost our collection due to an unsolicited hard disk wipe from an IT technician<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>. We didn&rsquo;t just download them and added to some folder, it was a multi-step <del>burden</del> process that looked something like this:</p>
<ol>
<li>Get the songs we wanted from somewhere.</li>
<li>Organize these songs into layers of folders: each artist had its own folder and within it additional folders for each album, with the pattern &ldquo;YYYY - Album Name&rdquo;.</li>
<li>Load the songs onto <a href="https://en.wikipedia.org/wiki/MP3Gain">MP3Gain</a> to normalize the songs volumes by album. Here we were trying to prevent the &ldquo;TV ad effect&rdquo;, when you&rsquo;re watching something at a given volume and when the ad starts it&rsquo;s usually at a much louder volume.</li>
<li>Load the songs onto <a href="https://www.xdlab.ru/en/index.htm">TagScanner</a> to inspect and fix the metadata of the songs, such as adding the album year, cover image, or their track number.</li>
</ol>
<p>It was laborious, yet very rewarding when we opened the media player and saw everything tidy both in the music list and in the &ldquo;currently playing&rdquo;. Nonetheless, I was looking forward to not wasting time having to do any of these again and Spotify seemed like a great alternative, but it was not yet available in Brazil. Back then I remember that as far as music streaming went we were mostly relying on <a href="https://en.wikipedia.org/wiki/Grooveshark">Grooveshark</a>.</p>
<p>Back to 2013 in the UK, where I created my account on Spotify by logging in with Facebook<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> and started listening to songs. It was convenient and I was enjoying it, which was great given that a few months later they announced they would be <a href="http://online.wsj.com/articles/spotify-launches-in-brazil-1401292726">expanding to Brazil</a>, still at that time I was not ready to pay for a music subscription service and since mobile internet was very expensive back home, it would be more convenient to maintain my own files on my phone and computer.</p>
<p>Fast forward a few years and the mobile internet was getting cheaper, phones faster and it was becoming increasingly more complex to maintain the files, as now one could play the songs not only on the computer and the phone, but on the TV, car and many more. Additionally, I often wanted to hear my songs while at work, but I wouldn&rsquo;t transfer my own files there, so a seamless solution was needed and I started paying for Spotify.</p>
<p>I was never much into the &ldquo;creating playlists&rdquo; thing, so all I did was navigating to the artists I wanted and started &ldquo;liking&rdquo; their albums so they could show up on my list, as well as their songs.</p>
<p>Ever since we maintained our own songs, we switched between different listening habits:  sometimes hearing a full album in order, but on occasion just hitting play on a random song and listening through all of the artists on shuffle. My habits worked similarly on Spotify, until at some point in 2019 when they decided to change the interface so that when you liked an album, it would not automatically and individually add all of its songs to your song list.</p>
<figure><img src="/images/2024/12-27_angry_at_spotify.jpg" height="600"><figcaption>
      <p>Picture generated by AI with the prompts &ldquo;draw a caucasian man cursing and trying to punch a giant spotify logo&rdquo; and &ldquo;make the man less angry&rdquo; using <a href="https://chatgpt.com">ChatGPT-4</a></p>
    </figcaption>
</figure>

<p>Over the years I loathed several changes in the app user interface, but none of those had me so annoyed as this one, and it seems <a href="https://community.spotify.com/t5/Android/New-Liked-Songs-and-Saved-Albums-problem/td-p/4699202">I was not alone</a>. With that change every time I liked a new album, I would have to click to save the album, as well as each song. I did not want to do this, and so my habits changed, over time I stopped listening to all my songs on shuffle, because they were now an incomplete snapshot of everything I had liked.</p>
<p>Skipping to yesterday, 12/26/2024, when I had to drive alone under heavy rain for approximately 40 minutes and I didn&rsquo;t want to do it in silence. I opened the app and hit play on a single song I liked, leaving Spotify to its magic &ldquo;radio&rdquo; feature. During the journey, I listened to some great new songs I didn&rsquo;t know<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>, but it also played some others I used to like and were forgotten, just because I never remembered to play their specific album.</p>
<p>At that point I understood that the &ldquo;true music shuffle&rdquo; was something I longed-for and desperately needed to recover. Surely it would have been solved by now, since it had been 5 years past the change, so I hit google and found a <a href="https://www.reddit.com/r/truespotify/comments/tcnna0/comment/jcmg664/">Reddit thread</a> where someone was asking for exactly what I wanted, and where a fellow developer that goes by the username <em>buddamus8</em> answered exactly what I needed.</p>
<p>It&rsquo;s a 600-line, not super simple, script, it can be unsafe<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup> and it can violate some clause of Spotify&rsquo;s end user agreement, but now I had a way to, at the click of a button, add all of the songs of my liked albums back to the &ldquo;Liked Songs&rdquo; list. I did it and a whopping 600 songs were added to my list, increasing its size by 20%.</p>
<p>I once more have a way to listen to my music on &ldquo;true shuffle&rdquo; mode<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>, thank you <em>buddamus8</em><sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup>!</p>
<figure><img src="/images/2024/12-27_music_joy.jpg"><figcaption>
      <p>Picture generated by AI with the prompt &ldquo;draw a bearded white man with teary eyes listening to songs on shuffle, use comic style&rdquo; using <a href="https://chatgpt.com">ChatGPT-4</a></p>
    </figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>If you read this and thought &ldquo;drugs&rdquo;, you were wrong, but I thought a lot of people would think this 😂&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>I know this doesn&rsquo;t sound super exciting considering all of the things I could have listed here, but bear with me as the story will make sense.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I think it was the latter because it provided, if I recall correctly, some pretty neat &ldquo;sort by&rdquo; and &ldquo;group by&rdquo; options on the music list, so you could have it sorted alphabetically by artist and within each artist, group by album. It also scrolled to last.fm automatically!&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Whoever was using the computer on the early 2000s will remember how hard it was to download stuff, so having our hard disk wiped without asking us first just threw countless hours of our curation into the bin.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Something I regret to this day, as it made my user a series of nonsensical numbers like 15465123487.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Look, I know how to make a compliment as well, when one is due 😝.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>I did look through the code for some minutes to try and spot if it was doing some obviously malicious stuff. I didn&rsquo;t find any, but I&rsquo;m also not a security researcher, if you think I should be concerned let me know!&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>Let&rsquo;s not get into the details that a true shuffle doesn&rsquo;t exist and how random number generators have a bias.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>Fun fact: this was the only time this user decided to comment on a reddit thread from someone else, despite them having an account on the website for over 9 years.&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>The Joy of Walking the Streets</title><link>https://tupscal.xyz/blog/2024/11-23-joy-walking/</link><pubDate>Sat, 23 Nov 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/11-23-joy-walking/</guid><description>&lt;p&gt;Ever since I moved to start &amp;ldquo;living on my own&amp;rdquo;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, I&amp;rsquo;ve always abhorred this one idea that people like to disseminate that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Living close to a shopping center is the best, you can find everything in one place and it makes life a lot simpler and more efficient.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I won&amp;rsquo;t lie, I did live next &lt;a href="https://maps.app.goo.gl/TuqTK3usuXMQt9D79"&gt;to one&lt;/a&gt; for almost 6 years and it was convenient, but there was something dull about getting inside a gigantic closed building unaware of my surroundings or the weather, doing all of my shopping on stores from big brands and confining my whole living to a square kilometer.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Ever since I moved to start &ldquo;living on my own&rdquo;<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, I&rsquo;ve always abhorred this one idea that people like to disseminate that:</p>
<blockquote>
<p>&ldquo;Living close to a shopping center is the best, you can find everything in one place and it makes life a lot simpler and more efficient.&rdquo;</p>
</blockquote>
<p>I won&rsquo;t lie, I did live next <a href="https://maps.app.goo.gl/TuqTK3usuXMQt9D79">to one</a> for almost 6 years and it was convenient, but there was something dull about getting inside a gigantic closed building unaware of my surroundings or the weather, doing all of my shopping on stores from big brands and confining my whole living to a square kilometer.</p>
<p>To escape this feeling, I tend to walk a lot every time I travel, regardless if I am alone or accompanied. I think that&rsquo;s how you get to explore the city, giving chance to serendipity, and eventually finding something you were not expecting, but loved, like when I was in London and ended up at the <a href="https://en.wikipedia.org/wiki/Battersea_Power_Station">Battersea Power Station</a> or <a href="https://tupscal.xyz/blog/2024-04-28-screenless-breakfast/">just had a breakfast</a>. So why wouldn&rsquo;t I do this when I am back home?</p>
<p>When I moved to another apartment with my wife 3 years ago, we started living in a neighborhood that people sometimes described as:</p>
<blockquote>
<p>&ldquo;Like you&rsquo;re living in a countryside village inside a big town: you have lots of small businesses and people know each other, but you&rsquo;re 5 minutes away from everything the city has to offer.&rdquo;</p>
</blockquote>
<p>I loved it, having then different places for my different needs: a favorite bakery, grocery store, emporium, even a small and trustworthy tire repair shop. Sure there are some medium to big retail chains we cannot avoid visiting now and then, but the feeling of roaming the streets and being out in the open was and still is everything to me. It gives me peace of mind and joy<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, one such example happened yesterday, but not in my neighborhood, as you would expect.</p>
<p>Earlier this week my brother and I had found out that <a href="https://lacunacoil.com/">Lacuna Coil</a> would be playing a concert in our city and given that I have listened to it since at least 2008<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, I was very keen on buying the tickets to attend it. I decided to buy them physically to avoid the 15% processing fee or as it is called in Brazil, the &ldquo;convenience fee&rdquo;, therefore I started my journey going to a local musical instruments shop and buying the tickets.</p>
<p>It was still early evening and most of the stores had not shut down yet, so I chose to walk to a nearby emporium I knew to buy some salami for an evening of cheese and wine with my wife. Once that was out of the way, I went on to just walking the rest of the avenue to get the bus back home, which is when I spotted a recently opened<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> flower market and earlier that day my wife had asked me to buy flowers for Saturday, so another item crossed off my list. I was back on my journey to the bus stop, or so I thought, when I saw a hardware store and since I needed to buy a replacement faucet handle for my bathroom, I got this out of the way too, perfect!</p>
<p>I was truly elated, one errand turned into four and I had suddenly efficiently solved tasks that would have required several strolls or car trips on different days, contrary to popular belief that doing things on foot is ineffective. At that point I let go of the idea to catch the bus back home and figured I could just walk the rest of the way.</p>
<figure><img src="/images/2024/11-23_street_walking.png"
    alt="Image of bearded young adult male wearing blue jeans, white shirt and a blazer walking on the sidewalk of a busy city street with plenty of open stores" width="600"><figcaption>
      <p>AI-generated image using ChatGPT and three prompts: &ldquo;Generate an image of a young uncocerned bearded man walking through a street at night where there are several small stores open. Use a caricature-like style&rdquo; then &ldquo;Make it more of a drawing and use stores that look like what you see in Brazil&rdquo; and finally &ldquo;Make the stores have a more urban look&rdquo;. I was not fully satisfied with the end results, but apparently three images make you out of free credits for the next 24 hours</p>
    </figcaption>
</figure>

<p>Many will find this activity mundane, even tedious, but it was important for me: no music, no podcasts on 2x speed, no walking with my phone in hand, I was heading home distracted and feeling good, through activities we barely stop to notice in our rushed routines. I was just living the joy of walking the streets.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Not really, because I didn&rsquo;t like living alone and thus shared an apartment for most of my life: with my brothers, then friends, followed by a brief interim alone to then start sharing it with my wife.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>I understand and acknowledge not to be touching the sensitive subjects of feeling secure on the streets or the privilege of living in a neighborhood with better infrastructure.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>According to my <a href="https://www.last.fm/pt/user/Tupaschoal">last.fm profile</a>.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>It had literally opened the day before.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>The Democracy's Party</title><link>https://tupscal.xyz/blog/2024/10-06-democracy-party/</link><pubDate>Sun, 06 Oct 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/10-06-democracy-party/</guid><description>&lt;hr&gt;
&lt;p&gt;On October 6 of 2024 I was the &amp;ldquo;President of the voting receptor desk&amp;rdquo; (free translation) for the Brazilian municipal elections of 2024. Here as some curious excerpts I heard during the day.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;🕗&amp;ldquo;Ah, my fingerprint won&amp;rsquo;t bite, I was an infantry soldier, my fingers are all scraped&amp;rdquo; - insistent gentleman&lt;/p&gt;
&lt;p&gt;🕘&amp;ldquo;My social security number didn&amp;rsquo;t work? Meu SSN &lt;strong&gt;D-I-D-N-T W-O-R-K&lt;/strong&gt;?&amp;rdquo; - desolate gentleman&lt;/p&gt;
&lt;p&gt;🕙&amp;ldquo;Folks, I&amp;rsquo;ll put my sunglasses on because they&amp;rsquo;re prescription sunglasses, not because I&amp;rsquo;m snooty&amp;rdquo; - concerned madam&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p>On October 6 of 2024 I was the &ldquo;President of the voting receptor desk&rdquo; (free translation) for the Brazilian municipal elections of 2024. Here as some curious excerpts I heard during the day.</p>
<hr>
<p>🕗&ldquo;Ah, my fingerprint won&rsquo;t bite, I was an infantry soldier, my fingers are all scraped&rdquo; - insistent gentleman</p>
<p>🕘&ldquo;My social security number didn&rsquo;t work? Meu SSN <strong>D-I-D-N-T W-O-R-K</strong>?&rdquo; - desolate gentleman</p>
<p>🕙&ldquo;Folks, I&rsquo;ll put my sunglasses on because they&rsquo;re prescription sunglasses, not because I&rsquo;m snooty&rdquo; - concerned madam</p>
<p>🕚&ldquo;My son did one of those things to put the cellphone for me<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, then when I get home I leave my phone there and give attention to him&rdquo; - father of a drama king</p>
<p>🕚&ldquo;What, we vote using the number? I thought it was by name, it&rsquo;s all I&rsquo;ve memorized&rdquo; - lost voter</p>
<p>🕛&ldquo;We don&rsquo;t have to vote, but it&rsquo;s good to, right?&rdquo;<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> - hopeful woman</p>
<p>🕜&ldquo;It&rsquo;s been like 30 years since I last voted&rdquo; - resigned lady</p>
<p>🕜&ldquo;I&rsquo;ll vote NO for the new flag, because I&rsquo;m a c-o-n-s-e-r-v-a-t-i-v-e!&rdquo; - conservative man</p>
<p>🕝(Voter with a &ldquo;Make America Great again&rdquo; cap) - subordinate man</p>
<p>🕞&ldquo;The box is flashing, is it alright&rdquo; - Unaware voter</p>
<p>🕞&ldquo;I&rsquo;m scared he is going to piss himself, stop Thor!&rdquo; - Dog mom</p>
<p>🕟(Voter comes in and leaves his cellphone playing a music while he votes) - Couvert voter</p>
<figure><img src="/images/2024/10-06_urna.jpeg"
    alt="Image showing various Brazil voting machines" width="600"><figcaption>
      <p>Image <a href="https://www.tre-mg.jus.br/comunicacao/noticias/2022/Julho/novo-modelo-de-urna-eletronica-sera-usado-em-68-municipios-mineiros-412111">from TRE-MG website</a></p>
    </figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>A piece of paper to put the cellphone over before getting into the voting cabin.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Actually it is mandatory to vote in Brazil, but it is very easy to get a waiver to dismiss your obligation.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>OpenRCT2's system for patching scenario bugs</title><link>https://tupscal.xyz/blog/2024/08-30-openrct2-patch/</link><pubDate>Fri, 30 Aug 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/08-30-openrct2-patch/</guid><description>&lt;hr&gt;
&lt;p&gt;This article was originally written for the &lt;a href="https://openrct2.io/blog/2024/08/our-system-for-patching-scenario-bugs"&gt;OpenRCT2 blog&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s the year 2000 and I just got home from school. I turn my computer on and sit still staring at the big CRT monitor, while I wait for the three minutes it takes for the PC booting sequence to finish. I open RollerCoaster Tycoon on the &lt;em&gt;Leafy Lakes&lt;/em&gt; scenario, which I had been frantically playing on the day prior, and head to construct the new attraction I had in mind. I have to acquire more of the available land to do so, and I start doing it, until I notice there is a single tile in between all of them that is not purchasable. I freeze in horror and wonder: why 😨?&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p>This article was originally written for the <a href="https://openrct2.io/blog/2024/08/our-system-for-patching-scenario-bugs">OpenRCT2 blog</a></p>
<hr>
<h2 id="introduction">Introduction</h2>
<p>It&rsquo;s the year 2000 and I just got home from school. I turn my computer on and sit still staring at the big CRT monitor, while I wait for the three minutes it takes for the PC booting sequence to finish. I open RollerCoaster Tycoon on the <em>Leafy Lakes</em> scenario, which I had been frantically playing on the day prior, and head to construct the new attraction I had in mind. I have to acquire more of the available land to do so, and I start doing it, until I notice there is a single tile in between all of them that is not purchasable. I freeze in horror and wonder: why 😨?</p>
<figure><img src="/images/2024/08-30-missing-openrct-tile.png"
    alt="Screenshot of the RollerCoaster Tycoon&#39;s Leafy Lakes scenario showing a park with a single tile of unowned land in between the purchased ones." width="600">
</figure>

<p>The original RollerCoaster Tycoon games had some scenario configuration bugs and among them the land ownership was the most disruptive: land or construction rights that should be purchasable or available not being. Not that I was ever experienced enough to notice, so much so that the short story above is purely fictional, but that understandably did bother some people, who eventually made sure to patch these scenarios when loaded into OpenRCT2, and that&rsquo;s where this story really begins.</p>
<h2 id="openrct2-scenario-patches-to-the-rescue">OpenRCT2 Scenario Patches to the rescue!</h2>
<p>There were patches for the vanilla scenarios making their way through the OpenRCT2 code as early as <a href="https://github.com/OpenRCT2/OpenRCT2/commit/bd68624c92a3279f5c8934e6fc0818aa216ed50e">OpenRCT2 v0.0.6</a>, 8 years ago, and over the years they kept appearing whenever a sharp pair of eyes from one of our players spotted them and decided to make things right<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. Most of these changes were functional, like fixing the above missing available land on <em>Leafy Lakes</em> or swapping the entrance and exit of the <em>Urban Park&rsquo;s</em> Merry-Go-Round, but there were some cosmetic ones too and they were starting to make the code look really messy<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. Nevertheless the system was working for years on end, and it sounded like nothing would change, which is when the pull request <a href="https://github.com/OpenRCT2/OpenRCT2/pull/19740">#19740</a> dropped.</p>
<p>That PR alone was adding over 200 lines of code, mostly to fix the water height of lake shores that were not properly set (and thus didn&rsquo;t look like a proper body of water settling at uniform height). It was great and meticulous work done by <a href="https://github.com/HtotheTML">@HtotheTML</a>, but we were afraid of growing our patching monster even more, thus we decided that we needed to either introduce a new way to patch the scenarios or we wouldn&rsquo;t be taking any more individual tile fixes, as it was becoming difficult to maintain. That was the end of the story for another 4 months or so, until I decided to flex my fingers and give this challenge a go.</p>
<h2 id="the-birth-of-parkpatch-files">The birth of <code>.parkpatch</code> files</h2>
<p>The main goal of creating a new patch system for the scenarios in OpenRCT2 was to take the ugly and verbose code away from the importers and just have generic code that was able to deal with patch files. That was not the only objective, though, we also wanted to make it easier for people to contribute fixes, since any player can spot for errors and it shouldn&rsquo;t take mad programming skills to be able to patch them<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. With that in mind, we settled for storing each scenario patch on a different <code>JSON</code> file, and this is how it looks like for one of them<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>, <em>Urban Park</em>:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">    <span class="nt">&#34;scenario_name&#34;</span><span class="p">:</span> <span class="s2">&#34;Urban Park&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="nt">&#34;sha256&#34;</span><span class="p">:</span> <span class="s2">&#34;835ec8bdba3dc4086906126907c022cf42fa0f9cd6ee06221f36aac526ac4ec4&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="nt">&#34;land_ownership&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">        <span class="nt">&#34;available&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">            <span class="nt">&#34;coordinates&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">                <span class="p">[</span> <span class="mi">34</span><span class="p">,</span> <span class="mi">60</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">34</span><span class="p">,</span> <span class="mi">61</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">35</span><span class="p">,</span> <span class="mi">60</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">35</span><span class="p">,</span> <span class="mi">61</span> <span class="p">],</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">                <span class="p">[</span> <span class="mi">48</span><span class="p">,</span> <span class="mi">19</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">48</span><span class="p">,</span> <span class="mi">20</span> <span class="p">],</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">                <span class="p">[</span> <span class="mi">52</span><span class="p">,</span> <span class="mi">15</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">53</span><span class="p">,</span> <span class="mi">15</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">54</span><span class="p">,</span> <span class="mi">15</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">15</span> <span class="p">],</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">                <span class="p">[</span> <span class="mi">52</span><span class="p">,</span> <span class="mi">16</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">53</span><span class="p">,</span> <span class="mi">16</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">54</span><span class="p">,</span> <span class="mi">16</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">55</span><span class="p">,</span> <span class="mi">16</span> <span class="p">],</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">                <span class="p">[</span> <span class="mi">52</span><span class="p">,</span> <span class="mi">17</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">52</span><span class="p">,</span> <span class="mi">18</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">52</span><span class="p">,</span> <span class="mi">19</span> <span class="p">],</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">                <span class="p">[</span> <span class="mi">64</span><span class="p">,</span> <span class="mi">77</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">61</span><span class="p">,</span> <span class="mi">66</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">61</span><span class="p">,</span> <span class="mi">67</span> <span class="p">],</span> <span class="p">[</span> <span class="mi">39</span><span class="p">,</span> <span class="mi">20</span> <span class="p">]</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">            <span class="p">]</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">        <span class="nt">&#34;construction_rights_available&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">            <span class="nt">&#34;coordinates&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">                <span class="p">[</span> <span class="mi">46</span><span class="p">,</span> <span class="mi">47</span> <span class="p">]</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">            <span class="p">]</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">    <span class="nt">&#34;rides&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">            <span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">            <span class="nt">&#34;operation&#34;</span><span class="p">:</span> <span class="s2">&#34;swap_entrance_exit&#34;</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><p>It might not look less verbose, but remember that all of this was pulled out of the code and is now a collection of individual files. Let&rsquo;s walk through each <code>JSON</code> key we currently support and explain their intent.</p>
<ol>
<li>
<p><code>scenario_name</code> : Purely to make the <code>.parkpatch</code> easily identifiable by humans, serves no purpose during the game<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>.</p>
</li>
<li>
<p><code>sha256</code>: The <a href="https://en.wikipedia.org/wiki/Hash_function">hash</a> of the scenario file using <a href="https://en.wikipedia.org/wiki/SHA-2">SHA256</a>.
The old patch system was error prone, it relied on a combination of a scenario&rsquo;s internal metadata and its filename to find the patch for a given park, since some scenarios had &ldquo;copy + paste&rdquo; misconfigurations and were all internally set as the same &ldquo;<em>Six Flags Magic Mountain</em>&rdquo;.
Using the hash gives us a unified way of identifying a scenario and its corresponding patch, which simplifies the code by swapping a lengthy series of <code>if...else if</code> string comparisons with a simple file hashing followed by checking if <code>&lt;hash&gt;.parkpatch</code> exists<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>.</p>
</li>
<li>
<p><code>land_ownership</code>: Allows one to control whether a tile should be:</p>
<ul>
<li><strong>unowned</strong>: not part of the park and not purchasable in any way.</li>
<li><strong>owned</strong>: already part of the park.</li>
<li><strong>construction rights owned</strong>: Allows player to build above/under the land, but not on the land itself or to modify the land.</li>
<li><strong>available to buy</strong>: can be purchased for full control.</li>
<li><strong>construction rights available to buy</strong>: can be purchased as construction rights.</li>
</ul>
<p>Most of the scenarios covered in the old patch system were only there to fix land ownership, so this was the bulk of the migration. There were interesting cases of scenarios that were partially fixed on their RCTC versions, such as <em>Katie&rsquo;s Dreamland</em>, which favoured our model of one patch per scenario, since despite being the same park, they needed different mending.</p>
</li>
<li>
<p><code>water</code>: Allows changing the water height of a given tile, given that it sometimes just didn&rsquo;t look right, as depicted on the screenshot below.</p>
</li>
<li>
<p><code>operations</code>: Lets track tiles be fixed, such as to fix <em>Ayers Adventure</em>&rsquo;s &ldquo;Splashster&rdquo; not ever going past the first descent due to a misplaced water channel.</p>
</li>
<li>
<p><code>rides</code>: Enables operating on rides themselves, such as to swap the aforementioned entrance and exit of <em>Urban Park&rsquo;s</em> Merry-Go-Round.</p>
</li>
</ol>
<figure><img src="/images/2024/08-30-weird-openrct-water.png"
    alt="Screenshot of the RollerCoaster Tycoon2&#39;s *Six Flags Holland* scenario showing a tile where the water uncannily does not rest leveled with the land shore." width="600">
</figure>

<p>It might seem we had everything planned from the beginning so it would be a straight forward and quick series of patches to get to the final form, but I assure you it was not. It took me around <a href="https://github.com/OpenRCT2/OpenRCT2/pull/21189/commits">2 months and 30 commits</a> to get everything working as expected and a whole semester to get it merged, as our team and community helped me with input and cautious reviews to not break anything in the process. I won&rsquo;t dive into the details of the patch algorithm itself, because <code>JSON</code> handling is not very exciting, but you are welcome to <a href="https://github.com/OpenRCT2/OpenRCT2/blob/develop/src/openrct2/rct12/ScenarioPatcher.cpp">take a look</a>!</p>
<h2 id="the-future-of-parkpatch">The future of <code>.parkpatch</code></h2>
<p>Along the way of porting these patches to the <code>JSON</code> files, I noticed there was room for improvement in the code, some of which I did already, others which could be improved later, to not drag the pull request forever. Here are a few ideas, in case anyone wants to have a go at them, keep in mind the ones not tracked by issues should be discussed first with the team:</p>
<ul>
<li><strong><a href="https://github.com/OpenRCT2/OpenRCT2/issues/22596">#21189</a></strong>: Only apply patches when starting scenarios, this will simplify the <code>JSON</code> and the loading process.</li>
<li><strong><a href="https://github.com/OpenRCT2/OpenRCT2/issues/22598">#22598</a></strong>: Double check patches for RCTC scenarios against the original RCT1 and RCT2 ones, to make sure they are patched only where needed<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>.</li>
<li><strong><a href="https://github.com/OpenRCT2/OpenRCT2/issues/22653">#22653</a>, <a href="https://github.com/OpenRCT2/OpenRCT2/issues/22654">#22654</a>, <a href="https://github.com/OpenRCT2/OpenRCT2/issues/22655">#22655</a></strong>: Finish what drove all of this refactoring and apply the fixes originally proposed on <a href="https://github.com/OpenRCT2/OpenRCT2/pull/19740">#19740</a>.</li>
<li><strong>Move <code>.parkpatch</code> files to another repository</strong>: We don&rsquo;t store most of the other collections of OpenRCT2 &ldquo;binary&rdquo; files in the main repository (i.e. <a href="https://github.com/OpenRCT2/objects">objects</a>, <a href="https://github.com/OpenRCT2/title-sequences">title sequences</a>, <a href="https://github.com/OpenRCT2/OpenMusic">music</a>, and so on), to this extent we probably shouldn&rsquo;t for the patches either.</li>
<li><strong>Use a <code>JSON</code> schema</strong>: The patch algorithm has plenty of guards to check against invalid keys, empty lists and other nuisances. We could instead just write a <code>JSON</code> schema that could be used to validate each <code>.parkpatch</code> file on a CI environment. It would serve as a self-documenting file, as well as a gating process to push new patches, which would then allow for the code to be simpler as the <code>JSON</code> files would be valid by construction.</li>
<li><strong>Introduce new patches</strong>: Since we are not so afraid of adding more fixes now, new patches can be submitted, including for scenarios we couldn&rsquo;t support in the old system, like ones on the <a href="https://github.com/OpenRCT2/OpenRCT2/issues/20095">UCES set</a>.</li>
<li><strong>Allow coordinates to be specified as a range</strong>: The <code>.parkpatch</code> coordinates are provided on a per tile base, but if we have a contiguous sequence, we could just provide a range where it could iterate, so we would be able to simplify things like <code>[ 34, 60 ], [ 34, 61 ], [ 35, 60 ], [ 35, 61 ]</code> to <code>[[34, 60], [35, 61]]</code><sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>.</li>
<li><strong>Actually document the syntax</strong>: The <code>.parkpatch</code> files are in, but there is not a great documentation on how to write them, aside from actually reading them, so it hasn&rsquo;t become a lot friendlier like I claimed.</li>
<li><strong>Create a plugin that generates a patch file</strong>: What if you could load a scenario and inspect it with a plugin, marking places that need patching and what they need to be patched for, and then have the plugin spit a <code>JSON</code> ready to be pushed? It&rsquo;s crazy, but it also could be neat :D</li>
</ul>
<h2 id="wrapping-up">Wrapping-up</h2>
<p>Starting on v0.4.14 your OpenRCT2 will be patching files in a different way, but our goal is for you not to notice it at all! The way it was designed, you might see upcoming changelog entries boasting a lot more claims of fixed scenarios and we hope this encourages some of you to contribute and that it makes it for an even funnier experience for the whole community 🥳.</p>
<p>Happy patching!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I&rsquo;ll leave as an exercise to the reader to define whether this effort was: led by anger of finding a tile not configured as it should, OCD to have things symmetric/aligned or heroism.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://github.com/OpenRCT2/OpenRCT2/blob/47800cddcf538f74e47d37ec809f30f022f0d158/src/openrct2/rct2/S6Importer.cpp#L536-L1155">This is what it looked like</a> to patch RCT2 scenario&rsquo;s ownership, 600 lines!&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Still not a walk in the park due to the hashes, but it does look friendlier.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Please don&rsquo;t mind the inconsistent choice of square brackets and curly braces.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Actually it is used for printing debug messages, but that&rsquo;s a minor developer detail.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>We use just the first 7 characters of the SHA sequence for the filename, to prevent them getting too long, but we double check that the full sequence matches once we find and open the file. Collisions are very unlikely, nevertheless it doesn&rsquo;t hurt to play safe, right?&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>I&rsquo;m actually doing this myself and have developed a plugin to help, more on that on an upcoming post!&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>I know it might not look a lot simpler in this example, but imagine you have a rectangle of 20 coordinates and instead of listing them all you just list the start and end of the rectangle, 2 coordinates. It&rsquo;s a big simplification on the JSON, at some cost of complexity in the C++ itself.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Reimagining the 2024 Olympics Medal Table</title><link>https://tupscal.xyz/blog/2024/08-16-reimagined-olympics-medal-table/</link><pubDate>Fri, 16 Aug 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/08-16-reimagined-olympics-medal-table/</guid><description>&lt;p&gt;The Paris 2024 Olympics ended less than a week ago and I&amp;rsquo;m mourning it while I wait for the Paralympics to begin&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. Like my fellow compatriots, I was rooting for Brazil to get as many medals as possible, and we were slowly snatching them but it took us a while to get the first gold 🥇, so we were lagging at the infamous medal table, which made me wonder:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What is the importance of the medal table, anyway?&lt;/p&gt;</description><content:encoded><![CDATA[<p>The Paris 2024 Olympics ended less than a week ago and I&rsquo;m mourning it while I wait for the Paralympics to begin<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.  Like my fellow compatriots, I was rooting for Brazil to get as many medals as possible, and we were slowly snatching them but it took us a while to get the first gold 🥇, so we were lagging at the infamous medal table, which made me wonder:</p>
<blockquote>
<p>What is the importance of the medal table, anyway?</p>
</blockquote>
<p>Of course I might have only questioned this because the position we were in felt uncomfortable: seeing Brazil with a few 🥈🥉 medals behind others that had a single gold 🥇. I know there is some soft power involved and in the end nothing is more thematic than competing in the medal table too, given we were already competing at everything else, but it still sounded weird.</p>
<p>I think there is room to debate the usefulness of the medal table ranking, one that requires a lot more development than I have time to<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, but in the meantime it also sparked an <del>innovative</del> idea<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> in my head: what if I simulated the medal table rankings using other metrics? Certainly there is one which is fairer than another, or at least it will give me fun insights.</p>
<p>When I set off to do it, I started listing what most people would think about, before figuring out several people had already done plenty of them before <sup id="fnref1:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. I stuck to them, but also came up with new ones I hadn&rsquo;t seen, morphing my initial objective from &ldquo;seeing different medal tables&rdquo; to &ldquo;seeing how close to the top I could make Brazil stand&rdquo;. Here are the statistics I picked:</p>
<ul>
<li><strong>Total medal count</strong>: Simple, just summing up the three types of medal 🥇🥈🥉. It was also important as a base number for the other metrics.</li>
<li><strong>Weighed medal count</strong>: I get that gold should be more valuable than a silver, but at the same time if a country has 3 gold it sounded unfair to me to rank it higher than a country that potentially had 10 silver and 10 bronze. I initially went for the 🥇* 3 + 🥈 * 2 + 🥉, but was convinced by <a href="https://archive.nytimes.com/beijing2008.blogs.nytimes.com/2008/08/23/the-medal-rankings-which-country-leads-the-olympics/">NYT</a> to change the golden medal weight to 4, to give them some more special meaning of accomplishment.</li>
<li><strong>By delegation size</strong>: I wanted to see how efficient each country delegation was, after all, if a given country sends 10 athletes and all of them bring a medal back home, it seems a lot more successful than a country that sends 100 athletes and get the same 10 medals. Initially I wanted to rank them by &ldquo;delegation potential&rdquo;, which is to measure the potential number of medals a delegation could amass, given that in some sports like gymnastics and swimming a single athlete can win multiple medals. That seemed like it would take forever, so I used just the delegation size.</li>
<li><strong>By GDP</strong>: With reasoning similar to the above, I wanted to see how efficient a country was in &ldquo;converting GDP&rdquo; into medals. Here a similar more granular idea came, when discussing a friend of mine<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>: ranking the medal table by the percentage of their GDP invested into sports, but again this was too cumbersome to obtain.</li>
<li><strong>By Size</strong>: How efficient at getting medals given the country size?</li>
<li><strong>By Population</strong>: How efficient at getting medals given the country population?</li>
<li><strong>HDI</strong>: How does a higher Human Development Index (HDI) correlate to attaining more medals.</li>
<li><strong>By Golf Courses</strong>: I know, this does not make any sense whatsoever, but it was the statistic I thought could make Brazil fare the best. Unluckily for me Uzbekistan had only a <a href="https://worldpopulationreview.com/country-rankings/golf-popularity-by-country">single registered golf course up to 2021</a>!</li>
</ul>
<p>Without further ado, here are the different rankings I could come up to reorganize the top 20 countries at the Olympics 2024 medal table.</p>
<figure><img src="/images/2024/08-16-medal-table-en.png"
    alt="Medal table showing the top 20 countries reorganized by the different metrics stated above"><figcaption>
      <p>Kudos to <a href="https://dev.to/oscarleo/how-to-create-eye-catching-country-rankings-using-python-and-matplotlib-58g9">OscarLeo</a>&rsquo;s tutorial on charts with flags and <a href="https://github.com/lipis/flag-icons">lipis&rsquo; flag icons</a></p>
    </figcaption>
</figure>

<p>Turns out I got carried away and used way too many metrics, which left the chart almost unreadable. Here&rsquo;s the rankings in &ldquo;tabular format&rdquo;<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> for accessibility:</p>





<pre tabindex="0"><code>           Country Total  Weighed  Size   HDI  Delegation  Population   GDP  Golf Courses

0              USA     1        1    16     1           3          14    20            20
1            China     2        2    17     2           2          20    19             5
2            Japan     6        6     6     6          11          16    16            18
3        Australia     5        5    18     5           8           3     6            13
4           France     4        3     8     4          10           9     7             8
5      Netherlands     8        7     1     8           7           4     5             7
6    Great Britain     3        4     3     3           4           8     8            15
7      South Korea    10       10     2    10           1          12    10            11
8          Germany     9        9     9     9          16          13    18            14
9            Italy     7        8     5     7          12          10     9             6
10     New Zealand    13       12    10    12          13           1     4             9
11          Canada    11       11    19    11          15          11    15            19
12      Uzbekistan    16       14    12    17           6          17     1             1
13         Hungary    14       13     4    14           9           2     2             2
14           Spain    15       15    11    13          20          15    14            12
15          Sweden    17       17    13    16          14           7    11            17
16           Kenya    18       18    15    20           5          18     3             3
17          Norway    19       19    14    18          17           5    12            10
18         Ireland    20       20     7    19          19           6    13            16
19          Brazil    12       16    20    15          18          19    17             4</code></pre><p>If you want, here&rsquo;s the <a href="https://gist.github.com/tupaschoal/0dce5b338a6ad9a2463c62a09a51d9a9">source data and my messy code</a>. It was fun to see how New Zealand has great results even though it is not among the biggest in many metrics. I couldn&rsquo;t get Brazil further than fourth position, do you think I could have done it with any other metric? Let me know, because it seems for now I&rsquo;ll just have to root harder for our athletes.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I was very hooked this time, and tried keeping track of as many sports as possible through the free coverage done by <a href="https://www.youtube.com/cazetv">CazeTV</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Specially because there is the whole debate of accusing the USA to always pick the best &ldquo;metric&rdquo; to put them on top. I will not fall for this bait, or at least not today 😂&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Turns out it was not innovative at all: <a href="https://www.medalspercapita.com/">Medals per capita</a>, <a href="https://archive.nytimes.com/beijing2008.blogs.nytimes.com/2008/08/23/the-medal-rankings-which-country-leads-the-olympics/">New York Times&rsquo; Medal Points</a>, and so on.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Yes Breno, that would be you.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>I was lazy and didn&rsquo;t convert it to an actual table for the blog, nor fixed the indexing to start at 1.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Lost in Translation: the overuse of English</title><link>https://tupscal.xyz/blog/2024/07-31-lost-in-translation/</link><pubDate>Wed, 31 Jul 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/07-31-lost-in-translation/</guid><description>&lt;p&gt;When I was in my early twenties&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, halfway through my university journey, I would often hear phrases such as:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is no need to translate this from English, every aspiring engineer should learn it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you translate this, then people will have a harder time when searching about it on the internet.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I won&amp;rsquo;t dive into why people would say this, but at the time it was hard to disagree: multiple job postings required English and for things such as programming languages, searching for the keywords in English really did yield better results more often. What ended up happening is that over time we kept incorporating more and more of those words into our vocabulary and language and even despised the usage of the translated terms, which led us to this:&lt;/p&gt;</description><content:encoded><![CDATA[<p>When I was in my early twenties<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, halfway through my university journey, I would often hear phrases such as:</p>
<blockquote>
<p>There is no need to translate this from English, every aspiring engineer should learn it.</p>
</blockquote>
<p>or</p>
<blockquote>
<p>If you translate this, then people will have a harder time when searching about it on the internet.</p>
</blockquote>
<p>I won&rsquo;t dive into why people would say this, but at the time it was hard to disagree: multiple job postings required English and for things such as programming languages, searching for the keywords in English really did yield better results more often. What ended up happening is that over time we kept incorporating more and more of those words into our vocabulary and language and even despised the usage of the translated terms, which led us to this:</p>
<figure><img src="/images/2024/07-31-mergeado.jpg"
    alt="Screen capture of the GitHub Android app showing a merged pull request" width="500px">
</figure>

<p>This is a screenshot of the GitHub app on my phone, where I was viewing some changes I had made in the OpenRCT2 project<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. You can see that the app itself is set to Portuguese, but if you squint (or just skip to the big red arrows I put there), you can notice there are plenty of &ldquo;English&rdquo; words thrown in <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. One of them is a proper English verb, <em>commit</em>, but the other is not, <em>mergeado</em> (and not Portuguese either). These are not the only occurrences, here is a small compilation of weird translations I found on the app:</p>
<table>
  <thead>
      <tr>
          <th>Original word</th>
          <th>Portuguese &ldquo;Translation&rdquo;</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>merged</td>
          <td>mergeado</td>
      </tr>
      <tr>
          <td>commit</td>
          <td><em>commit</em></td>
      </tr>
      <tr>
          <td>pull requests</td>
          <td>solicitações de <em>pull</em></td>
      </tr>
      <tr>
          <td>issues</td>
          <td><em>issues</em></td>
      </tr>
      <tr>
          <td>push notification types</td>
          <td>configurar notificações <em>push</em></td>
      </tr>
      <tr>
          <td>deployment review</td>
          <td>revisão de <em>deploy</em></td>
      </tr>
      <tr>
          <td>pull request review</td>
          <td>revisão de <em>pull request</em></td>
      </tr>
      <tr>
          <td>workflow runs</td>
          <td><em>workflow</em> roda</td>
      </tr>
  </tbody>
</table>
<p>I don&rsquo;t want to pick on GitHub, after all <a href="https://tupscal.xyz/blog/2020-05-13-ted-burnout/">translating is <strong>hard</strong></a> and the fact that they are localising most of the app can help in getting it usable by more people, but then who does it help to get a mix of English, <em>Porglish</em> and Portuguese? Especially when the word is meaningful and would help you understand what you are doing, such as the <em>merge</em> keyword on the git workflow.</p>
<figure><img src="/images/2024/07-31_lost_translation.png"
    alt="Person in adventurer-like clothes looking at some ruins with logographic writing and scratching their head trying to understand it"><figcaption>
      <p>Drawing kindly made by my friend Hamilton</p>
    </figcaption>
</figure>

<p>That leads me to think on how we got to this point: are we brazilians to blame for wanting to stick to the &ldquo;original&rdquo; foreign terms for too long? Do we then suffer from not being able to translate them anymore because people will feel cringe 🫥? The Spanish translation surely didn&rsquo;t care <sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>, but who knows if their speakers like it or not and whether it was an organic movement in favor of the translations or not.</p>
<p>It&rsquo;s not an exclusive phenomenon of the programming world, we can see several business environments where people have been overusing English for words, even when we have clear and even simpler translations for them <sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, as well as the countless store names in foreign languages to look fancier. To me it seems we are taking it too far.</p>
<p>I think it&rsquo;s time to break free in favor of not losing our cultural identity, to prevent the world population from becoming even more homogeneous. Or maybe not, some might say that people now have somewhat easy access to machine translation of texts and conversations, especially with AI, and that they should just say however they like and let the computer handle it. In the meantime I&rsquo;ll be doing my best to find suitable translations for those terms.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Trust me, it hurt to write this statement 🧓&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://openrct2.io/">OpenRCT2</a> is a project to recreate the infamous <a href="https://en.wikipedia.org/wiki/RollerCoaster_Tycoon_2">Roller Coaster Tycoon</a> game fully in the open source world. I&rsquo;m currently one of the maintainers and have been a contributor there since 2019, with varying degrees of activity.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Ignore the description I put there in English, after all that is the only language I can communicate with the team!&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Here&rsquo;s the table extended to show how it looks in Spanish. I think most of their equivalents in Portuguese would sound great:</p>
<table>
  <thead>
      <tr>
          <th>Original word</th>
          <th>Portuguese &ldquo;Translation&rdquo;</th>
          <th>Spanish Translation</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>merged</td>
          <td>mergeado</td>
          <td>fusionado</td>
      </tr>
      <tr>
          <td>commit</td>
          <td><em>commit</em></td>
          <td>confirmaciones</td>
      </tr>
      <tr>
          <td>pull requests</td>
          <td>solicitações de <em>pull</em></td>
          <td>solicitudes de cambios</td>
      </tr>
      <tr>
          <td>issues</td>
          <td><em>issues</em></td>
          <td>propuestas</td>
      </tr>
      <tr>
          <td>push notification types</td>
          <td>configurar notificações <em>push</em></td>
          <td>tipos de notificaciones <em>Push</em></td>
      </tr>
      <tr>
          <td>deployment review</td>
          <td>revisão de <em>deploy</em></td>
          <td>revisión de Despliegue</td>
      </tr>
      <tr>
          <td>pull request review</td>
          <td>revisão de <em>pull request</em></td>
          <td>revisión de solicitud de cambios</td>
      </tr>
      <tr>
          <td>workflow runs</td>
          <td><em>workflow</em> roda</td>
          <td>ejecuciones de flujo de trabajo</td>
      </tr>
  </tbody>
</table>
&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></li>
<li id="fn:5">
<p>I won&rsquo;t be a hypocrite, I myself say it sometimes. I think it is particularly hard to avoid when everyone around us is doing it and when you work in a company that does require frequent communication in English, but I&rsquo;m trying my best not to do it.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Scraping gender distribution data on Skoob</title><link>https://tupscal.xyz/blog/2024/06-30-scraping-gender-skoob/</link><pubDate>Sun, 30 Jun 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/06-30-scraping-gender-skoob/</guid><description>&lt;p&gt;About a month ago I &lt;a href="https://tupscal.xyz/blog/2024-05-31-female-readers/"&gt;published a data analysis article&lt;/a&gt; with the demographics of all the books I have read, and today I&amp;rsquo;ll dive deeper into how that was accomplished!&lt;/p&gt;
&lt;h2 id="searching-for-an-existing-api"&gt;Searching for an existing API&lt;/h2&gt;
&lt;p&gt;When I noticed that every &lt;a href="https://skoob.com.br/"&gt;Skoob&lt;/a&gt; book page had the distribution of readers by genres, I immediately knew I had to mine it to see it correlated to my reading activity. The first obvious step was to see whether Skoob had an official public and documented API, but &lt;a href="https://www.skoob.com.br/ajuda/faq/15#13"&gt;it didn&amp;rsquo;t&lt;/a&gt; &lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. My second best alternative would be if someone had already made an unofficial API to use, which is when I found &lt;a href="https://github.com/fsdearruda/skoob-api"&gt;Fernando Arruda&amp;rsquo;s Skoob API&lt;/a&gt;. The project documentation described it could fetch user bookshelves and individual book data, so I thought: &amp;ldquo;it is going to be a walk in the park!&amp;rdquo;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>About a month ago I <a href="https://tupscal.xyz/blog/2024-05-31-female-readers/">published a data analysis article</a> with the demographics of all the books I have read, and today I&rsquo;ll dive deeper into how that was accomplished!</p>
<h2 id="searching-for-an-existing-api">Searching for an existing API</h2>
<p>When I noticed that every <a href="https://skoob.com.br/">Skoob</a> book page had the distribution of readers by genres, I immediately knew I had to mine it to see it correlated to my reading activity. The first obvious step was to see whether Skoob had an official public and documented API, but <a href="https://www.skoob.com.br/ajuda/faq/15#13">it didn&rsquo;t</a> <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. My second best alternative would be if someone had already made an unofficial API to use, which is when I found <a href="https://github.com/fsdearruda/skoob-api">Fernando Arruda&rsquo;s Skoob API</a>. The project documentation described it could fetch user bookshelves and individual book data, so I thought: &ldquo;it is going to be a walk in the park!&rdquo;.</p>
<p>Studying the <a href="https://github.com/fsdearruda/skoob-api/blob/855c6e0125d44899169420d043ffc46e256b23e6/src/%40types/SkoobResponse.d.ts#L1-L32">Book object</a> returned by the API, I noticed it had a lot of data about the book, but not what I wanted (the breakdown of male and female readers), hence I had to dig deeper to see how it was fetching the information. I&rsquo;m not a TypeScript person, thus I was lucky enough to notice that there was one <a href="https://github.com/fsdearruda/skoob-api/issues/2">open issue</a> questioning why the API needed cookies. There I found out that there was sort of a Skoob API that the project was using, but Fernando had already mapped everything it returned into his objects and that wouldn&rsquo;t be my way out.</p>
<h2 id="writing-my-own-script-with-python-requests">Writing my own script with Python Requests</h2>
<p>Half frustrated by not having ready to use code and half excited about having to write my own, I quickly created a Python script and said: &ldquo;time to get my poor Python <a href="https://requests.readthedocs.io/en/latest/"><code>Requests</code></a> knowledge to work!&rdquo;. For the unaware it is a very powerful package that allows you to make <code>get</code> and <code>post</code> requests to a page. It is very versatile and I was very confident that I would be navigating the pages in no time, using something like:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">payload</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;email&#39;</span><span class="p">:</span> <span class="n">email</span><span class="p">,</span> <span class="s1">&#39;password&#39;</span><span class="p">:</span> <span class="n">password</span><span class="p">}</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="n">session</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">Session</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="n">session_request</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&#34;https://www.skoob.com.br/login/&#34;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">payload</span><span class="p">)</span></span></span></code></pre></div><p>I ran the script and got it to work<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> 🥳, now it was just a matter of navigating to the bookshelf to start collecting the book pages and then their data, but I just couldn&rsquo;t make any progress 🫠. I started fiddling around with <em>Chrome DevTools</em> to see the page&rsquo;s HTML and saw it was sprinkled with <code>ng</code> tags, which are used by Angular to build a <strong>dynamic</strong> page<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. This meant that my code would never be able to get the actual page data, since it relied on the fact that upon doing a request, the page returned would have been completely loaded. Here is how <a href="https://gist.github.com/tupaschoal/4f7c3ce3a7b52f1ab2903da8b76f575f">the script looked</a> until I abandoned it.</p>
<figure><img src="/images/2024/06-30_man_programming.png"><figcaption>
      <p>Picture generated with AI using the prompt &ldquo;a bearded man with glasses scratching his head looking at a computer monitor with a piece of code he wrote. He is wearing a t-shirt and a black watch on the left wrist&rdquo; using the <a href="https://hotpot.ai/art-generator">Hotpot AI Art Generator</a></p>
    </figcaption>
</figure>

<h2 id="writing-my-own-script-with-python-selenium">Writing my own script with Python Selenium</h2>
<p>I started googling around to see whether <code>Requests</code> would still be able to accomplish this task and all I got back was &ldquo;use <a href="https://www.selenium.dev/documentation/"><code>Selenium</code></a>&rdquo;. Using it is not so different from <code>Requests</code>, in the sense that you are still doing scattered <code>get</code> calls, but there are three key differences:</p>
<ol>
<li>It has built-in functionalities to wait for a given element to appear on the page before moving on.</li>
<li>Every time you search for its examples on the web your first result will be a code snippet in Java, and it took me a while and several Python exceptions to realize that 🫣.</li>
<li>It actually runs on the foreground: you see the browser pop up and navigate on its own, like if you had recorded a series of steps to be executed automatically, which is somewhat rewarding after you&rsquo;re done coding, despite being slower<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.</li>
</ol>
<p>Point #1 was a game changer, as now I could seek parts of the HTML page that were only there after it finished loading and use those as my checkpoints before retrieving the data, here are a few examples:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># Wait until being redirected to the user home page after logging in</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">WebDriverWait</span><span class="p">(</span><span class="n">driver</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span><span class="o">.</span><span class="n">until</span><span class="p">(</span><span class="n">EC</span><span class="o">.</span><span class="n">presence_of_element_located</span><span class="p">((</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;livro-perfil-status02&#34;</span><span class="p">)))</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="c1"># Wait until first book cover appears, which would mean pagination had been completed</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="n">WebDriverWait</span><span class="p">(</span><span class="n">driver</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span><span class="o">.</span><span class="n">until</span><span class="p">(</span><span class="n">EC</span><span class="o">.</span><span class="n">presence_of_element_located</span><span class="p">((</span><span class="n">By</span><span class="o">.</span><span class="n">CSS_SELECTOR</span><span class="p">,</span> <span class="s2">&#34;.livro-capa&#34;</span><span class="p">)))</span></span></span></code></pre></div><p>Note that it allows one to locate elements using different HTML traits, which was very important for me, as I could not always rely on an element having an ID. This same technique could also be used to find data within the page, once it finished loading, instead of having to manually parse it using regular expressions or similar:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># Construct list of book pages</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">book_links</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">find_elements</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">CSS_SELECTOR</span><span class="p">,</span> <span class="s2">&#34;.livro-capa&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="n">read_book_pages</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="n">elem</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">TAG_NAME</span><span class="p">,</span> <span class="s2">&#34;a&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">get_attribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">elem</span> <span class="ow">in</span> <span class="n">book_links</span><span class="p">])</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"># Find next page button to click</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="n">next_page_button</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">XPATH</span><span class="p">,</span> <span class="s2">&#34;//*[contains(text(), &#39;›&#39;)]&#34;</span><span class="p">)</span></span></span></code></pre></div><p>With that it was just a matter of running the script and waiting for the magic to happen 🪄! There were a lot of bits that could be improved: places I couldn&rsquo;t put a proper wait hook and instead relied on the script &ldquo;sleeping&rdquo;, some hardcoded ids, but I didn&rsquo;t want it to be a fully generic script to share, I just wanted to get my data.</p>
<p>After finishing all the scraping, I started playing around with <a href="https://matplotlib.org/"><code>Matplotlib</code></a> on the same script to plot the histogram and the markdown table I used on the post. For the histogram, it probably would have been faster if I had used Excel or Google Sheets, but I like spending time <del>fighting</del> learning about matplotlib. At this point, since I didn&rsquo;t want to fetch the data over and over while I adjusted the histogram axes, colors and so on, I added some <code>JSON</code> caches of the data into the script, so I could fast-forward the slow part of running <code>Selenium</code><sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>.</p>
<p>The <a href="https://gist.github.com/tupaschoal/625115d65859f9efaf84a8612985cf61">final code is not pretty</a>, but it worked and gave me some very good insights and a fun coding afternoon, I&rsquo;m looking forward to my next opportunity to use <code>Selenium</code> and am glad to have added it to my belt of tools.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>There is no date on that FAQ entry. According to the <a href="https://web.archive.org/web/20160120004953/https://www.skoob.com.br/ajuda/faq/15#13">Internet Archive&rsquo;s Wayback Machine</a> the page used to say &ldquo;We have, but it is not published yet&rdquo; in January 2016, and at some point between May 2022 and December 2023 it changed to &ldquo;We don&rsquo;t, but we&rsquo;re checking if we can have one&rdquo; 🤔.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Not immediately, you know, otherwise it wouldn&rsquo;t have built excitement.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Luckily I had a very brief contact with Angular when we ran the <a href="https://curriculoparaelas.com.br/">Curriculo para Elas</a> project during the COVID-19 pandemic, which helped me realize what it was quickly.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>It has the bonus of getting a puzzled look from your wife as you stare at the screen with a self-driving web browser 🤣.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>The best solution likely would have been to do the scraping and the plotting in different scripts, but I was lazy.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>The secret of the book market? Women</title><link>https://tupscal.xyz/blog/2024/05-31-female-readers/</link><pubDate>Fri, 31 May 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/05-31-female-readers/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;a href="https://tupscal.xyz/blog/2024-06-30-scraping-gender-skoob/"&gt;Click here for part two of this post&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Just last week I went to the 2024 edition of FIQ&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; and since my &lt;a href="https://tupscal.xyz/blog/2024-01-20-adult-books/#fnref:3"&gt;last time there&lt;/a&gt; was great, I was looking forward to &lt;del&gt;buying&lt;/del&gt; appreciating a lot more content this time&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;. I went on the first day of the event with my wife, Letícia, and she bought a few books, making her very first visit to the event count.&lt;/p&gt;
&lt;p&gt;One of the books she bought was a comic called &lt;a href="https://www.goodreads.com/book/show/87100429-normal"&gt;&lt;em&gt;Normal&lt;/em&gt;&lt;/a&gt;, by Helena Cunha, it&amp;rsquo;s a heartwarming story about coming out and trying to be a &amp;ldquo;normal&amp;rdquo; person which I read in just one sitting a few days after the festival. I usually register the books I read on &lt;a href="https://skoob.com.br/"&gt;Skoob&lt;/a&gt; and &lt;a href="https://www.goodreads.com/"&gt;Goodreads&lt;/a&gt;, two communities of book lovers, and when I did it for this one on Skoob, I noticed something interesting: 94% of the readers of &lt;em&gt;Normal&lt;/em&gt; are women&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;. I was shocked because despite it being a story of a young lesbian, which would tend to relate more to other women, I wouldn&amp;rsquo;t expect it to be so uneven!&lt;/p&gt;</description><content:encoded><![CDATA[<hr>
<p><a href="https://tupscal.xyz/blog/2024-06-30-scraping-gender-skoob/">Click here for part two of this post</a></p>
<hr>
<p>Just last week I went to the 2024 edition of FIQ<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> and since my <a href="https://tupscal.xyz/blog/2024-01-20-adult-books/#fnref:3">last time there</a> was great, I was looking forward to <del>buying</del> appreciating a lot more content this time<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. I went on the first day of the event with my wife, Letícia, and she bought a few books, making her very first visit to the event count.</p>
<p>One of the books she bought was a comic called <a href="https://www.goodreads.com/book/show/87100429-normal"><em>Normal</em></a>, by Helena Cunha, it&rsquo;s a heartwarming story about coming out and trying to be a &ldquo;normal&rdquo; person which I read in just one sitting a few days after the festival. I usually register the books I read on <a href="https://skoob.com.br/">Skoob</a> and <a href="https://www.goodreads.com/">Goodreads</a>, two communities of book lovers, and when I did it for this one on Skoob, I noticed something interesting: 94% of the readers of <em>Normal</em> are women<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. I was shocked because despite it being a story of a young lesbian, which would tend to relate more to other women, I wouldn&rsquo;t expect it to be so uneven!</p>
<figure><img src="/images/2024/05-31_women-reading.png"><figcaption>
      <p>Picture generated using the prompt &ldquo;Several people reading books where most of them are women and just one is a man&rdquo; using the <a href="https://hotpot.ai/art-generator">Hotpot AI Art Generator</a> (yes, I know it ignored the man 😶‍🌫️)</p>
    </figcaption>
</figure>

<p>This got me curious about what the distribution looked like on other books I had read, so I opened a few random pages and saw that the readership of most books were dominated by women. I could not stop there, so I decided to do a script<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> to scrape Skoob to fetch all of the information about the books I had read and try to see any correlation between the book authors or genres and their readership.</p>
<p>As I write this, I have registered 229 books as &ldquo;read&rdquo; on Skoob and this is what histograms of the number of books per percentage of female readers look like, for my reading activity:</p>
<figure><img src="/images/2024/05-31-histogram-readers-en.png"
    alt="Three histograms showing the distribution of number of books by the percentage of female readers. The first considering all books, the second only books with 5 readers or more and the third with at least 10 readers.">
</figure>

<p>One might have expected a normal distribution centered at 50%, meaning that the majority of books I have read would have been equally read by men and women. This is <strong>so not</strong> the case here. Here&rsquo;s what we can read from them:</p>
<ol>
<li>Women seem to be a lot more avid readers than men, since the peaks of the histograms are centered at around 70% of female readers<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>.</li>
<li>I&rsquo;m the lone reader of roughly 10% of the books I have ever read, given the big bar on 0% when considering all books<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>.</li>
<li>Apparently there is a case where 100% of the readers are women, even though I am one of them 🤣, hence why I decided to filter books with low readership for the other histograms on the middle and right.</li>
</ol>
<p>This was interesting in itself, and kind of confirmed my earlier observation that women were the majority of the readership, however I still wanted to see how the male/female ratio was for the books I had read, now broken down based on the number of readers. I went through the data I had collected and started getting the book mostly read by men and women demographics at different reader counts, which is shown by the table at the end of this post. Here are a few observations:</p>
<ol>
<li>The books that were mostly read by men were all also written by men.</li>
<li>Men could only be the majority of readers when reader count was at most 11,000.</li>
<li>Since women seem to read a lot more, the books with the majority of women readers change a lot less over the samples than for the men.</li>
<li>Where men were still a majority, most of the books were historical fiction and the bulk of them were related to war or conflicts (<em>Rendezvous with Rama</em> being the exception).</li>
<li>Almost all of Conn Iggulden&rsquo;s <em>Conqueror</em> series appear on the table, save for the book #1, so men seem to love Gengis Khan &ldquo;story&rdquo; more than women<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>.</li>
</ol>
<p>Looking at this data was a very interesting experience, I could have done so much more if there was more <del>time</del> statistics: seeing the breakdown of books I have read by the author gender, comparing the readership in Brazil to the global one, if Goodreads also provided the same information, among others. I just hope some data nerd that works on one of these platforms is out there, accidentally stumbles upon my post and decides to provide more 👀. What would be something you would like to know about your reading habits? Let me know!</p>
<table>
  <thead>
      <tr>
          <th>Minimal #readers</th>
          <th>Mostly read by women</th>
          <th>Mostly read by men</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>10</td>
          <td>94%: Normal - Helena Cunha</td>
          <td>80%: O Buraco da Beatriz - Carlos Cardoso</td>
      </tr>
      <tr>
          <td>100</td>
          <td>94%: Normal - Helena Cunha</td>
          <td>74%: Rendezvous with Rama (Rama #1) - Arthur C. Clarke</td>
      </tr>
      <tr>
          <td>500</td>
          <td>94%: Normal - Helena Cunha</td>
          <td>70%: Conqueror (Conqueror #5) - Conn Iggulden</td>
      </tr>
      <tr>
          <td>980</td>
          <td>94%: Normal - Helena Cunha</td>
          <td>69%: Empire of Silver (Conqueror #4) - Conn Iggulden</td>
      </tr>
      <tr>
          <td>1,000</td>
          <td>94%: Normal - Helena Cunha</td>
          <td>68%: Bones of the Hills (Conqueror #3) - Conn Iggulden</td>
      </tr>
      <tr>
          <td>1,800</td>
          <td>85%: The Handmaid&rsquo;s Tale - Margaret Atwood</td>
          <td>66%: Lords of the Bow (Conqueror #2) - Conn Iggulden</td>
      </tr>
      <tr>
          <td>2,500</td>
          <td>85%: The Handmaid&rsquo;s Tale - Margaret Atwood</td>
          <td>65%: Azincourt - Bernard Cornwell</td>
      </tr>
      <tr>
          <td>10,000</td>
          <td>85%: The Handmaid&rsquo;s Tale - Margaret Atwood</td>
          <td>64%: O Espadachim de Carvão #1 - Affonso Solano</td>
      </tr>
      <tr>
          <td>11,000</td>
          <td>85%: The Handmaid&rsquo;s Tale - Margaret Atwood</td>
          <td>63%: Watchmen - Alan Moore, Dave Gibbons</td>
      </tr>
      <tr>
          <td>12,000</td>
          <td>85%: The Handmaid&rsquo;s Tale - Margaret Atwood</td>
          <td>47%: A Knight of the Seven Kingdoms - George R. R. Martin</td>
      </tr>
      <tr>
          <td>50,000</td>
          <td>85%: The Handmaid&rsquo;s Tale - Margaret Atwood</td>
          <td>43%: The Restaurant at the End of the Universe (The Hitchhiker’s Guide to the Galaxy #2) - Douglas Adams</td>
      </tr>
      <tr>
          <td>100,000</td>
          <td>81%: O Mundo de Sofia - Jostein Gaarder</td>
          <td>40%: The Hitchhiker’s Guide to the Galaxy (The Hitchhiker’s Guide to the Galaxy #1) - Douglas Adams</td>
      </tr>
      <tr>
          <td>250,000</td>
          <td>79%: Harry Potter and the Chamber of Secrets (Harry Potter #2) - J. K. Rowling</td>
          <td>27%: The Da Vinci Code - Dan Brown</td>
      </tr>
      <tr>
          <td>500,000</td>
          <td>79%: Harry Potter and the Chamber of Secrets (Harry Potter #2) - J. K. Rowling</td>
          <td>21%: Harry Potter and the Prisoner of Azkaban (Harry Potter #3) - J. K. Rowling</td>
      </tr>
      <tr>
          <td>750,000</td>
          <td>79%: Harry Potter and the Sorcerer’s Stone (Harry Potter #1) - J. K. Rowling</td>
          <td>21%: Harry Potter and the Sorcerer’s Stone (Harry Potter #1) - J. K. Rowling</td>
      </tr>
  </tbody>
</table>
<hr>
<p>Bonus picture for those who came this far: another AI-generated image using the same prompt, but a different style ahahah</p>
<figure><img src="/images/2024/05-31_women-reading-with-man.png"><figcaption>
      <p>Picture generated using the prompt &ldquo;Several people reading books where most of them are women and just one is a man&rdquo; using the <a href="https://hotpot.ai/art-generator">Hotpot AI Art Generator</a></p>
    </figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>The Belo Horizonte <em>Festival Internacional de Quadrinhos</em> (International Comics Festival), aka <a href="https://en.wikipedia.org/wiki/Festival_Internacional_de_Quadrinhos">FIQ</a>, is a fantastic event to promote local and international comic books, regardless of the author status.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>My bank account can prove that I tried very hard.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Of over 1,000 readers, so it had some statistical significance.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>I chose not to write about the script details here since many of my readers are not programmers, but I will do a follow-up post with just the quirks of accomplishing this task.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Or women are a lot more avid users of Skoob.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>Of course I am not the only person ever to read that book, just the first person to register as such on Skoob, which makes sense, since I have to create the book entry there sometimes.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>I mean, aren&rsquo;t a lot of us his descendants, in some way? 🤡&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>No screen time, just daily life passing by</title><link>https://tupscal.xyz/blog/2024/04-28-screenless-breakfast/</link><pubDate>Sun, 28 Apr 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/04-28-screenless-breakfast/</guid><description>&lt;p&gt;It&amp;rsquo;s a lazy Saturday morning and the weather is gloomy, at best, with clouds all over and a continuous drizzle, but I decide to take a stroll to see a store I found the night before. Not having had my breakfast yet, I plan to find something close to my destination, so I take my phone out and see how to get there before leaving the Wi-Fi, as my mobile network would not be available.&lt;/p&gt;</description><content:encoded><![CDATA[<p>It&rsquo;s a lazy Saturday morning and the weather is gloomy, at best, with clouds all over and a continuous drizzle, but I decide to take a stroll to see a store I found the night before. Not having had my breakfast yet, I plan to find something close to my destination, so I take my phone out and see how to get there before leaving the Wi-Fi, as my mobile network would not be available.</p>
<p>I get to the store&rsquo;s neighborhood and my first impression is that it is an immigrant one, so I take the chance to try and taste something different. I find a small cafe with very few people inside and enter it. A man, whom I&rsquo;ll call <em>Happy Chef</em>, warmly greets me: &ldquo;Good morning sir, table for one? How are you doing this morning?&rdquo;. We do what etiquette tells us to do and proceed to comment about the weather, then he leaves me with the menu, goes behind the counter and start talking to another man, the <em>Easygoing</em>, in a language I&rsquo;m not familiar with, so I get distracted</p>
<p>From what seems to be the toilet, comes a third man, the <em>Friendly Grandpa</em>, walking slowly and taking small pauses for balance. He greets the first two waiters and calls a third one, the <em>Something&rsquo;s Off</em> woman, to hand her a chocolate. She seems very uncomfortable with it, but says &ldquo;you know, this is actually my favorite chocolate, thank you!&rdquo;. He continues with a grim, sits on a table to my right and slowly starts counting his pennies.</p>
<p><em>Easygoing</em> comes back with a breakfast plate and sits by my left, <em>Friendly Grandpa</em> then says: &ldquo;ain&rsquo;t this a beautiful looking breakfast?&rdquo; to which he hears back &ldquo;it is, want a share?&rdquo; and replies &ldquo;no, son, thank you, I had breakfast earlier&rdquo;. <em>Grandpa</em> then hands his pennies to <em>Something&rsquo;s Off</em> and she thanks him and goes behind the counter, looking confused.</p>
<p>While all of this unfolds, I get my breakfast plate, a lot more elaborate and well presented than I would have expected:</p>
<figure><img src="/images/2024/04-28-cafe-life-paas-by.jpg"
    alt="A plate with a bowl of salad, two buns with eggs and filling, a few tomatoes, asparagus, bacon and smoked salmon">
</figure>

<p>I am alone and with no mobile network, so I continue to mind these people&rsquo;s businesses, as I have my meal. <em>Happy Chef</em> comes back with coffee for <em>Friendly Grandpa</em> and also for a third customer which had been lurking in the corner with a pile of notebooks, carefully taking notes. <em>Happy Chef</em> greets him and asks him what he is doing, to which he replies about being an English teacher at a local school currently correcting essays, the waiter replies back &ldquo;are you really? I used to study there not long ago&rdquo; and they proceed to have a short conversation.</p>
<p><em>Friendly Grandpa</em> finishes his coffee, stands up and faces the counter &ldquo;bye <em>Happy Chef</em>, see you tomorrow&hellip; bye <em>Smiler</em>, I hope you are feeling better&rdquo;, she shakes her head sideways, but says she&rsquo;ll be ok, so he leaves.</p>
<p>I see <em>Easygoing</em> is teaching <em>Something&rsquo;s Off</em> how to make espressos and other stuff, and suddenly understand her uncomfortable look: she&rsquo;s new to the job!</p>
<p>I finish my plate and wonder about all these people whom I have observed in the past hour: would I have ever noticed this micro universe had I had my cellphone? I&rsquo;m not in a small coffee in the isolated countryside, but rather in a London neighborhood, it awes me that these people achieved this level of intimacy. I can&rsquo;t help but to leave with a grim on my face, seeing how <em>Friendly Grandpa</em> made his effort to lighten everyone&rsquo;s humor, even mine, but this he&rsquo;ll never know!</p>
]]></content:encoded></item><item><title>Things aren't made to last, but...</title><link>https://tupscal.xyz/blog/2024/04-11-old-useful-things/</link><pubDate>Thu, 11 Apr 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/04-11-old-useful-things/</guid><description>&lt;p&gt;Just the other day I was doing some routine household task when I stopped to think about consumerism &lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. I noticed that every now and then, when you engage in a conversation with someone that has lived a few decades &lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;, you might hear:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Nowadays things aren&amp;rsquo;t built to last anymore, I miss the things made in the past&amp;rdquo; (usually two or more decades ago)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then I looked around me and thought: did they really last longer? I was not sure and I don&amp;rsquo;t want to wage war on the theme of &lt;a href="https://en.m.wikipedia.org/wiki/Planned_obsolescence"&gt;planned obsolescence&lt;/a&gt;, but I caught myself studying my belongings and how some things had been there for a long time. I found it would be a funny post, took note of that and moved on.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Just the other day I was doing some routine household task when I stopped to think about consumerism <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. I noticed that every now and then, when you engage in a conversation with someone that has lived a few decades <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, you might hear:</p>
<blockquote>
<p>&ldquo;Nowadays things aren&rsquo;t built to last anymore, I miss the things made in the past&rdquo; (usually two or more decades ago)</p>
</blockquote>
<p>Then I looked around me and thought: did they really last longer? I was not sure and I don&rsquo;t want to wage war on the theme of <a href="https://en.m.wikipedia.org/wiki/Planned_obsolescence">planned obsolescence</a>, but I caught myself studying my belongings and how some things had been there for a long time. I found it would be a funny post, took note of that and moved on.</p>
<p>Fast forward a few weeks and here am I, at the airport, waiting for my flight to London. As I write this, I stop and realize it will be the first time back there in 10 years, the last time being when I studied in the United Kingdom for a year at the University of Southampton <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. And if that isn&rsquo;t nostalgic enough, I suddenly become aware of my surroundings and have a giggle: ain&rsquo;t a lot of these things traveling with me today from back then?</p>
<figure><img src="/images/2024/04-11-ten-year-items.jpg">
</figure>

<p>I open my phone <sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> and start typing this post. Here&rsquo;s a list of decade-old stuff I have from back then and their traits:</p>
<ul>
<li><em>Wallet</em>: I was obsessed on having a minimalist wallet back then and bought one which had an innovative &ldquo;RFID shielding&rdquo;, meaning no one could stealthily read my cards through the wallet. Contactless payment was far from being a thing in Brazil back then (even in the UK), but it proves itself very useful today where most of my payments are done in such a way.</li>
<li><em>Backpack</em>: That was my first time going overseas and when I got there, I needed a good backpack to travel light and efficiently. Little did I know that in the age of &ldquo;no free hold luggage for international flights&rdquo; I would be using it today.</li>
<li><em>Kindle</em>: a gift for being a very active volunteer on TED <sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, this was responsible for my <a href="https://tupscal.xyz/blog/2024-01-20-adult-books/#fn:1">most active years</a> as a reader in the late 2010s.</li>
<li><em>Beard trimmer</em>: if you know me, you&rsquo;re aware I have a <strong>lot</strong> of facial hair. I bought a beard trimmer back then which I still use. Sure it&rsquo;s meant for the UK outlet plug and 220V (which requires me to use an adaptor and a transformer, respectively), but hey, I used it today before coming to the airport!</li>
<li><em>CamelBak water bottle</em>: Also a gift from TED, when I attended TED Global in 2014. It shows some wear, but I take it to the gym everyday and it was just responsible for me downing 750ml of water before going through the airport security.</li>
<li><em>Power bank</em>: over and over I get cellphones whose batteries insist not to last, and this item has got me covered for so many trips over the last decade, I&rsquo;m amazed it still works, given how people report batteries dying out. Kudos to whichever company Tecknet is or used to be.</li>
</ul>
<p>And the list goes on, laptop, tank tops, wristwatch&hellip; I&rsquo;m not sure I&rsquo;m just one person that takes care of their stuff, if I hold on to them for longer than I should or if insisting in paying a bit more to get something that looks sturdier is paying off!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Probably because once again I had ruined one of the toe thongs of my flip flops.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Two decades is already enough, but the older the better to increase your chances of witnessing this phrase 😂.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I was one among many lucky Brazilians that could study a year abroad in another university via the government program <a href="https://en.m.wikipedia.org/wiki/Ci%C3%AAncia_sem_Fronteiras">Science without Borders</a>.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>it&rsquo;s not a typo, it really is a foldable phone!&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>I had a long history with TED, some of which I&rsquo;ve <a href="https://tupscal.xyz/blog/2020-05-13-ted-burnout/">written about before</a> in my blog&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Fantastic Passwords and Where to Store Them</title><link>https://tupscal.xyz/blog/2024/03-04-fantastic-passwords/</link><pubDate>Mon, 04 Mar 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/03-04-fantastic-passwords/</guid><description>&lt;figure&gt;&lt;img src="https://tupscal.xyz/images/2024/03-04-otp-vaults.jpg"&gt;&lt;figcaption&gt;
 &lt;p&gt;Picture by &lt;a href="https://unsplash.com/pt-br/@mr_alexandre?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Alexandre Lecocq&lt;/a&gt; on &lt;a href="https://unsplash.com/pt-br/fotografias/uma-fileira-de-armarios-de-metal-com-alcas-laranjas-Y192KwqXJmc?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Our lives have grown to become &lt;strong&gt;very&lt;/strong&gt; digital, you can do anything online these days, from the now ubiquitous shopping to casting a vote for the parliament, depending on where you live&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. With the convenience of the online presence, comes the nuisance of having to create logins and passwords everywhere, and they can become quite numerous&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;! Every security specialist will say you should pick different, difficult to guess passwords at each website&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;, but this doesn&amp;rsquo;t scale, and you&amp;rsquo;ll likely not remember them all. Sure you can use password managers, like I do with &lt;a href="https://bitwarden.com/"&gt;Bitwarden&lt;/a&gt; &lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;, or trust that the password alternatives, like &lt;a href="https://www.google.com/account/about/passkeys/"&gt;Google Passkeys&lt;/a&gt;, are here to stay, but that&amp;rsquo;s not what I want to talk about in here, I want to discuss about &lt;strong&gt;One-time Passwords&lt;/strong&gt; (OTPs).&lt;/p&gt;</description><content:encoded><![CDATA[<figure><img src="/images/2024/03-04-otp-vaults.jpg"><figcaption>
      <p>Picture by <a href="https://unsplash.com/pt-br/@mr_alexandre?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Alexandre Lecocq</a> on <a href="https://unsplash.com/pt-br/fotografias/uma-fileira-de-armarios-de-metal-com-alcas-laranjas-Y192KwqXJmc?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></p>
    </figcaption>
</figure>

<p>Our lives have grown to become <strong>very</strong> digital, you can do anything online these days, from the now ubiquitous shopping to casting a vote for the parliament, depending on where you live<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. With the convenience of the online presence, comes the nuisance of having to create logins and passwords everywhere, and they can become quite numerous<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>! Every security specialist will say you should pick different, difficult to guess passwords at each website<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, but this doesn&rsquo;t scale, and you&rsquo;ll likely not remember them all. Sure you can use password managers, like I do with <a href="https://bitwarden.com/">Bitwarden</a> <sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>, or trust that the password alternatives, like <a href="https://www.google.com/account/about/passkeys/">Google Passkeys</a>, are here to stay, but that&rsquo;s not what I want to talk about in here, I want to discuss about <strong>One-time Passwords</strong> (OTPs).</p>
<p>When using a popular service, like Gmail or GitHub, you probably have been prompted every now and then with a reminder of all your security configurations: whether you have two-factor authentication (2FA) enabled, the recovery phone/mail, trusted contacts, and so on. Some of those will also give you an option to download a list of passwords that can only be used once, and their goal is simple: store this somewhere safe, so that if you forget your password or lose your 2FA device, you are not locked away from your account. I downloaded a bunch of those, but then I wondered:</p>
<blockquote>
<p>Where would be safe enough for me to store those keys?</p>
</blockquote>
<p>Bear with me as I overthink this subject and explore many different options:</p>
<ol>
<li><strong>Store them on my wallet</strong>: I used to keep a hand-written card in my wallet, my thought being: &ldquo;the wallet is with me at all times, so I&rsquo;ll be sure to know where the passwords are and, since they are with me, they are safe&rdquo;. Of course this argument doesn&rsquo;t hold itself true for even a full minute, since the first thing that comes to mind to many is that I can be robbed and have both my wallet and phone taken away, and there goes my logins.</li>
<li><strong>Keep them home on a handwritten note</strong>: This sounds ok at first, and is already a better alternative to the wallet, such that if you&rsquo;re robbed while on the street, you still have something to resort to, but at the same time the notes are there for any curious visitor to peruse.</li>
<li><strong>Keep them home stored on your computer</strong>: It offers some more security over the second one, since the computer would be password-protected, but also, what if the computer breaks?</li>
<li><strong>Hand your passwords to a trusted partner/friend</strong>: <strong>Very dangerous</strong>, not because the person might betray you<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, but because they will need to pick a way to store it and how can you be sure it is a good way and they are overthinking like you are?</li>
<li><strong>A combination of the above</strong>: You add redundancy over the passwords being lost, but at the same time they are easier to snatch.</li>
</ol>
<p>Here&rsquo;s how my mind felt after thinking about this for a few minutes:</p>
<blockquote>
<p>AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH</p>
</blockquote>
<p>I still have no definitive answer and am just trusting that whichever option I pick, it will not have to be used anytime soon, if ever. Am I overthinking this? Surely, but so much of our data and important assets are protected by finicky passwords these days, it just feels so fragile. If you&rsquo;ve solved this riddle, let me know, in the meantime I&rsquo;ll put my head in a bucket of ice to cool down.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>If you live in Estonia, you can vote for the parliament through the internet since <a href="https://en.wikipedia.org/wiki/Electronic_voting_in_Estonia">early 00s</a>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>As of this being written, I had over 250 passwords stored onto my Bitwarden Vault.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Of course xkcd has a <a href="https://xkcd.com/936/">great comic about this</a>.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>And I think Bitwarden is of great value for $10 a year.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Maybe I should be considering the difficulty that people would have deciphering my handwriting, which is a security measure on its own.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>What I learned in school and actually needed in life!</title><link>https://tupscal.xyz/blog/2024/02-26-learned-in-school/</link><pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/02-26-learned-in-school/</guid><description>&lt;figure&gt;&lt;img src="https://tupscal.xyz/images/2024/02-26-mirror.jpg"&gt;&lt;figcaption&gt;
 &lt;p&gt;Picture by &lt;a href="https://unsplash.com/pt-br/@rishabhdharmani?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Rishabh Dharmani&lt;/a&gt; on &lt;a href="https://unsplash.com/pt-br/fotografias/homem-em-jaqueta-de-terno-preto-levantando-sua-mao-direita-IvfAs3Qk64M?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I&amp;rsquo;m certain that either you or someone you know has already said the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why am I learning this in school/university? I will never have to use it &amp;lsquo;in real life&amp;rsquo;🙄. &lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;ll be honest, I did not say this frequently, even so life has lately got a way to prove to me this phrase was incorrect, including twice in the course of a single month!&lt;/p&gt;</description><content:encoded><![CDATA[<figure><img src="/images/2024/02-26-mirror.jpg"><figcaption>
      <p>Picture by <a href="https://unsplash.com/pt-br/@rishabhdharmani?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Rishabh Dharmani</a> on <a href="https://unsplash.com/pt-br/fotografias/homem-em-jaqueta-de-terno-preto-levantando-sua-mao-direita-IvfAs3Qk64M?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></p>
    </figcaption>
</figure>

<p>I&rsquo;m certain that either you or someone you know has already said the following:</p>
<blockquote>
<p>Why am I learning this in school/university? I will never have to use it &lsquo;in real life&rsquo;🙄. <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
</blockquote>
<p>I&rsquo;ll be honest, I did not say this frequently, even so life has lately got a way to prove to me this phrase was incorrect, including twice in the course of a single month!</p>
<p>The first of which was very practical: Leticia and I started the year motivated to stop postponing and finish our apartment&rsquo;s decoration, which involved, among other things, buying and installing a full-body mirror. We did not have a lot of suitable places to install it and I was hoping to stick it on the back of the master bedroom door, but then I was wondering:</p>
<blockquote>
<p>How tall does the mirror have to be, and at which height, for us to see our full body?</p>
</blockquote>
<p>It is a simple question with a seemingly easy answer: &ldquo;make the mirror at least your height&rdquo;, but bigger mirrors are harder to install and more expensive, so I set sail to look for the actual answer and, to my surprise, it is a common physics question of high school exams. I was bedazzled, as I probably solved some of these in the past, but couldn&rsquo;t remember a thing about ratio of triangles and light reflection<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. I made the calculations according to the explanation of a video<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> and ordered the mirror. The glazier challenged me that it would be too small to see the full body, but being a man of science<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>, I stood my ground and it worked!</p>
<p>Not long after that, I was working and needed to draw a scatter plot which contained a curve following a decreasing exponential function<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>. I knew it had to connect two given coordinates and I remember that knowledge once lived inside of me, but couldn&rsquo;t get started, so once again a quick web search helped me get going and I was off to the next challenge<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> <sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>.</p>
<p>All of this made me wonder: am I accomplishing these easily because I know what to search and just have to revive the knowledge inside of me, or could I have been totally unaware and just learned this when I needed it? I don&rsquo;t have an answer, but it was amusing to think about it.</p>
<hr>
<p>PS: Let me know if you&rsquo;ve also encountered examples of knowledge you thought would be useless and wasn&rsquo;t, I&rsquo;d be happy to hear!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I actually do not know if this thought is common outside of Brazil, but it is a given here. Maybe it stems from an aversion to school?&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Sorry to disappoint you, Pierre.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>As many of the videos explaining school subjects this day, it was from an Indian teacher. Thank you, folks!&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>And a very stubborn one.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>If you&rsquo;re very confused by this sentence, think of a graph with multiple unconnected dots and then a curve that starts with a high value and then rapidly decreases to a small one.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>I actually spent some time tuning the constants to get the shape of the function right where I wanted, but it was fun!&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>The graph turned out very pretty, because I had chosen to do it using <a href="https://matplotlib.org/">matplotlib</a>, though it had zero need for mathematical precision and I could have gotten away drawing it in PowerPoint 🤐.&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Hey, do you also read adult content?</title><link>https://tupscal.xyz/blog/2024/01-20-adult-books/</link><pubDate>Sat, 20 Jan 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/01-20-adult-books/</guid><description>&lt;p&gt;Every time someone asks me if I like to read books, I reply:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I do, but it depends🤔. Sometimes I get excited and read dozens a year, but I can also have years go by without reading a single one&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Curiously, all the times my reading interest was rekindled it was due to experimenting a different genre or medium, for example:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In 2010, I fell in love with historical novels with the excellent &lt;a href="https://www.goodreads.com/book/show/1265656"&gt;&amp;ldquo;Wolf of the Plains&amp;rdquo;&lt;/a&gt; by Conn Iggulden;&lt;/li&gt;
&lt;li&gt;As for 2015, I moved to science fiction with &lt;a href="https://www.goodreads.com/book/show/18007564"&gt;&amp;ldquo;The Martian&amp;rdquo;&lt;/a&gt; by Andy Weir;&lt;/li&gt;
&lt;li&gt;In 2018 I gave biographies a shot through &lt;a href="https://www.goodreads.com/book/show/23705512"&gt;&amp;ldquo;You&amp;rsquo;re Never Weird on the Internet&amp;rdquo;&lt;/a&gt; by Felicia Day&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;;&lt;/li&gt;
&lt;li&gt;Finally, in 2022 I got to &amp;ldquo;adult comics&amp;rdquo;, after paying a visit to FIQ&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;&lt;img src="https://tupscal.xyz/images/2024/01-20-adult-book-censored-en.jpeg"
 alt="A book with an abstract drawing of the body of a nude person with explicit parts censored" height="400"&gt;
&lt;/figure&gt;

&lt;p&gt;I love saying the expression &amp;ldquo;adult comics&amp;rdquo;, because the first thing that many people will think about is that I&amp;rsquo;m reading something with pornographic content 🔞&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt; and very few will actually consider that it might be a story with serious, even factual, content with the drawings as a medium.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Every time someone asks me if I like to read books, I reply:</p>
<blockquote>
<p>I do, but it depends🤔. Sometimes I get excited and read dozens a year, but I can also have years go by without reading a single one<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
</blockquote>
<p>Curiously, all the times my reading interest was rekindled it was due to experimenting a different genre or medium, for example:</p>
<ol>
<li>In 2010, I fell in love with historical novels with the excellent <a href="https://www.goodreads.com/book/show/1265656">&ldquo;Wolf of the Plains&rdquo;</a> by Conn Iggulden;</li>
<li>As for 2015, I moved to science fiction with <a href="https://www.goodreads.com/book/show/18007564">&ldquo;The Martian&rdquo;</a> by Andy Weir;</li>
<li>In 2018 I gave biographies a shot through <a href="https://www.goodreads.com/book/show/23705512">&ldquo;You&rsquo;re Never Weird on the Internet&rdquo;</a> by Felicia Day<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>;</li>
<li>Finally, in 2022 I got to &ldquo;adult comics&rdquo;, after paying a visit to FIQ<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>.</li>
</ol>
<figure><img src="/images/2024/01-20-adult-book-censored-en.jpeg"
    alt="A book with an abstract drawing of the body of a nude person with explicit parts censored" height="400">
</figure>

<p>I love saying the expression &ldquo;adult comics&rdquo;, because the first thing that many people will think about is that I&rsquo;m reading something with pornographic content 🔞<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> and very few will actually consider that it might be a story with serious, even factual, content with the drawings as a medium.</p>
<p>Reading one of those<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, I found out about the state of <a href="https://en.wikipedia.org/wiki/Autonomous_Administration_of_North_and_East_Syria">Rojava</a>, to the north of Syria, where citizens live in a decentralized government in which women have a leading role that makes many modern states envious. In another, a memoir of a soldier that started crossdressing to flee from the war and, by doing so, rediscovered their identity<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>.</p>
<p>In 2024 one of my goals is to read more and try to stabilize my cycles of ups and downs in reading, because I miss the stimuli it brings me, such as the one to write<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>. I still don&rsquo;t know whether it will be a year to revisit previously known genres, or to challenge myself and keep exploring, like reading a horror story. What I do know is that I&rsquo;m excited and already at the fourth book.</p>
<p>What about you, are you going to try adult comics or choose the guilty pleasure of a young adult? I&rsquo;d love to chat more about it, in case you take one my recommendations or if you have a suggestion to me. Happy reading!</p>
<hr>
<p>PS: The image of this post was generated using artificial intelligence, through a request I made to my friend <a href="https://thamara.dev/">Thamara Andrade</a>, and had some edits of my own. The prompt used was: &ldquo;a book with an explicit cover where all the explicit parts are hidden by censored tags&rdquo;.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>According to my <a href="https://www.goodreads.com/user/show/32769176-tulio-le-o">Goodreads profile</a> <sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>, I read 40 books in 2015 and 27 in 2016, but none in 2020 or 2021!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>I had a lot of prejudice regarding biographies and always wondered why someone would choose to read about another&rsquo;s life, specially if they were autobiographies. I simply devoured this book and now I openly admit that I was wrong 😅&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>The Belo Horizonte <em>Festival Internacional de Quadrinhos</em> (International Comics Festival), aka <a href="https://en.wikipedia.org/wiki/Festival_Internacional_de_Quadrinhos">FIQ</a>, is a fantastic event to promote local and international comic books, regardless of the author status. I strongly recommend it and, if you&rsquo;re reading this before May 2024, there is still time to attend to <a href="https://cultura.uol.com.br/entretenimento/noticias/2024/01/19/9155_festival-internacional-de-quadrinhos-de-bh-anuncia-data-e-local-do-evento-confira.html">this year&rsquo;s edition</a>!&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>I can neither confirm nor deny.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://www.goodreads.com/book/show/28926893">&ldquo;Kobane Calling&rdquo;</a>, by Zerocalcare.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="https://www.goodreads.com/book/show/35272070">&ldquo;Deserter&rsquo;s Masquerade&rdquo;</a>, by Chloé Cruchaudet.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>You&rsquo;ll have to power through 🤭&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>I&rsquo;m crazy about logging a lot of what I do and then see the statistics that come out of it. Apparently it is being useful!<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p>Is footnote recursion allowed? It seems I write as much here as in the text itself ☠&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Snoozed until 12/31/2999</title><link>https://tupscal.xyz/blog/2024/01-10-snoozed-until-99/</link><pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2024/01-10-snoozed-until-99/</guid><description>&lt;p&gt;2024 has just begun and with it all the conversations and thoughts about what will be everyone&amp;rsquo;s goals for the year. It hasn&amp;rsquo;t been any different for me (and I really quite like it🤗), so among many year-long items that I listed, I set one goal for January:&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Make my personal e-mail inbox manageable&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;It was not the most aggressive goal, I had around 50 mails on my inbox at the time&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, but I didn&amp;rsquo;t want to just delete them all, because they&amp;rsquo;re part of my task management system, therefore it was a challenging target.&lt;/p&gt;</description><content:encoded><![CDATA[<p>2024 has just begun and with it all the conversations and thoughts about what will be everyone&rsquo;s goals for the year. It hasn&rsquo;t been any different for me (and I really quite like it🤗), so among many year-long items that I listed, I set one goal for January:</p>
<hr>
<p><strong>Make my personal e-mail inbox manageable</strong></p>
<hr>
<p>It was not the most aggressive goal, I had around 50 mails on my inbox at the time<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, but I didn&rsquo;t want to just delete them all, because they&rsquo;re part of my task management system, therefore it was a challenging target.</p>
<p>Anyone close to me knows that I like to reply to everything that is sent my way - and am very proud of it 💪🏽 - I have a system to do so on WhatsApp (may write about it one day) and another on my e-mail. See, I&rsquo;m an <a href="https://en.wikipedia.org/wiki/Inbox_by_Gmail">Inbox by Gmail</a> orphan 🥺 and learned to keep track of everything that I had to do by snoozing e-mails<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>:</p>
<ol>
<li>Received utility bill during work hours? <em>Snooze</em> until evening to pay later</li>
<li>Bought ticket to a concert? <em>Snooze</em> until day before to download tickets</li>
<li>Pledged on crowdfunding campaign? <em>Snooze</em> until next month to check for updates</li>
<li>Etc &hellip;</li>
</ol>
<p>I am a very organized person and would probably deal with all the tasks above well enough without having to snooze them, though there is one type of task where it really helps me<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, but what about the ones I don&rsquo;t know what to do? Do I delete them, keep in the inbox, snooze to some date? Well, at some point this was the answer:</p>
<figure><img src="/images/2024/01-10-snoozed_99_en.png"
    alt="Screenshot of Gmail inbox showing an e-mail snoozed until December 31, 2999">
</figure>

<p>For sure I don&rsquo;t hope to live another 900 years 👴🏽, nor do I think Gmail will be alive by then, I just used Inbox&rsquo;s <em>&ldquo;Snooze to someday</em>&quot;🎲 function, so that when it appeared, I&rsquo;d take action, but it never did! It is an interesting lesson in itself, in fact more than one:</p>
<ul>
<li><strong>To myself</strong>: if I was ok with postponing the task indefinitely, should I even care about it or should I have just wiped it and moved on 🤷🏽‍♀️?</li>
<li><strong>To Google</strong>: What the heck happened? Did the variable on the code overflow and rounded to the maximum date, was it a conversion problem when retiring Inbox, or does it mean that, if Gmail survives until 2999, this is a heads-up about the next millennium bug 👀?</li>
</ul>
<p>I learned to let go of many tasks as I cleaned my inbox, I just found this mishap funny to write about and will probably be keeping the mail around, maybe someday it will surprise someone with a big decision<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Currently just two!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Actually, I started this system using <a href="https://www.boomeranggmail.com/">Boomerang for Gmail</a>, but Inbox turned out to be simpler. At the moment of writing this, I had 14 snoozed e-mails on my Gmail account.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I love snoozing mails to keep track of tasks on the open source repositories I am a member of. If I review some code, I snooze the e-mail to remember to ask the author for a reply, if I need to take action, but can&rsquo;t at the moment, it is snoozed to when I can, and so on, you get the idea.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>The big decision being: do you want to use this service that converts your tumblr blog into a physical book? hahahahaha 🤣&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>Journey to the future: porting thousands of lines from Qt3 to Qt6 - QtCon Brasil 2022</title><link>https://tupscal.xyz/talks/2022-11-21-qtcon-qt3to6/</link><pubDate>Mon, 21 Nov 2022 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/talks/2022-11-21-qtcon-qt3to6/</guid><description>&lt;p&gt;&lt;strong&gt;This talk is in Portuguese (Brazil)&lt;/strong&gt;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/8HH4xw75gbg?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;</description><content:encoded><![CDATA[<p><strong>This talk is in Portuguese (Brazil)</strong></p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/8HH4xw75gbg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

]]></content:encoded></item><item><title>Lightning Talks: -std=c++20 -- Will This C++ Code Compile? - CppCon 2022</title><link>https://tupscal.xyz/talks/2022-09-15-cppcon-lightning-cpp20-pitfalls/</link><pubDate>Thu, 15 Sep 2022 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/talks/2022-09-15-cppcon-lightning-cpp20-pitfalls/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/87_Ld6CMHAw?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;</description><content:encoded><![CDATA[<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/87_Ld6CMHAw?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

]]></content:encoded></item><item><title>Catalyst Quality Award on the Cadence Innovation Conference</title><link>https://tupscal.xyz/blog/2022/07-22-cadence-cic-award/</link><pubDate>Fri, 22 Jul 2022 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2022/07-22-cadence-cic-award/</guid><description>&lt;figure&gt;&lt;img src="https://tupscal.xyz/images/2022/07-22-cic-award-trophy.jpg"
 alt="Picture of the author smiling and holding the trophy for the Catalyst Quality Award"&gt;
&lt;/figure&gt;

&lt;p&gt;We don&amp;rsquo;t do it for recognition, so when it comes, we can&amp;rsquo;t help but smile, right?&lt;/p&gt;
&lt;p&gt;Last week I attended the first &lt;a href="https://www.cadence.com/en_US/home.html"&gt;Cadence Design Systems&lt;/a&gt; Innovation Conference (CIC), in Monterey - California (USA). It was a unique opportunity with plenty of &amp;ldquo;firsts&amp;rdquo; for me: presenting at an international conference in person, chairing a session and assembling one of its tracks (along with &lt;a href="https://www.linkedin.com/in/tomasschweizer/"&gt;Tomas Schweizer&lt;/a&gt;, &lt;a href="https://thamara.dev/"&gt;Thamara Andrade&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/will-reece-98594563/"&gt;Will Reece&lt;/a&gt;). This alone had me fulfilled, and there was more: inspiring talks by coworkers from across the globe, several of which left me with a follow-up plan in mind, and connecting to so many people I had only seen virtually or even never met. Borderline overwhelming, in a good way!&lt;/p&gt;</description><content:encoded><![CDATA[<figure><img src="/images/2022/07-22-cic-award-trophy.jpg"
    alt="Picture of the author smiling and holding the trophy for the Catalyst Quality Award">
</figure>

<p>We don&rsquo;t do it for recognition, so when it comes, we can&rsquo;t help but smile, right?</p>
<p>Last week I attended the first <a href="https://www.cadence.com/en_US/home.html">Cadence Design Systems</a> Innovation Conference (CIC), in Monterey - California (USA). It was a unique opportunity with plenty of &ldquo;firsts&rdquo; for me: presenting at an international conference in person, chairing a session and assembling one of its tracks (along with <a href="https://www.linkedin.com/in/tomasschweizer/">Tomas Schweizer</a>, <a href="https://thamara.dev/">Thamara Andrade</a> and <a href="https://www.linkedin.com/in/will-reece-98594563/">Will Reece</a>). This alone had me fulfilled, and there was more: inspiring talks by coworkers from across the globe, several of which left me with a follow-up plan in mind, and connecting to so many people I had only seen virtually or even never met. Borderline overwhelming, in a good way!</p>
<p>The icing on the cake was the awards banquet, where I was called upon the stage to receive a &ldquo;Catalyst Quality Award&rdquo; from the hands of our CEO <a href="https://www.linkedin.com/in/devgan">Anirudh Devgan</a> himself, along with EMT members. This got me ecstatic, it recognizes work I&rsquo;ve done for the people and products over the years, made reputable through the
encouraging leadership and incredible camaraderie I&rsquo;ve had from my coworkers, specially in our Belo Horizonte office. I&rsquo;m taking this home to us, Brazil!</p>
<p>Anyway, as I write this on my return flight, 10,000 meters above ground, all I can think about is to land my upcoming ideas and collaborations. What&rsquo;s next? :)</p>
]]></content:encoded></item><item><title>Motivation through small actions</title><link>https://tupscal.xyz/blog/2022/01-05-motivation-keychain/</link><pubDate>Wed, 05 Jan 2022 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2022/01-05-motivation-keychain/</guid><description>&lt;figure&gt;&lt;img src="https://tupscal.xyz/images/2022/01-05-broken-keychain.jpg"
 alt="Picture of a broken keychain"&gt;
&lt;/figure&gt;

&lt;p&gt;What keeps you going? It used to be this keychain for me 😮&lt;/p&gt;
&lt;p&gt;At the beginning of each semester of Control and Automation Engineering, &lt;a href="https://ufmg.br/international-visitors"&gt;UFMG&lt;/a&gt; students could participate of a program called PEC. Through it, we visited a company for a week and learned about what an engineer like us did for a living there. It was amazing to get me pumped for the upcoming semester.&lt;/p&gt;
&lt;p&gt;In one of those opportunities I went to &lt;a href="https://brazil.vallourec.com/en/"&gt;Vallourec&lt;/a&gt;, where I got delighted by the huge machines, incandescent tubes and could hear &lt;a href="https://www.linkedin.com/in/marceloversiani"&gt;Marcelo Versiani&lt;/a&gt; give great lectures about things I would only learn in my undergraduate course 2 years later. I left there certain that the factory floor would be where I belonged and kept remembering about this for 10 years while I carried this keychain I got there, until it tore apart a few months ago. 😁&lt;/p&gt;</description><content:encoded><![CDATA[<figure><img src="/images/2022/01-05-broken-keychain.jpg"
    alt="Picture of a broken keychain">
</figure>

<p>What keeps you going? It used to be this keychain for me 😮</p>
<p>At the beginning of each semester of Control and Automation Engineering, <a href="https://ufmg.br/international-visitors">UFMG</a> students could participate of a program called PEC. Through it, we visited a company for a week and learned about what an engineer like us did for a living there. It was amazing to get me pumped for the upcoming semester.</p>
<p>In one of those opportunities I went to <a href="https://brazil.vallourec.com/en/">Vallourec</a>, where I got delighted by the huge machines, incandescent tubes and could hear <a href="https://www.linkedin.com/in/marceloversiani">Marcelo Versiani</a> give great lectures about things I would only learn in my undergraduate course 2 years later. I left there certain that the factory floor would be where I belonged and kept remembering about this for 10 years while I carried this keychain I got there, until it tore apart a few months ago. 😁</p>
<p>Years later, already at <a href="https://www.cadence.com/en_US/home.html">Cadence Design Systems</a>, I joined <a href="https://www.linkedin.com/in/regina-mara-amaral-fonseca-311b54b5/">Regina Fonseca</a>, <a href="https://www.linkedin.com/in/gabriel-guedes-01bb0bb8/">Gabriel Guedes</a>, <a href="https://www.linkedin.com/in/rodrigo-fonseca-rocha-soares-034b1492/">Rodrigo Soares</a> and a few others to welcome our first PEC students. I will never forget what one of them told us at the end of one edition: “Wow, I got here hating programming and I’m leaving thinking about which software development modules I should pick next semester”. There is no way not to smile when remembering about this 💓</p>
<p>And you, what has kept you motivated and how will you motivate others in 2022? It’s a great time to think about it!</p>
]]></content:encoded></item><item><title>Draft Notebook</title><link>https://tupscal.xyz/blog/2021/12-03-recicled-notepad/</link><pubDate>Fri, 03 Dec 2021 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2021/12-03-recicled-notepad/</guid><description>&lt;p&gt;No, we didn’t save the world, but it’s been worth trying :)&lt;/p&gt;
&lt;p&gt;Back home we learned to say “draft” very early, as my parents always stored paper sheets that were printed or written only on one side to be reused: the back of a bank statement would become a shopping list or even the printing of bills to be paid, and only then discarded. We always heard from them: “grab a draft for me son”.&lt;/p&gt;</description><content:encoded><![CDATA[<p>No, we didn’t save the world, but it’s been worth trying :)</p>
<p>Back home we learned to say “draft” very early, as my parents always stored paper sheets that were printed or written only on one side to be reused: the back of a bank statement would become a shopping list or even the printing of bills to be paid, and only then discarded. We always heard from them: “grab a draft for me son”.</p>
<p>When he worked at the local power company, my dad always saw loads of sheets with public lighting projects being thrown away, even though they were unused on one side, and found it wasteful. <a href="https://www.linkedin.com/in/tiagopaschoal">Tiago</a> and <a href="https://www.linkedin.com/in/talespaschoalin">Tales</a> can attest that we had a very fun childhood, drawing on huge A1-sized sheets, using them to cover the table or floor before making art, or even trying to understand the actual project on its other side.</p>
<p>One day my father showed up with the huge notepad on the GIF, said he had grabbed a lot of A4 sheets that would be thrown away and decided to rehash them, asking for them to be cut in half and making the notebook. We even laughed at the time, because it was gigantic, we thought it would never finish, but today, over a decade later, it’s over.</p>
<p>The notebook was there for the whole of our university, it was used to take notes while we studied, to log board game plays or even the phone of someone we had to call. It accompanied me throughout the beginning of my professional career, saw me run interviews, kept new feature ideas, registered painful steps when trying to understand a bug and even became a diary for some time!</p>
<p>It may sound silly, but seeing the old notebook running out of blank space ended up becoming a milestone. I was even anxious for it to happen, now I feel weird thinking that I’ll have to buy a new one, all thanks to our parents who taught us how not to waste stuff.</p>
<p>Thanks Vera and Arnaldo. No, we didn’t save the world, but it’s been worth trying :)</p>
<figure><img src="/images/2021/12-03-notebook.gif"
    alt="Gif showing a hand flipping multiple pages">
</figure>

]]></content:encoded></item><item><title>Lightning Talk: Tackling Technical Debt: Hello Junior Developers! - CppCon 2021</title><link>https://tupscal.xyz/talks/2021-10-28-cppcon-lightning-tech-debt/</link><pubDate>Thu, 28 Oct 2021 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/talks/2021-10-28-cppcon-lightning-tech-debt/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Ak6zZGyBPGA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;</description><content:encoded><![CDATA[<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Ak6zZGyBPGA?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

]]></content:encoded></item><item><title>Babystepping Your Way to Becoming an Open Source Contributor - CodeLand 2021</title><link>https://tupscal.xyz/talks/2021-09-24-codeland-open-source-starters/</link><pubDate>Fri, 24 Sep 2021 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/talks/2021-09-24-codeland-open-source-starters/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/lXAe21kHVnw?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;</description><content:encoded><![CDATA[<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/lXAe21kHVnw?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

]]></content:encoded></item><item><title>TED and a tale of burnout</title><link>https://tupscal.xyz/blog/2020/05-13-ted-burnout/</link><pubDate>Wed, 13 May 2020 00:00:00 +0000</pubDate><author>tupaschoal+blog@gmail.com (Tulio Paschoalin Leao)</author><guid>https://tupscal.xyz/blog/2020/05-13-ted-burnout/</guid><description>&lt;figure&gt;&lt;img src="https://tupscal.xyz/images/2020/05-13-ted-translator.jpg"
 alt="Picture of the author smiling and sitting in front of a Brazil flag holding a sign saying &amp;#34;I&amp;#39;m a TED Translator&amp;#34;"&gt;
&lt;/figure&gt;

&lt;p&gt;LinkedIn&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; is often used to share good news and happy goodbyes, but I feel that sometimes it should be deeper, which is why I have decided to write about burnout.&lt;/p&gt;
&lt;p&gt;This week I stepped away from my position as a voluntary Language Coordinator (LC) and Translator for Portuguese (Brazil) and English at &lt;a href="https://www.ted.com/"&gt;TED&lt;/a&gt;. It was my first contact with volunteering, I joined back in 2010 as a way of occupying my free time while also improving my English and some might even say that it was actually my first job. At the time I was only eighteen, with lots of energy and obsessed with giving attention to all volunteers and completing tasks.&lt;/p&gt;</description><content:encoded><![CDATA[<figure><img src="/images/2020/05-13-ted-translator.jpg"
    alt="Picture of the author smiling and sitting in front of a Brazil flag holding a sign saying &#34;I&#39;m a TED Translator&#34;">
</figure>

<p>LinkedIn<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> is often used to share good news and happy goodbyes, but I feel that sometimes it should be deeper, which is why I have decided to write about burnout.</p>
<p>This week I stepped away from my position as a voluntary Language Coordinator (LC) and Translator for Portuguese (Brazil) and English at <a href="https://www.ted.com/">TED</a>. It was my first contact with volunteering, I joined back in 2010 as a way of occupying my free time while also improving my English and some might even say that it was actually my first job. At the time I was only eighteen, with lots of energy and obsessed with giving attention to all volunteers and completing tasks.</p>
<blockquote>
<p>Turns out it was actually my first time burning out as well.</p>
</blockquote>
<p>The TED translation pipeline was divided into 3 stages: anyone could do the first two, but only Language Coordinators could do the third, approvals. There were tens of translators for a few LCs and we had a huge backlog of approvals to deal with, which was ever increasing. There were often questions of “when will my subtitle be online” or “I’ve finished my task some months ago, can someone approve it?”, so I set out to do it.</p>
<p>When I first started translating, I used to take videos with a theme that I liked, but as an LC I’d pick anything on the approval queue to get it over with. I’d also use every bit of free time I had to approve subtitles and it quickly became a chore, but I really wanted to get these out so that the translators wouldn’t feel frustrated and leave the community. Soon enough I wasn’t translating and reviewing anymore, just approving.</p>
<blockquote>
<p>Worrying too much about the others and not myself was my demise.</p>
</blockquote>
<p>Life is a very delicate balance of expectations which, if disturbed too much, will lead to frustration, upsetting, burnout. I set an expectation that I would be able to handle the approvals, that people expected us to approve things fast and that this would soon be a manageable situation had TED cooperated or delivered on promises. None of these were met. I was using all my free time and leisure time to work on this and it didn’t fare well.</p>
<blockquote>
<p>So I burned out.</p>
</blockquote>
<p>I’m not an expert to describe and diagnose what burnout is, but I’d tell you that it feels like a trauma. If you’re demotivated to work one day, feeling lazy or procrastinating, that isn’t burning out, but if you can’t imagine yourself anywhere near those tasks, then you’re probably really close, if not at it already. I didn’t want to touch the project anymore, and I hardly ever watched the videos I used to like. To this day I don’t find much joy in watching them anymore, which is disappointing, so I will reiterate:</p>
<blockquote>
<p>Watch out.</p>
</blockquote>
<ul>
<li>Be mindful of what your and theirs expectations are.</li>
<li>Don’t forget to take your breaks and pauses, be them as long as they need to be for you to feel at ease again</li>
<li>Know when to stop or to reach out for help, if it’s too late, then the joy on that activity might never come back.</li>
</ul>
<p>If you feel like talking about it, I’m all ears. Stay safe, stay sane.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>This post was originally published as a <a href="https://www.linkedin.com/pulse/ted-tale-burnout-tulio-leao/">LinkedIn article</a>, hence the first phrase.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item></channel></rss>