|
|
2 <feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>AndreGarzia.com</title><link rel="self" href="https://andregarzia.com/feeds/all.atom.xml"/><generator uri="http://pollenpub.com/">Pollen (custom feed)</generator><id>https://andregarzia.com/</id><updated>2022-01-27T22:23:00+00:00</updated><author><name>Andre Alves Garzia</name><email>contato@andregarzia.com</email></author><entry><author><name>Andre Alves Garzia</name></author><published>2022-01-25T00:00:00+00:00</published><updated>2022-01-25T00:00:00+00:00</updated><title>Gemini Is A Little Gem</title><link rel="alternate" href="https://andregarzia.com/2022/01/gemini-is-a-little-gem.html"/><id>https://andregarzia.com/2022/01/gemini-is-a-little-gem.html</id><summary type="html"><![CDATA[<div class="figure"><p><img src="img/borsok.png" alt="Little space capsules make me happy"/></p><p class="caption">Little space capsules make me happy</p></div><p>I’m writing this post as a commentary about the usual criticisms of <a href="https://gemini.circumlunar.space/">Gemini Protocol</a>. The most recent post on that topic I read was <a href="https://xn--gckvb8fzb.com/gemini-is-solutionism-at-its-worst/">マリウス . Gemini is Solutionism at its Worst</a>. Instead of simply commenting on Hacker News like I did in previous similar posts, I thought I’d write a little blog post I could link there and in future discussions.</p><p>There is a motif that recurs in most criticisms about Gemini that annoys the hell out of me. When you zoom out from the day-to-day reading of such complaints and move away from the phrase to phrase arguments into the big picture, you’ll see that they approach Gemini as if every person on that ecosystem is using Gemini for the same reasons. These arguments usually boil down to <em>“someone is fed up with the web but guess what?! Gemini is not better than the Web!!! Win!!!”</em>.</p><p>In this brief blog post, I’ll talk about Gemini from a different point of view. Not attacking these arguments individually, but trying to talk a bit about what attracts me to the protocol and how I see it. I hope that by the end of this post, you’ll have a different approach to reasoning about Gemini. And, if you decide to write criticism about it, that you’ll take what is written here into account.</p><h2 id="gemini-is-more-than-a-protocol">Gemini is more than a protocol</h2><p>The protocol is just the gateway to Gemini. Once you have a client that supports it, you’re free to enter the ecosystem. Once there, you’ll notice that it is composed of many vibrant communities. There are artists creating cool experiments, writers and essayists pouring their hearts and brains out, etc. You can find a tribe for you or start a new thing.</p><p>Since the markup language is so simple, it lowers the barrier of entry for those wanting to produce content. There is no need to learn web design and have a pretty site (nothing against those, I like them but they add friction to newcomers). One can learn all about Gemtext in less than an hour and be happy.</p><p>All that experience can be had on the Web as well. Gemini is not a replacement for the Web. It is just another option in your toolbox. The Web is your orchestral music, Gemini is low-fi chiptune. You can enjoy both. There is a ton of joy in working with simple tools that are easy to understand.</p><p>Most critics of Gemini focus their arguments on the protocol. How HTTP + HTML can be tweaked to work on a similar vibe. They are not wrong; the Web is retrocompatible with itself. HTTP/1.1 requests and serving very simple HTML work just fine. People are not using Gemini because the Web can’t do simple hypertext serving. Many using it because Gemini can only do simple hypertext serving. Also, focusing on protocol only makes one miss the rest of Gemini, which is the ecosystem and people who are having a great time using it. Sometimes, it feels to me like someone is at a party ranting about the music not being good enough while there is a smiling crowd dancing and having fun.</p><h2 id="gemtext-is-just-another-markdown">Gemtext is just another Markdown</h2><p>People who think that Markdown is easy are often thinking in terms of using it as a writer or importing it from a library as a developer. Writing a Markdown parser is not trivial. Gemtext parsing is quite easy to implement on the other hand. A novice developer can do it from scratch with minimal understanding of their chosen language string manipulation features. Gemtext is easy for writers to use and for computers to parse it too, making it suitable for writing long-form text and for usage in underpowered machines.</p><p>Gemini is definitely biased towards textual content. You can still serve images and artwork from it, but the ethos of <em>one document, one request</em> prevents clients from auto-loading and inlining images. Non-textual content is not a first-class citizen in most clients when compared to Gemtext. That just means that you’re either willing to do it anyway, or that you’re better served by the Web. The Web is great and it can serve anything from simple hypertext to complex games. Depending on your interest, the Web might just be the best solution. You’ll get no points by trying to pass the community as saying that Gemini is the best solution for everything, and then showing it isn’t. Every one can see that there are different solutions for each need.</p><p>Creating Gemtext converters to Markdown or HTML is also trivial, thus enabling hosts to serve the same content to different ecosystems if needed. It just depends on what kind of content you’re interested in making, and what kind of trade-offs you’re willing to put up with. If the answer to the last question is none, maybe the Web is a better solution for you.</p><h2 id="you-can-hold-gemini-in-your-head">You can hold Gemini in your head</h2><p>I think we can all agree that it is completely impossible for a single human being to hold all the specifications for the Web in their head. The Web grew so much that it is no longer a collection of technologies that can be understood easily and tackled by a single developer. Yes, you can know the big picture, the index card version of how the web works, but I doubt that a single developer can keep all of CSS, HTML, JS and HTTP specs in their head. I don’t mean as a user of those specifications and protocols; I mean as a developer who needs to implement that stuff from scratch.</p><p>Gemini, on the other hand, is dead simple. A developer can keep all of Gemini Protocol and Gemtext markup in their head. It is easy to implement and understand. Many people are into Gemini because they enjoy tinkering. Gemini-based software is easy to build and useful for the community. I’m on that camp. I enjoy building little Gemnini toys, some just for my amusement.</p><h2 id="constraints-shine-a-spotlight-on-features">Constraints shine a spotlight on features</h2><p>Gemini protocol has many constraints. Each of those constraints has been put into place to make a feature more powerful. Lack of cookies helps those who are interested in privacy. No scripting helps those who want documents instead of apps. Simple markup helps those who want to focus on content. You get the gist. Each constraint helps shine a light into some Gemini feature or principle. Of course, there are a gazillion ways to circumvent any of these features.</p><p>An example I often see is people criticising the privacy aspect of Gemini. I think those writers cannot grasp that Gemini in its default configuration is often more private than the Web. The key word is <em>more</em>. It doesn’t mean you can’t create specialised servers that track people, of course you can do that. Being able to do that doesn’t mean that all the privacy aspects of Gemini are moot. Gemini Protocol was not designed to be InfoSec Ambrosia. It was designed with some privacy constraints to help mitigate privacy abuse, and that is it.</p><p>Gemini is not perfect. It is not even close to perfect. It is a little gem with flaws. We look at it and marvel at how those flaws make it even more beautiful.</p><h2 id="the-replacement-rhetoric-is-boring">The replacement rhetoric is boring</h2><p>Thinking that everyone who is into Gemini is doing it because they want the Web to die is quite boring. Homogenisation of a whole ecosystem never works. Of course there are people who want the Web to die, who cares? The Web will continue living just fine. It is not going anywhere.</p><p>Just remember that Gemini is an archipelago and not a single island. Each one of us is into it for a different reason.</p><p>Framing Gemini enthusiasts as people who are shouting to the four corners that the Web is dead, and that Gemini is better, is a complete disservice to the community IMO.</p><h2 id="gemini-is-old-school-ish">Gemini is old-school-ish</h2><p>The original post linked above makes an argument that Gemini is not bringing anything new to the internet. That it is not based on new trends such as decentralisation technologies such as IPFS and Hyper. No blockchain either (thank the Gods for that). The author says it feels like old technology.</p><p>Well, that is a feature! A DAW can feel like space-age musical technology, but people have been enjoying Kalimbas for probably more than a thousand years and they’re having fun. Old technology doesn’t mean it is bad. This mindset that progress and innovation should be valued above everything else is not useful. See, I’m quite active in one of the decentralisation protocols community: <a href="https://ssb.nz">Secure Scuttlebutt</a>. I’m more active there than in the Gemini community (where I’m mostly a reader and developer of a small client). I can see all the innovations that SSB brings to the smol web, and yet appreciate Gemini for what it is.</p><div class="figure"><p><img src="/img/shots/gemini/fafi.gif" alt="I make a Racket-based Gemini browser called Fafi."/></p><p class="caption">I make a Racket-based Gemini browser called Fafi.</p></div><blockquote><p>Coffee is old technology, many of us drink it every day and we’re happy with it.</p></blockquote><p>Gemini is old-school distilled for the current day. It keeps a lot of the feel of writing old-school networked software while still improving the experience with some modern features such as TLS. Do not think of Gemini as something that has value just because of nostalgia. Old-school paradigms have their place. They’re easy to grasp and implement. Because of how approachable Gemini is, it becomes easy to tinker and experiment. Old-school tech is boring, it fades to the background so that you can focus on what matters: content.</p><p>A hypertext distribution protocol without users and content is mostly useless (unless it serves as an inspiration for a new protocol that ends up with users and content). Gemini grasped the attention of enough people to create a critical mass of original content.</p><h2 id="gemini-is-an-exclusivist-community">Gemini is an exclusivist community</h2><p>The argument that unless you serve things on the Web, you’re making the world less inclusive is just wrong. There are a ton of older machines out there that have a hard time participating in the modern web. They can be a part of Gemini (or its simpler cousin Mercury) instead. Gemini and Mercury enables those with older machines, those who can’t afford recent computers, retrocomputer enthusiasts, and many others to take part in a Web-like experience at a fraction of the cost of being in the normal Web (both in terms of money and computing resources).</p><figure class="video_container"><video controls="true" allowfullscreen="true"><source src="img/mercury.mp4" type="video/mp4"></source></video> <figcaption>I procrastinate by making an alpha quality Mercury client for MacOS 8.6+</figcaption></figure><p>Gemini is <em>easy to understand and implement</em>, because of that there are lots of proxy services bridging the Web and Gemini. You can easily browse Gemini capsules from the Web. One loses very little by leveraging those services. If you like the ecosystem well enough, you’re free to decide if you should keep using a proxy or install a client. It is up to you. Believing that you can’t see Gemini-exclusive content from the Web is just wrong.</p><h2 id="final-words">Final words</h2><p>The world is not made richer by having less options for hypertext networks. Gemini is not the Web, and it doesn’t want to be the Web. Gemini is its own thing that will co-exist with the Web. There are many reasons to enjoy participating in the smol web, you should find yours.</p><div class="hidden"><p><img src="img/borsok.png" class="u-photo"/> </p><p>In reply to: <a class="u-reply-to" href="https://xn--gckvb8fzb.com/gemini-is-solutionism-at-its-worst/">[マリウス . Gemini is Solutionism at its Worst]</a></p><p>. </p><ul><li><a class="p-bridgy-mastodon-content" href="https://brid.gy/publish/mastodon">✨ #Gemini is a little gem 💎</a></li><li><a class="p-bridgy-twitter-content" href="https://brid.gy/publish/twitter">✨ #Gemini is a little gem 💎</a></li></ul></div>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2022-01-13T00:00:00+00:00</published><updated>2022-01-13T00:00:00+00:00</updated><title>Got a passport-size Traveller's Notebook</title><link rel="alternate" href="https://andregarzia.com/2022/01/got-a-passportsize-travellers-notebook.html"/><id>https://andregarzia.com/2022/01/got-a-passportsize-travellers-notebook.html</id><summary type="html"><![CDATA[<p>I love stationary 😻</p><p>I’m not going to show <em>my collection</em> because that invites judgement 🤭 let’s just say that one needs to spend time with physical things before they learn if that specific thing suits them well or not. I tried some popular notebooks and pens but they never clicked for me. I still have most of them, and will use them from time to time, but I wanted something for day to day use. Many people will opt for inexpensive things for their daily carry and there are various good reasons to do that beyond the simple <em>let’s save the good things for special occasions</em>. I’m from a different opinion, the mindset that good tools invite usage, and that I’m more tempted to open my notebook and write things down when I enjoy the paper and pen.</p><div id="more-marker"></div><p>Be aware that good tools don’t mean expensive tools. My favourite pen: the <a href="https://www.jetpens.com/blog/Hi-Tec-C-A-Comprehensive-Guide/pt/629">pilot hi-tec-c</a> is quite inexpensive. But, some of my favourites are a bit on the expensive side. My notebook journey passed through inexpensive favourites like <a href="https://fieldnotesbrand.com">Field Notes</a>, to everyone’s darling <a href="https://www.jetpens.com/blog/Guide-to-the-Hobonichi-Techo-Planner/pt/900">Hobonichi Techo</a>, before finally landing on <a href="https://www.jetpens.com/blog/TRAVELER-S-COMPANY-TRAVELER-S-notebook-A-Comprehensive-Guide/pt/726">Traveller’s Company Notebook systems</a>.</p><p>What attracts me to <em>Traveller’s notebook</em> is how flexible they are. It is a system of composable inserts, covers, and accessories. They can grow and change with you in a way that the Hobonichi Techo and other similar planners couldn’t.</p><blockquote><p>💭 <em>“This is becoming a longer post than I originally envisioned. I just wanted to post pictures of my new notebook, but here I am, telling you a story…”</em></p></blockquote><p>My original Traveller’s notebook is a standard size with the camel cover. I have many inserts for it, and for 2022 I’ve setup it with:</p><ul><li>a single <em>dot grid</em> notebook.</li><li>a cloth insert with zipper pocket and folder.</li><li>a plastic card file.</li><li>a clip to help me keep it open if I need to, or to attach things to it.</li><li>a pen loop.</li></ul><figure class="video_container"><video controls="true" allowfullscreen="true"><source src="img/IMG_1441_720.mp4" type="video/mp4"></source></video></figure><p>This notebook has been the one that I use for brainstorming, plotting, and just trying to get my thoughts in order. I love the idea of journaling and keeping a diary, but I haven’t been consistent with it and gave up. I’m thinking about adding another notebook to serve as a journal. I can fit two or three notebook inserts on it before it gets too bulky. Maybe just two because of the other inserts.</p><p>Anyway, a ton of Patchfox and my own books were planned using this notebook. <strong>I really like it.</strong> but there is a problem though. As you might have noticed, it the notebook is a tad to large for most pockets. This means I only carry it when I make the conscious decision to throw it in a bag. I favour small bags, so carrying it adds a lot of load to whatever I’m carrying, specially when you factor in my cute as hell pen case.</p><p>This means that when I want to pack light recently, I ended up picking some inexpensive book like a <em>Field Notes</em> and one or two pens and carrying them with me instead of my fancy journal. Which led to me writing less, because information was spread among too many little books.</p><p>I noticed that when I carried the larger notebook I was happier and more productive. I was still productive when I carried small notebooks of good quality and good pens, but those booklets are less flexible in the long run.</p><p>I was thinking about it as I self-isolated in Canterbury. I want my Traveller’s Notebook, but in a smaller form-factor. Something that I can carry every day and adapt as my needs change.</p><p>Luckily, Traveller’s Company makes a passport-size version of their notebook, and this what this post has been all about. I got a new passport-size Traveller’s Notebook, and set it up similarly to the large one. This can fit in most of my pockets and bags with ease. I’m looking forward to having a walk today and maybe brainstorming a bit with some tea.</p><div class="figure"><p><img src="img/scaled.IMG_1445.jpeg" alt="TN passport-size"/></p><p class="caption">TN passport-size</p></div><div class="figure"><p><img src="img/scaled.IMG_1437.jpeg" alt="Cloth insert and MD cream paper"/></p><p class="caption">Cloth insert and MD cream paper</p></div><div class="figure"><p><img src="img/scaled.IMG_1436.jpeg" alt="Size different between them"/></p><p class="caption">Size different between them</p></div><p>Oh, and to solve the pen case problem, I got a small Kaweco pouch that fits two pens from the Sport line. Kawecos are very easy to carry. Since I’m left-handed, I’m carrying the mechanical pencil and the rollerball.</p><div class="figure"><p><img src="img/scaled.IMG_1444.jpeg" alt="Kaweco rollerball, mechanical pencil, and pouch."/></p><p class="caption">Kaweco rollerball, mechanical pencil, and pouch.</p></div><div class="figure"><p><img src="img/scaled.IMG_1438.jpeg" alt="They match well in my opinion."/></p><p class="caption">They match well in my opinion.</p></div><div class="hidden"><img src="img/scaled.IMG_1446.jpeg" class="u-photo"/> <a class="p-bridgy-mastodon-content" href="https://brid.gy/publish/mastodon">✨ Enjoying a new Traveller’s Notebook in passport size #travellersnotebook</a> <a class="p-bridgy-twitter-content" href="https://brid.gy/publish/twitter">✨ Enjoying a new Traveller’s Notebook in passport size #travellersnotebook</a></div>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-12-15T00:00:00+00:00</published><updated>2021-12-15T00:00:00+00:00</updated><title>The Blog is the program</title><link rel="alternate" href="https://andregarzia.com/2021/12/the-blog-is-the-program.html"/><id>https://andregarzia.com/2021/12/the-blog-is-the-program.html</id><summary type="html"><![CDATA[<p>I decided to do a career change into writing fiction and RPGs, this will be a slow transition and my blog content will eventually shift to be more about creative writing and game design than development.</p><blockquote><p>I enjoy development. I just don’t want to work as a developer anymore. It is an analogous situation to that friend of yours who enjoys cooking but doesn’t want to work in a restaurant.</p></blockquote><p>Programming can still help me with my writing career, and that is how we segue into the topic for this blog post: This blog is a program. I don’t mean <em>I use a program to write this blog</em>, I mean the actual blog is the damn program. Let’s unpack it because I know you’re all inclining your heads.</p><p>This is a static website, it is generated using <a href="https://pollenpub.com">Pollen</a>. Pollen is at the same time a publishing system and a programming language. It is built with Racket, and in Racket the phrase <em>let’s build a new language</em> can be used to answer almost all questions. Unlike most static generators that pick data files and process them to output HTML, the source files on a Pollen-based website are actually source-code that is executed by the Pollen language. Since Pollen is built with Racket, I can use any language or feature from the Racket platform inside my blog posts.</p><p>I’ve been working on writing some old-school TTRPG games and trying to immerse myself back into those communities. Yesterday, I posted about <a href="in-defense-of-the-damage-chart.html">how much I like damage charts</a>. That post contains a lot of graphs for damage chart profiles, such as</p><div class="figure"><p><img src="img/Maybe%20Magical%20Sword-648736103762881358.png" alt="Example chart"/></p><p class="caption">Example chart</p></div><p>These graphs are generated at build time. I created a new Racket module to implement RPG stuff that I plan to reuse in my posts, and added a <code>damage-graph</code> function to it:</p><pre class="brush: lisp"><code>(define (html-damage-graph attrs elems) |
|
|
|
40 That is remarkably similar to the standard spear damage chart from Troika! ...</code></pre></blockquote><p>Each post in the blog is its own source file. When Pollen executes yesterday’s post source file, it finds the calls to <code>◊damage-graph</code> and executes the code in <code>(html-damage-graph ...)</code> implementation in my little library for each of them.</p><p>The Blog is the program. That means it can access all the features and languages Racket has to offer, such as the <a href="https://docs.racket-lang.org/dice-parser/index.html"><code>dice-parser</code></a> language which knows how to parse strings like <code>2d6</code> into results of rolling two six-sided dices.</p><p>So while most of the static generators I know are more popular than Pollen, they’re often less flexible. Usually, they only support Markdown and extending the markup is usually quite hard. One is often forced to change the static generator source itself to be able to add or remove markup language features. With tools such as Pollen, you’re supposed to build your own stuff. Pollen is a language, and it is waiting for you to use it.</p><p>Sometimes I wonder why I don’t see more people using Pollen, or why I don’t see static generators written in other languages copying the same features and mindset. I guess it is because creating languages is often very time consuming in other languages. Racket is language-oriented development. It is a language for building languages, and because of that, it makes such endeavours easier.</p><p>If this sounds interesting to you, I recommend you check out the <a href="https://beautifulracket.com/">Beautiful Racket</a> book—also built with Pollen, by the creator of Pollen—and <a href="https://jessealama.gumroad.com/l/lop-in-racket-cultural-anthro">Language-oriented Programming in Racket: A Cultural Anthropology</a>.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-12-13T00:00:00+00:00</published><updated>2021-12-13T00:00:00+00:00</updated><title>In defence of the damage chart</title><link rel="alternate" href="https://andregarzia.com/2021/12/in-defense-of-the-damage-chart.html"/><id>https://andregarzia.com/2021/12/in-defense-of-the-damage-chart.html</id><summary type="html"><![CDATA[<p>For the past few months, I have been obsessed with <a href="https://troikarpg.com">Troika!</a>. Not only it rekindled my love for <a href="https://www.fightingfantasy.com/advanced-fighting-fantasy-1">Advanced Fighting Fantasy</a>, but it also introduced me to the never-ending chest of wonders that is the OSR community.</p><p>As I re-immersed myself in all things RPG again and spend all my waking hours reading all your delicious blog posts and zines, I noticed people talk little about damage charts, which is one of my favourite aspects of AFF and Troika. In this post, I’m going to defend the opinion that damage charts are better than direct damage rolls, and why they lead to weapons with more flavour.</p><p>There is a lot to unpack here, but first, let’s get everyone on the same page by defining some common terms. These may be obvious to you, dear reader, but believe me, someone reading this will have no idea what I’m talking about.</p><p><strong>Direct Damage:</strong> This is the most common case I see in RPGs today. You have a weapon and its damage is the direct value of a die roll plus modifiers. So if your OSE Short Sword does 1d6 of damage, that means the damage will result from rolling 1d6, or a value between 1 and 6.</p><p><strong>Damage Chart:</strong> In this case, the damage is not the value of a die roll. The dice roll informs you of a position in a damage chart. The damage value is whatever is in that position. While the dice roll still influences the damage, it is not a 1 to 1 correspondence between the face value of the dice and the damage.</p><p>Consider both the <strong>Short Sword as defined in the OSE SRD</strong> and the <strong>Sword as presented in Troika! Numinous Edition</strong>. In the OSE version, the sword does 1d8 of damage. The damage value and roll show a linear profile.</p><p><img src="img/OSE Sword 1d8662436139915193672.png"/></p><p>You are rolling a single six-sided dice, so you have an equal chance of rolling any of those six values. If you compare it with the Short Sword:</p><p><img src="img/OSE Sword 1d6-1144730670835867014.png"/></p><p>or the Silver Dagger:</p><p><img src="img/OSE Silver Dagger 1d41105140957661.png"/></p><p>What can you perceive from all of this? That damage rolls are linear and boring. Those weapons feel the same even if they have different maximum damage values. Between rolling 1 and 4, they’re all the same. They have no flavour.</p><p>Now, let’s consider the Troika! sword, this is its damage chart:</p><div class="damage-chart"><table class="damage-chart"><thead><tr><th>Damage Roll →</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7+</th></tr></thead><tbody><tr><td>Sword</td><td>4</td><td>6</td><td>6</td><td>6</td><td>6</td><td>8</td><td>10</td></tr></tbody></table></div><p>To calculate damage in Troika! or any AFF derived RPG that still uses damage charts, you roll 1d6 and then check the corresponding damage value on the damage chart for the chosen weapon. From a quick glance at that table, we can realise that the damage range is between 4 and 10 and that in most cases you’ll hit the enemy with 6 damage. The profile is not linear:</p><p><img src="img/Sword-423028664223317833.png"/></p><p>Also, notice the green lines. They mark the maximum value you can roll on a d6. This means that to reach the higher levels of damage such as 10, the player needs to resort to something else such as <i>testing their luck</i> or relying on bonuses from other items.</p><p>These damage charts are not the equivalent of applying bonuses to direct damage die rolls. A magical OSE Sword that is 1d6+3 will still have a linear profile:</p><p><img src="img/OSE magical sword (1d6+3)436115164076733980.png"/></p><p>While a hypotethical AFF magical sword could be:</p><div class="damage-chart"><table class="damage-chart"><thead><tr><th>Damage Roll →</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7+</th></tr></thead><tbody><tr><td>Maybe Magical Sword</td><td>6</td><td>6</td><td>6</td><td>6</td><td>8</td><td>8</td><td>10</td></tr></tbody></table></div><p>Which may look quite similar but has a very different profile than the previous sword we’ve shown:</p><p><img src="img/Maybe Magical Sword-648736103762881358.png"/></p><p>All these graphs are just a quick way to convey the idea that by using damage charts, you can have bespoke damage profiles that move beyond linearity and bell curves. This leads to weapons and attacks that feel unique. You’re no longer restricted to having an upward linear line of damage. You can go crazy. Let’s build two very strange weapons using damage charts.</p><h3>The Sword of Good and Evil</h3><p>Long time ago, some wizard-scientists were attempting to create the perfect prince for their kingdom. They created a machine that would split an unborn child into twins, one containing the good essence of the original child and the other containing its evil side. The king and the wizards had a plan, to use the machine in the pregnant queen while she slept, wait for the twins to be born, and kill the evil one. The good, perfect prince would eventually grow and lead their ringdom into a perfect utopia.</p><p>Well, or that was their plan.</p><p>The machine worked, but once the twins were born, they realised they had no way of knowing which child was the good and which was the bad. So they ended up raising them both and hoping to find out as they grew up.</p><p>That didn’t work either and in the end there was a civil war between the good and the evil princes, and no one knew which was which. The wizards-scientists wanted the war to be over and, amidst their desperation, they created a reintegration ray. That would fuse the two princes back together. It was best to have good and evil back together than risk the ringdom collapse.</p><p>During the last battle, when the two princes were crossing swords inside the throne room, they used their ray. After the blinding light, good and evil were reunited, but the princes were nowhere to be seen. Just their swords remained on the floor, fused into a single weapon</p><div class="damage-chart"><table class="damage-chart"><thead><tr><th>Damage Roll →</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7+</th></tr></thead><tbody><tr><td>Sword of Good and Evil</td><td>2</td><td>8</td><td>2</td><td>8</td><td>2</td><td>8</td><td>10</td></tr></tbody></table></div><p>and the graph:</p><p><img src="img/Sword of Good and Evil-1004130773745181544.png"/></p><p>That sword has both good and evil inside it. The good side of the sword wants the player to succeed and will contribute to the damage. The evil side wants the player to fail and will sabotage the attack. This duality is part of the game mechanics. The damage profile for that sword oscillates. You can have a very good roll or a silly attack.</p><p>Enhancing that with good roleplay and group interaction lead to a much more enjoyable damage calculation experience than simply rolling direct damage dice.</p><p>Not convinced? Let’s create another weapon.</p><h3>The Spear of the Worthy</h3><p>A magical spear that excels when held by someone worthy of its magic. It can be built with a simple damage chart:</p><div class="damage-chart"><table class="damage-chart"><thead><tr><th>Damage Roll →</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7+</th></tr></thead><tbody><tr><td>Spear of the Worthy</td><td>4</td><td>4</td><td>6</td><td>6</td><td>8</td><td>8</td><td>20</td></tr></tbody></table></div><p>That is remarkably similar to the standard spear damage chart from Troika! except that the standard spear maximum damage is 10 and here it is 20. What that means is that on the hand of a common person, this spear behaves just like any other spear.</p><p>But when this spear is used by someone who just rolled six on the damage dice and then <i>tested their luck successfully</i>, it inflicts a terrifying amount of damage. These rare situations are the stuff of legend. This is how a Cyclops can be killed by a single hero and his spear, because they were worthy.</p><p>It is a simple weapon that instead of always giving bonuses behaves exactly like any other weapon of its kind until the stars are right and the player is lucky (or has some other way to get the modifier).</p><h3>Final words</h3><p>I hope that this brief post inspired you to see damage charts with more fondness. They can lead to brilliant weapons and attacks because they are much more flexible than a simple die roll plus bonuses.</p><p>When it comes the time for you to write your next hack, I hope you consider adopting damage charts. They can add a lot of flavour to your game.</p><p>Also, I’m keen on reading feedback and comments from you all, don’t hesitate to reach out.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-12-10T00:00:00+00:00</published><updated>2021-12-10T00:00:00+00:00</updated><title>Tired of Netflix</title><link rel="alternate" href="https://andregarzia.com/2021/12/tired-of-netflix.html"/><id>https://andregarzia.com/2021/12/tired-of-netflix.html</id><summary type="html"><![CDATA[<p>I’m tired of Netflix. I don’t believe they’re treating series the way they should. There is a ton of stuff about them being a data-driven company, how they measure and track everything so that they know us better than ourselves, yada yada. I think that is just a way to treat series as opaque commodities and it proves a lack of understanding about how fandoms and memorable series grow.</p><p>Netflix wants all their series to be a stellar success from the get go. There is no such thing as adjusting the series or letting the series grow and learn about itself. It is either an astounding success or it is dead. They have enough money to keep producing series and killing them as fast as they want, and then letting the very few cases of astounding success be renewed for further seasons.</p><p>Looks to me as if the Netflix series development workflow is to throw mud onto the wall and see what sticks. As a series, it is Hunder Games for you! You have one season to win over whatever else launched alongside you. If you falter or stumble on the way, you’re cancelled.</p><p>The recent cancellation of Cowboy Bebop live-action series is the tipping point for me. I love Cowboy Bebop as an anime. It is probably among my most cherished media products of all time. I really love it. The live-action series for me was a very different product. You can’t expect an anime to be transposable to live-action without language changes. That is OK. Did I love the live-action series? No, but I liked it well enough to keep watching. I could definitely see that there was potential for it to be great. They just needed to tweak it a bit in terms of tone and acting. The production value was great, the soundtrack was on par with the original, and the overall themes were there. It had the potential to grow.</p><p>And that for me is the crux of all that is happening in contemporary TV series made by streaming services: they are a radically different product than what used to be developed for cable. Let me walk you through this. We have a lot to unpack.</p><p>A run-of-the-mill TV series from the 90s had usually between 22 and 26 episodes per season. They were usually aired weekly. This means that a season took a long time IRL to be completed. This time between episodes helped fuel the fandom. Cliffhangers have a totally different feel if you have to wait a whole week to finally see what happens. Theories, Easter eggs, discussion boards, blogs, articles, all were in frantic activity between episodes. Not only people were analysing the heck of what happened in the most recent episode, but they were also doing many predictions and speculating about what would come next. I remember <em>lostmania</em>, I was there 3000 years ago.</p><p>With very short seasons, which are currently the norm, of about six to eight episodes, you don’t have enough time to engage with the material. Especially since Netflix often just dump the entire season at once. There is no time for the audience to develop into a fandom. There is no time for articles, speculations, commentary when it becomes a game of who can binge watch it faster. Just ask any famous YouTuber reviewer about the frantic pace they need to work at when an important series drop.</p><blockquote><p>Short seasons and binge watching makes consumers, not fans. By developing series this way, Netflix is fighting for your attention, not your love.</p></blockquote><p>Since seasons used to be longer and episodes were aired weekly, series often started airing before they wrapped production for the season. This permitted the production team to adjust and tweak the series while it was being produced based on feedback and reactions from the audience. Very often these days, an entire season will wrap production before airing a single episode. There is no time for the team to tweak anything. Instead of being able to learn and adapt weekly (not weekly, but probably monthly), the current teams can only change anything in their series if they end up being renewed for a new season. In most cases, if they’re renewed, they won’t change much or try to tweak much because of the chance of it backfiring and them being cancelled in the second season.</p><p>A TV series used to be a different product than movies. Movies are basically the production team throwing their vision at you, which is fine. I love them too. TV series used to be a dialogue between production and audience, with both sides contributing, or at least with the production attempting to listen every now and then. These days they might do a screen check with a focus group and that is it, not the same thing in my opinion.</p><p>Many of the series I love have only found their soul in later seasons. A good example is my beloved <em>Babylon 5</em>. B5 is a masterpiece of storytelling. It is an epic space opera with the best character arcs I have seen in SFF television. Damn great TV, if you ask me. The first season was full of potential, but it was not the best season. Heck, I’d argue that B5 only really starts in the second season. Under the current way Netflix works, I’m sure B5 would have been cancelled before it could astound us with its storytelling.</p><p>This is true of all slow-burner series with long arcs. Series that combined mayhem of the week with a pinch of continuity such as The X-Files simply can’t be made today. There is no time for us to engage and care for Moulder and Scully if all we get is a single season. Without the kind of dialogue that happens between audience and production team, the X-Files could not tweak the story and chemistry between our beloved investigators. It would just be cancelled. The same is true of Buffy, it only finds its soul later, after the first season.</p><p>Recent series like the live-action Cowboy Bebop, Marco Polo, even Firefly, didn’t get the chance to grow into what they could really be because Netflix is just too happy to cancel and try something else. That is why you don’t get new fandoms. That is why there is nothing similar to <em>lostmania</em> today. There is no time for that kind of relationship between audience and series to develop.</p><p>If you care to check what current day series have a sizeable fandom and engagement, you’ll see that most of them are not original IP. They’re mostly adaptations. The Witcher had a massive gaming community to back it up, and a sizeable fantasy book community as well. The Wheel of Time has a massive fandom because of the books. Developing new IP is easy, what is almost impossible is to make people care about it with just a single short season. Arcane did it, but then again Arcane had all the LoL fans and it is a fucking masterpiece. Those two things don’t appear in combination very often.</p><p>I’m tired of wanting to engage with Netflix series because I don’t trust Netflix to allow a series to grow and realise their potential. The producers know this too, that is why they cram the highest stakes so early into the episodes. That is why characters develop relationships at light-speed. They’re trying desperately to compress what would amount to a couple longer seasons’ worth of emotional investment into a single brief season because if they don’t do that, they’ll be cancelled. That is how you get love at first sight in episode one and world destroying cliffhanger in episode five. In the X-Files, the first time Moulder calls Scully by her first name is on episode 13 of the first season, that would put it in the second season of a current day’s series.</p><p>Basically Netflix doesn’t give enough time for series to grow, because of that it becomes impossible to develop a fandom. Without a fandom, there is no sustainable engagement with that property, and the series gets cancelled. I’m breaking this cycle, I will go back to books and other services, I’m tired of this broken relationship with Netflix’s original series.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-07-26T00:00:00+01:00</published><updated>2021-07-26T00:00:00+01:00</updated><title>Book Review: The 7½ Deaths of Evelyn Hardcastle</title><link rel="alternate" href="https://andregarzia.com/2021/07/book-review-the-7-deaths-of-evelyn-hardcastle.html"/><id>https://andregarzia.com/2021/07/book-review-the-7-deaths-of-evelyn-hardcastle.html</id><summary type="html"><![CDATA[<p><a href="https://app.thestorygraph.com/books/ce8af458-dcb6-4a96-bb6c-b1fa391defa8">The 7½ Deaths of Evelyn Hardcastle</a> is a cozy mystery with a very interesting premise: it is a mashup of <em>Groundhog Day</em> and <em>Agatha Christie’s novels</em>. As a reader, we’re presented with the familiar setup of a large English manor house full of interesting characters—each hiding their own secrets and agenda—and a murder to solve. What makes the novel unique is its interesting time loop mechanics: The day will repeat itself until the main character can solve the murder. In essence, the main character is trapped in this mystery, not allowed to leave this fateful day unless he can find out who killed Evelyn Hardcastle.</p><figure><img src="/2021/07/img/seven-deaths-cover.jpg" alt="The 7½ Deaths of Evelyn Hardcastle." style="width: 158.5px;"/><figcaption>The 7½ Deaths of Evelyn Hardcastle.</figcaption></figure><p>It is a masterful book, and I can only imagine how much like the authors wall would look like one of those walls full of papers, photos, and connecting strings we often see on conspiracy theory character representations on TV. It is a very intricate time loop, Stuart Turton writes his story with extreme care for details and to make sure the time loop works. It is delightful to experience all of it, it is much better for us than it is for Aiden (the MC) who is at the same time an unwilling detective, but also a victim of sorts.</p><p>This book won many awards including being selected as a book of the year by the Guardian, not a small feat considering it is a debut novel. I just wish I could write as well as Stuart for my debut novel. I think he did a great job and am already looking forward to reading his other works.</p><p>If I have a single criticism about this book is that I think it starts a bit slow. It takes a while for the story to jump from it’s Agatha Christie mold into it’s Groundhog Day tropes. I wish this happened a bit faster, but let’s be honest and assume that I enjoyed it anyway.</p><p>I recommend this book for every one who enjoys a good old murder mystery. Those among us who are a bit bored of the usual tropes in these books will be pleasantly surprised for this book packs a lot of cool story beats and tropes that we don’t usually read on the ordinary cozies. I don’t want to spoil your reading experience by revealing them, just let me say that the book is more than simply Agatha Christie + Groundhog Day, there is more to it and I think you’ll enjoy it.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-07-25T00:00:00+01:00</published><updated>2021-07-25T00:00:00+01:00</updated><title>Four versions of my drink mixing machine</title><link rel="alternate" href="https://andregarzia.com/2021/07/four-versions-of-my-drink-mixing-machine.html"/><id>https://andregarzia.com/2021/07/four-versions-of-my-drink-mixing-machine.html</id><summary type="html"><![CDATA[<video src="/2021/07/img/drinks.mp4" controls="controls" alt="A video showing my fourth machine working."></video><p>Found a little video of a drink mixing machine I built in late 2018. It was a cute machine. This was the fourth iteration of such machines for me.</p><figure><img src="/2021/07/img/drink1.png" alt="Drink Machine, Version 1." style="width: 428.5px;"/><figcaption>Drink Machine, Version 1.</figcaption></figure><p>The first one was basically a styrofoam box with ESP8266 (Tensilica Core) and programmed in Lua. A spark made me want to use something else. Fitting the fancy web interface was proving a bit problematic, so I built a new machine.</p><figure><img src="/2021/07/img/drink2.png" alt="Drink Machine, Version 2." style="width: 450.0px;"/><figcaption>Drink Machine, Version 2.</figcaption></figure><p>The second was built with a Raspberry Pi (ARM) and kept programming it with Lua. I got a little aluminium trolley, the kind they used in Brazil to carry nail polishers in salons, and built the machine around it. This machine was presented at <a href="/2017/06/luaconf-2017.html">LuaConf 2017</a>.</p><figure><img src="/events/2017/braziljs/machine.jpg" alt="Drink Machine, Version 2 Mark 2." style="width: 1632.0px;"/><figcaption>Drink Machine, Version 2 Mark 2.</figcaption></figure><p>People asked me to build a JS version, and so I did. It was the same hardware but I replaced the Raspberry Pi with a Tessel 2 board (MIPS + ARM). Tessel runs NodeJS with some really user-friendly modules. It feels like doing NodeJS stuff but controls hardware, it was a novelty way back when. I presented this machine at <a href="/2017/08/braziljs-2017-porto-alegre.html">BrazilJS 2017</a>.</p><figure><img src="/events/2018/gdgcoimbra/machine.jpg" alt="Drink Machine, Version 3." style="width: 2016.0px;"/><figcaption>Drink Machine, Version 3.</figcaption></figure><p>Once I moved to the UK, I left all that stuff behind. Then people from the GDG Coimbra asked me to give a talk on their <a href="/2018/11/gdg-devfest.html">GDG DevFest in 2018</a>, and they asked for a drink mixing machine. So I build a new one. Same software as the BrazilJS version, but the hardware had a much smaller footprint to make it easier to carry on a plane and assemble at the location.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-07-08T00:00:00+01:00</published><updated>2021-07-08T00:00:00+01:00</updated><title>Launching the MVP for Little Webby Press</title><link rel="alternate" href="https://andregarzia.com/2021/07/launching-the-mvp-for-little-webby-press.html"/><id>https://andregarzia.com/2021/07/launching-the-mvp-for-little-webby-press.html</id><summary type="html"><![CDATA[<p>Today I’m launching the initial version of <a href="https://little.webby.press">Little Webby Press</a>, an online service to build eBooks and <em>a website for the eBook</em>. It allows the writer to go from a <em>folder with manuscript files</em> to a static website and eBook with a single click. Check the video below for a quick introduction, and to see it working:</p><p><iframe width="560" height="315" src="https://www.youtube.com/embed/rqsmSJY21Vw" frameborder="0" allow="accelerometer" allowfullscreen="allowfullscreen"></iframe></p><h2 id="section4505">How it works</h2><p>The author creates a folder on their own machine and use a plain-text editor to create their manuscript files inside that folder. They create a <a href="https://little.webby.press/documentation/en/book-configuration-specification/book/introduction.html">book configuration file</a>—usually in TOML, but YAML and JSON are also supported—that sets all the configuration options for the Little Webby Press workflow.</p><p>The folder is loaded into the Web Application and the author can then generate an eBook and a Website based on their manuscript. If they notice they want to change something, or they progressed in their writing and want to generate a new eBook, they can simply reload the web app, open the folder again, and use the action buttons to generate the deliverables. Every time there is a change to the manuscript folder, it needs to be reloaded. There is no way for Little Webby Press to monitor your disk files. Still reloading is as simple as just dragging and dropping the folder on the UI again.</p><h2 id="section4506">Why does it exists?</h2><p>Mostly because I wanted to build it. I have been publishing books for many years now, and decided it was time for me to be on control of my tools. Another important aspect is that I wanted to build something that worked purelly on the client-side so that it could be offered for free and without user accounts.</p><p>There are many tools out there to generate eBooks and even more tools to generate static websites. They range from very simple to use SaaS such as Leanpub, to complex command-line tools such as Pandoc. There is a place for everyone and I wanted to create something that reduced friction between writing your book and actually getting something you can share.</p><h2 id="section4507">Highlights</h2><p>You can write your manuscript files using Markdown, Asciidoctor, Textile, or raw HTML chunks. You can mix and match them in the same folder as long as you use the correct file extension for each format. I don’t know of any other SaaS that allows you to write in all these formats.</p><p>The configuration file can be written in TOML, YAML, or JSON. Again providing the author with the flexibility to use whatever configuration format they’re more comfortable with.</p><p>It supports custom templates—even though the documentation about them is not yet ready—allowing the author full control over the workflow. Basically, add a <em>_theme</em> folder inside the manuscript folder, and place your custom template inside it as it’s own folder. For example, if your template is named <em>custom</em>, then the folder would be <em>_theme/custom/</em> and the configuration would have a line <em>theme = “custom”</em>. I will document that shortly.</p><p>Even though the feature above is not documented, Little Webby Press has <a href="https://little.webby.press/#documentation">extensive documentation</a> that was written using Little Webby Press itself.</p><p>There is initial support for <a href="https://webmonetization.org">WebMonetization</a>. I think that it is a great standard that could foster a sustainable Web that does not rely in Ads or selling user data.</p><h2 id="section4508">I’m developer-curious, tell me about the source</h2><p>The source-code is available at <a href="https://github.com/soapdog/little-webby-press">the Little Webby Press Github repository</a>. The license for the source is MIT, so use it any way you want. There is no backend, everything is processed and assembled in the frontend. I need to be honest here and make a bit of a disclaimer:</p><blockquote><p>This is a project that I started to make for myself, and then decided it was cool enough to be something I’d share with others. I got a grant from <a href="https://grantfortheweb.org">Grant For The Web</a> to build it, and that is how I could afford to devote time to this project.</p><p>The source-code is messy. There are two major functions, one to generate the epub and another to generate the website, it is basically waterfall oriented. Waterfalls are pretty, sit down, enjoy the view.</p></blockquote><p>Yep, I said it. The source is not the pristine webapp you’re used to see when someone go public with a project. But, hey, I’m a writer first and a developer second. I’m happy with my source, and my results. That’s enough for me.</p><p>The whole system is built with Rollup from Svelte components and some extra JS files. There is a fake filesystem in memory, courtesy of BrowserFS, that allows the waterfalls mentioned above to be coded as if we were dealing in NodeJS with a local disk filesystem. It is all a lie, there is no file system, but don’t tell that to the routines, they’re fragile already.</p><p>Once those waterfalls finish assembling everything on the in-memory filesystem, a zip file is created with JSZip and downloaded. You can host the deliverables in any server that supports static files.</p><h2 id="section4509">Final words</h2><p>This was just a simple post to make it real. I have been working in this for a while, and a lot of it was rushed because I lost one of my jobs just before the Pandemic hit. Both the Pandemic and that job loss caused an impact in my life, and it took me a while to recover and get this rolling. The grant was fundamental for allowing me the time to breath and safety to spend time researching better workflows and test driving this with my own books.</p><p>There are lots of opportunities for improvement, and I’ll keep working on this. Little Webby Press is a project I love and use, I think it can grow to be a wonderful alternative for authors everywhere. I hope you enjoy it too.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-06-21T00:00:00+01:00</published><updated>2021-06-21T00:00:00+01:00</updated><title>Finding time to read</title><link rel="alternate" href="https://andregarzia.com/2021/06/finding-time-to-read.html"/><id>https://andregarzia.com/2021/06/finding-time-to-read.html</id><summary type="html"><![CDATA[<p>This is the second day in the same week that I managed to do one thing that I really love: sit down outside for hours reading, watching life happen, and eventually working. This used to be how I read most books since my days at the uni. I’d sit near the sea, or at a coffee shop, and just read.</p><p>I read Isaac Asimov’s Foundation while sitting on concrete blocks overlooking Icaraí beach and the Guanabara Bay. I read World War Z on a tiny Palm Pre2 on the bus commuting between cities. On the old ferry boats that crossed the bay, while they still had balconies on the side with park benches, I read Snowcrash. Drinking mate, eating <em>pão de queijo</em>, and reading some eBook was a staple of my weekday mornings in Rio.</p><p>Once I moved to the UK, I kept trying to recreate these moments. It was very easy to find pleasant places to read for there are a gazillion parks and nice coffee shops near me. What became harder was actually finding the time to do it. See, while I was living in Brazil, I was living family-owned property without paying rent and was earning in American Dollars. So due to the favourable exchange rate, it was quite easy to work less hours and free time to more pleasurable activities. My job still the same, I’m still paid in Dollars, but now the exchange rate and the obscene rents of London work against me.</p><figure><img src="/2021/06/img/ebook-park.jpg" alt="The Kobo Mini is still a great eReader to take to a park." style="width: 800.0px;"/><figcaption>The Kobo Mini is still a great eReader to take to a park.</figcaption></figure><p>If there is one thing that this whole pandemic made evident to me, besides how incompetent most governments are and how selfish and stupid a lot of people behave, was that we’re here for a short period of time, and if we don’t carve the necessary time to be happy, we won’t have that time later.</p><p>A lot of people derive their identity and happiness from their jobs and careers. I have friends to breath and exhale their jobs in a mist of bliss, completely happy where they are and how they are. I’m not really on that camp, I don’t loath my job, I just don’t find fulfilment in it and it is no longer a part of how I define myself. In summary, my job doesn’t make me happy and I need to find enjoyment elsewhere (like most people to be honest).</p><p>A large part of my happiness originates in storytelling, both absorbing stories and also telling them. At the beginning of the year, I decided that I was going to begin a long transition from being a <em>software developer who enjoys storytelling</em>, to <em>a storyteller that occasionally plays with development</em>. Part of this transition process is finding more time to enjoy reading like I used to. Not stealing some hours between jobs to quickly read some pages from a book, but to actually spend long and dedicated time to just sit down and enjoy the scenery and a book.</p><figure><img src="/2021/06/img/ebook-coffee-shop.jpg" alt="Enjoying reading inside a coffee shop on a cold day before the pandemic." style="width: 800.0px;"/><figcaption>Enjoying reading inside a coffee shop on a cold day before the pandemic.</figcaption></figure><p>This brings me to today. An ordinary day in Islington, raining horizontally and with the temperature at about 13℃. By most accounts these would be a day to stay inside, and readers would attempt to stay cozy under blankets reading from the comfort of their homes. I’m outside, on a coffee shop enjoying the wind and rain and writing this blog post before returning to my book.</p><p>I’m tired of pretending that I don’t enjoy the wind and rain. As a Brazilian living in these islands, I’m kinda expected to denounce the weather as evil and cry over the loss of our beloved tropical paradise climate. I’m supposed to be cheerful in Summer and Spring when this land approaches temperatures that would be classified as Winter where I come from but that are the best we can get here, and be depressed and salty during the rest of the year. I refuse to do that. I enjoy the wind and the rain just as much as I enjoy tropical climates, I can find pleasure in both.</p><p>And it is with the peltering rain falling in the fountain near me, hearing the slow buzz of the wind, and drinking from a nice cup of coffee that I find myself having a wonderful time. I’m at my best alone time when I’m outside. We often talk about <em>quality time</em>, and having it with our loved ones. We don’t often talk about <em>having time for ourselves</em> and being able to enjoy our own company while doing what we want. This is my quality time, enjoying a book outside regardless of the light and geometrically-challenged rain.</p><figure><img src="/2021/06/img/writing-coffee.jpg" alt="Also using these moments to write." style="width: 600.0px;"/><figcaption>Also using these moments to write.</figcaption></figure><p>Finding blocks of time like this is something that I treasure. From now onwards, I expect them to once more become the norm in my life and not a special occasion. This is the second day that I managed to get out like this, I hope that every week has at least two days like this.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-06-17T00:00:00+01:00</published><updated>2021-06-17T00:00:00+01:00</updated><title>Book Review: Senlin Ascends</title><link rel="alternate" href="https://andregarzia.com/2021/06/book-review-senlin-ascends.html"/><id>https://andregarzia.com/2021/06/book-review-senlin-ascends.html</id><summary type="html"><![CDATA[<p>What to say about <a href="https://app.thestorygraph.com/books/1be04da3-8267-42a1-a4ef-dc36dd0541d7"><em>Senlin Ascends</em></a>? Saying it is the first book in the books of babel series by Josiah Bancroft is saying something true, but is is also saying something that will only become relevant by the end of this review.</p><div class="figure"><p><img src="/2021/06/img/senlin-ascends.jpg" alt="Senlin Ascends"/></p><p class="caption">Senlin Ascends</p></div><p>I first learned about this book by watching a review about it by <a href="https://www.youtube.com/watch?v=zbp_2QemW7k">Elliot Brooks</a> in which she said that book made her feel dumb, but in a good way. She mentioned it was in the intersection between fantasy and literary fiction, and that was more than enough to pick my interest.</p><blockquote><p>Her channel is fantastic, I really recommend you subscribe to it. Many of my recent favourite books were books I discovered through her reviews. I agree with her a lot, and think she has excellent taste in books. I’m also looking forward to reading her own novel <em>Peace and Turmoil</em>.</p></blockquote><p>In Senlin Ascends we follow Thomas Senlin, the uptight headmaster of a small village school, as he travels to the Tower of Babel to spend his honeymoon with his wife Marya.</p><p>The Tower myths and legends enthralled Thomas. Being from a small village, all his knowledge of it comes from secondary sources such as travel guides. He couldn’t imagine a better way for Marya and him to enjoy travelling, if not for visiting the wonder of the world: The Tower of Babel.</p><p>No one knows who built the Tower of Babel, or even how high it is since it pierces through a cloud lawyer that is perpetually around some of its higher levels. It is a monumental structure, and each floor is its own ringdom (aka ring kingdom) with its own people and government.</p><p>People ascend the tower either through the stairs, or by using balloons and airships. No one is really sure what happens on the upper levels.</p><p>At the ground level, seven railways connect the tower to the rest of the world. And it is through a train that Thomas comes near the Tower.</p><p>A caravanserai-like market surrounds the tower, with tents and stalls as far as the eyes can see.</p><p>It is with this setup that the story begins. I haven’t given you any spoiler. Somehow, Thomas gets separated from Marya, and the entire book is about his adventures as he ascends the Tower of Babel looking for his wife.</p><p>Senlin Ascends feels like a steampunk story sometimes. It is as if the author put the best of steampunk into a blender with some classic English novels. The way the reader experience the story feels like literary fiction. That book is tough, but it is very rewarding, like most good literary fiction.</p><p>What the author gives us is a unique story and approach to the myth of Babel. I don’t think I have ever read a book like this; it is so fresh. As Tom moves from his village, to the market, into the ground level of the tower, and starts ascending, we’re presented with an increasing level of weirdness.</p><p>Being weird for weirdness’ sake is easy, just look at the bad movies by Tim Burton (not the good ones, look at the bad ones). One of the hardest games an author can ever win, is piling weird stuff on top of even more weird stuff while still making it all make sense from an internal logical point of view. You see something weird, and then some time later you go: <em>OMG, that shit was because XYZ</em>. This books favour a curious mind that loses itself on pondering about the inner workings of the Tower.</p><p>It is very hard to write about this book giving no spoilers about what goes on in each floor, but I think this book is best experienced knowing nothing about any of the levels. I just want to say that they are unique, and that soon you’ll be nervous about what each new floor will be like.</p><p>Josiah Bancroft is a really wonderful storyteller. You can feel that he is having as much fun telling this story as we are reading it. If you want something new to read that is probably unlike other fantasy novels, give this one a try.</p><p>And this is just the first book. There are four books in The Books of Babel series. If the first one was this good and this strange, I can’t wait to see what the other three will be like.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-06-08T00:00:00+01:00</published><updated>2021-06-08T00:00:00+01:00</updated><title>Book Review: The Name Of The Wind</title><link rel="alternate" href="https://andregarzia.com/2021/06/book-review-the-name-of-the-wind.html"/><id>https://andregarzia.com/2021/06/book-review-the-name-of-the-wind.html</id><summary type="html"><![CDATA[<div class="figure"><p><img src="/2021/06/img/tnotw-1.jpg" alt="The Name Of The Wind Cover"/></p><p class="caption">The Name Of The Wind Cover</p></div><p>I have been an avid reader for as long as I can remember being able to read. My parents have an extensive collection of Science Fiction books from the golden and silver eras in Portuguese and I grew up reading them. They also had a lot of Fantasy books, which I devoured just as fast. The first book I remember — in hindsight, of course — making an impact on my life was The Lord Of The Rings.</p><p>While I was living in Brazil, I was mostly a Science Fiction reader. I still read the occasional book from other genres but it was usually because of the authors more than the genres.</p><p>Every year while all my grandparents were still alive and living in São Paulo, we’d travel from Rio de Janeiro all the way there — which is not that far, about seven hours by car — for Christmas.</p><p>One of my fondest memories happened during one of those travels. My city, Niterói, has very few bookshops. It was really hard to buy anything that was not mainstream bestsellers there, so I’d wait all year to travel to SP and buy books there, for they had amazing book shops at a walking distance from my grandparents.</p><p>At that time, I already knew enough English to be able to enjoy reading some of my favourite authors in their original editions. Most of those authors are never translated into Portuguese, or even sold in Brazil. Learning English opened literature for me.</p><blockquote><p>Yes, Brazilian literature is damn great. There is a ton to love about it. We just don have as many Science Fiction or Fantasy writers.</p></blockquote><p>On that specific year, I had discovered Terry Pratchett. I read horrible translations of the first two Discworld novels, and was keen on getting my hands on the original pocket books.</p><p>We arrived at the book shop and the interaction went somewhat like this:</p><ul><li><strong>me:</strong> “Do you have Terry Pratchett pocket books in store?”</li><li><strong>clerk:</strong> “Yes, we do. :-)”</li><li><strong>me:</strong> “Fantastic! I’m buying it.”</li><li><strong>clerk:</strong> “Ok, which one?”</li><li><strong>me:</strong> “Everything you have. One of each. Thank you.”</li></ul><p>I got the whole shelf, and spent the following year (actually just a couple months) reading everything.</p><hr/><p>Years passed, I got married and eventually moved to London. It was here, away from my bubble of IRL friends and family that I’ve found myself with too much time in my hands. Going to bookshops, and discovering new authors has been my favourite hobby in my new country.</p><p>Somehow, I ended up reading more Fantasy books than Science Fiction. It was probably because I found more reviewers on authortube talking about Fantasy than about Science Fiction, but I discovered and re-discovered so many authors in the last two years.</p><p>And that brings us to Patrick Rothfuss and The Name Of The Wind. He was first mentioned to me by a colleague back in Brazil. At the time my own arrogance made me ignore the recommendation. I was much more interested in spreading awareness about the books I liked than learning about books I might like. Today, I recognise the errors of my past self, and how I could have enjoyed this marvellous book many many years ago.</p><p>Pat Rothfuss first re-entered my awareness after some Youtubers I follow kept mentioning him and his beautiful prose. My gold standard for prose has been Ursula K Le Guinn. She still a source of unmeasurable wonders for me. But my boi Pat knows his letters too.</p><p>One day, I stumbled on a sort of bootleg Youtube channel that edits (mostly re-cuts) parts of Pat twitch streams and repost it. I watched him talking about how The Name of The Wind was basically a tale of a man trying really hard to get into a library. I was like: <em>“is this it? a book where what happens is a guy trying to get into a library?”</em> needlessly to say, I had to check it out.</p><p>I got the <em>Kobo Preview</em> for the book…</p><p>I read it for ten minutes before packing my things and walking to Foyles to buy the damn book.</p><p>I got a hardcover version. It was a bit bulky, so I also got the eBook so that I could read it when I was not at home.</p><hr/><p>When I was almost halfway through the book, I walked again to Foyles and got everything they had from Patrick Rothfuss. I got The Wise Man’s Fear and The Slow Regard of Silent Things. I also got the deluxe hardcover 10th anniversary edition even though I already had the non-deluxe 10th anniversary edition, all because I wanted the illustrations.</p><p>It was the first time since that day in my teenage years when I bought the whole Terry Pratchett shelf at a book shop in Brazil, that I went and purchased every single book I could find by an author in one go.</p><div class="figure"><p><img src="/2021/06/img/tnotw-4.jpg" alt="Gotta catch them all"/></p><p class="caption">Gotta catch them all</p></div><p>I’m obsessed about this book on so many levels that I don’t think I can do a proper review. I can’t make it justice. It is a wonderful book that catapulted itself to my favourite books shelf, maybe it might even be my favourite book. It has everything.</p><hr/><p>I’m a sucker for lore. I’m a lore sponge. Give me a deep complex lore, and I will pour myself into it until it feels more alive and real to me than the real world. The Name Of The Wind not only has lore to satisfy any need, but it presents it masterfully. Contradictory tales, dubious accounts, myths, and a storyteller that knows all the buttons to push. Lore, just like it’s less hipster cousin <em>Story</em> is not only about what happened, but the telling of what happened. Storytelling is not infodump. Patrick is a storyteller.</p><p>Kvothe is not your typical hero. He might not even be the hero. He definitely has a story to tell, he is also a damn good storyteller.</p><p>The cast of characters is fresh. The challenges and tribulations they experience are also beyond your typical cookie cutter Fantasy tale. It is true that in the last ten years, more authors have been pushing Fantasy books that are just as fresh, but when this book came out, it was a really fresh package.</p><p>I love how the world feels modern in a steampunkish and scientific way without going too deep into those tropes and ceasing to be magical and fantastic.</p><p>The Name Of The Wind is at the same time, a very small story and a very large one. It tells you of an innkeeper and his life as he narrates his exploits. It also permeates the whole world and the consequences of his actions.</p><p>Very few authors can write these intimate stories and still make them epic with larger ramifications. Patrick is a damn fine storyteller, if not one of the best I have ever seen.</p><p>Every book has its faults. Not all books will appeal to every one. This book called to me. I’m happier after reading it. I recommend it to anyone with an interest in fucking good storytelling, beautiful prose, music, lore, and drama.</p><hr/><p>I’m already a couple chapters into the second book. Usually, when I read reviews or commentaries about The Name Of The Wind, I always notice people commenting or even ranting about how long Pat is taking to write the third book.</p><p>I don’t care for that at all. Patrick can take as long as he wants and I’ll be cheering him all the way. There are many other books to read until the third book is ready. I’m not in a hurry, I’m enjoying the ride.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-05-27T00:00:00+01:00</published><updated>2021-05-27T00:00:00+01:00</updated><title>Goodriddance: a WebExtension to help search books from Goodreads in The StoryGraph</title><link rel="alternate" href="https://andregarzia.com/2021/05/goodriddance-a-webextension-to-help-search-books-from-goodreads-in-the-storygraph.html"/><id>https://andregarzia.com/2021/05/goodriddance-a-webextension-to-help-search-books-from-goodreads-in-the-storygraph.html</id><summary type="html"><![CDATA[<p>Like many other authors, I’m also a voracious reader, and part of my daily <em>slow morning routine</em> is checking some reviewers and booktubers I like for new book recommendations. A way that many people share book recommendations is by linking to <em>Goodreads</em>. I don’t really like that site and switched to <a href="https://thestorygraph.com">The StoryGraph</a> while they were still in beta.</p><p>I have been reading more books than in the recent years, but if my usage of <em>The StoryGraph</em> is the cause or the effect behind my recent reading, I don’t know. I’m using it mostly to <a href="/2021/05/getting-my-tbr-list-from-the-storygraph-by-leveraging-applescript.html"></a>(manage my TBR)—which can be viewed <a href="/tbr.html"></a>(viewed here on the site as well)—and to keep track of my reads. I’m also enjoying the book recs it gives me even though most of them are already on my radar.</p><p>Anyway, I was really tired of getting a link to a book on <em>Goodreads</em> and then opening a new tab, launching <em>The StoryGraph</em>, and looking for the same book there. It added repetitive friction to the joy of adding even more books to your neverending TBR. So, I had some time to kill while I waited for a process on my job to finish, and decided to tackle that problem. The result is a new browser add-on for Mozilla Firefox and Google Chrome called <em>Goodriddance</em>. It adds a button to the <em>Goodreads</em> interface that helps you search the same book at <em>The StoryGraph</em>. Check out how it works on the video below:</p><video src="/2021/05/img/goodriddance.mp4" controls="controls" alt="Video showing goodriddance working."></video><p>If you’re also a user of <em>The StoryGraph</em> and would like to install this add-on on your browser, use the links below:</p><ul><li><a href="https://chrome.google.com/webstore/detail/goodriddance/kmdpdoleegnloldooipdifahkjgdoope">Install from Chrome Web Store.</a></li><li><a href="https://addons.mozilla.org/en-GB/firefox/addon/goodriddance/">Install from Firefox Add-ons.</a></li></ul><p>The source code is available at the <a href="https://github.com/soapdog/webextension-goodriddance">“Goodridance repository at GitHub”</a>.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-05-15T00:00:00+01:00</published><updated>2021-05-15T00:00:00+01:00</updated><title>Video: Creating a macOS Droplet with AppleScript</title><link rel="alternate" href="https://andregarzia.com/2021/05/video-creating-a-macos-droplet-with-applescript.html"/><id>https://andregarzia.com/2021/05/video-creating-a-macos-droplet-with-applescript.html</id><summary type="html"><![CDATA[<p>Made a small video today showing the creation of a macOS Droplet using AppleScript. I made it just for fun, and because I realised that many new mac users have not been exposed to AppleScript before.</p><p><iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/4wYO2ubaTrU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="allowfullscreen"></iframe></p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-05-13T00:00:00+01:00</published><updated>2021-05-13T00:00:00+01:00</updated><title>Book Review: Embers Of War by Gareth L Powell</title><link rel="alternate" href="https://andregarzia.com/2021/05/book-review-embers-of-war-by-gareth-l-powell.html"/><id>https://andregarzia.com/2021/05/book-review-embers-of-war-by-gareth-l-powell.html</id><summary type="html"><![CDATA[<p>I’m mixing a bit of <em>slice of life</em> commentary about how I discovered this book and the events in my life that surrounded buying it. This is my blog after all and not goodreads. If all you care is the review, then scroll down until you find the <em>review section</em>. If all you want is a <em>TL;DR</em>, then let it be known that I really liked it and am looking forward to buying the other ones.</p><figure><img src="/2021/05/img/embers-cover.jpg" alt="Kobo Mini is an underappreciated eReader..." style="width: 500.0px;"/><figcaption>Kobo Mini is an underappreciated eReader...</figcaption></figure><h2 id="section4505">Some context about my love of Iain M Banks books</h2><p>I think that before talking about Gareth L Powell’s book, I need to spend some time talking about my love for the Science Fiction of Iain M Banks. I got my first book by Iain by chance, I was doing a long travel from the U.S. back to Brazil and needed something to read on the plane. A title at the airport bookshop pulled my attention in: <a href="https://amzn.to/2R8UDTY">The Algebraist</a>.</p><p>That book took me by surprise and ignited my love for Iain’s work. Soon, I was hooked on his Culture novels and devoured them all. His universe was so fresh, the ideas behind it so clever. Oh, and the <em>ships</em>, don’t get me started on them, I could go for hours. I was deeply saddened when he passed away, and to this day I remember exactly what I was doing when I saw the news.</p><p>Later, I discovered other British Science Fiction authors that I really liked, but still I’ve been missing something similar to The Culture for a while. I don’t mean that I want a clone, or The Culture fan fiction (which is probably great, but not what I’m looking for at the moment), but something that had a bit of similar flavour. If I should summarise what this flavour means, I’d say:</p><ul><li>Artificial Intelligence on ships and robots that goes beyond what a normal human capacity.</li><li>Stories in which the humans, even though paired with AI characters, are still protagonists of their own arcs and not just a useless plot accessory.</li><li>Proper Space Operas that even when telling a small, focused, and localised story is still affected by the events and dynamics of large galaxy-spanning events.</li></ul><p>I don’t want just to read something and think <em>this is just The Culture with another name</em>, I want something new but that impacts me similarly. That’s brings us back to Mr Gareth L Powell.</p><h2 id="section4506">How I found out Embers of War</h2><p>One of my small pleasures in this pandemic is taking long walks in London and maybe going to large book shops to pick a book or five. I’m very fond of coffee carts and the small squares and gardens they have in Islington and Bloomsbury, so I’ll often take my kobo around to read while drinking coffee. It was by checking out coffee carts in London that I discovered the marvellous <a href="http://www.leverandbloomcoffee.co.uk/">Lever & Bloom</a> near Byng Place. My love of their espresso and cinnamon buns has a direct correlation to my discovery of Gareth’s books. I’ve been going to Byng Place to enjoy some quiet and tasty buns on a weekly basis, and when the bookshops reopened, I decided to go without my Kobo and check out the large Waterstones they have there. What more could I want? There is coffee, buns, books, and a quiet green square near the archeology institute.</p><p>There was a huge selection of Science Fiction and Fantasy books at that Waterstones. I’ve been on a binge of fantasy books lately and missed reading a good Sci Fi book. I didn’t had my TBR list with me, so I was a bit lost, which is how I usually discover my favourite stuff to be honest.</p><p> What draw my eyes to Gareth’s book was the cover. The curator at that section, placed one of Gareth’s books with the cover showing instead of the spine like most others. I thought it was pretty and picked it up. He had me at <em>Trouble Dog</em>. I read the ships name, and knew I was going to buy the book.</p><p> I knew nothing about him or his books. The blurb on the back had the correct flavour that I’ve been missing since Iain passed away. I took a photo of the cover and decided to research a bit before buying (I was already carrying three other books).</p><p> Couple days later, with my research done, I was looking forward to buying his book. Instead of walking all the way to Bloomsbury, I decided to go buy his book at the small Waterstones in Angel. They didn’t had it. They didn’t had any book by Gareth there. Now, I consider that a failure of curation to be honest, there absolutely should be one of his books there.</p><p> Not wanting to waste the sunshine outside, I picked my Kobo, purchased the eBook and went to read on the square in front of Waterstones with a nice flat white.</p><p> What a ride that book was!</p><p> </p><h2 id="section4507">The actual book review</h2><p> </p><figure><img src="/2021/05/img/embers-beer.jpg" class="u-photo" alt="I finished reading it over a pint." style="width: 500.0px;"/><figcaption>I finished reading it over a pint.</figcaption></figure><p> As mentioned above, this book ticked the correct emotions and tropes I wanted to read about. I really like how much of the setting is implied instead of explained. We end up not knowing much about <em>the generality</em>, or even <em>the multiplicity</em>, but what few facts and impressions we know speaks volume.</p><p> By implying a setting, the author moves the book at a faster pace than if he had to stop to do infodumps and explain every tidbit. This makes the book feel thriller-ish in parts and this has been a very good call. Makes for a faster read when you need to know what happens next.</p><p> The characters are well realised and I’m quite happy with most of them, even though I find that the arc for Ashton Childe moves too fast, I would have preferred if the last part of his arc would have moved a bit slowed or occupied a larger space of his arc (trying really hard not to do any spoiler here). I understand that this would affect pacing, so it was probably the correct thing to do, and it doesn’t diminish my enjoyment of the book.</p><p> <em>Found families</em> are a trope that is well beloved and quite common in Fantasy, but that I don’t often see in Science Fiction. I really like how it was realised on this book with the members of the <em>House of Reclamation</em> and how each one had a backstory that lead them through this path.</p><p> And the SHIPS!!! So fresh, at the same time super intelligences and angry pack of wolves. I liked everything about them. Trouble Dog is a great character with a well thought out arc and more important coherent actions. Very often I see in other books, AIs taking actions that are needed for the plot but completely incoherent with the character. I’m so happy this didn’t happened in this book.</p><p> <em>Embers of War</em> tells a story that is at the same time small and very large. You can revel in the implied setting and the mysteries hinted at, while still following a small crew trying their best at a rescue operation. I’d recommend this book for anyone who is a Science Fiction, there is something for every one here.Maybe if all you like is Cyberpunk, this might not the best book for you, but if you have any fondness for Space Operas, AI ships, and just damn cool stories, grab this book.</p><p> I’m looking forward to reading the other books in the series, and will keep an eye for Gareth’s books. As someone who is trying to become serious about creative writing, I’m sure I can learn a lot from his books.</p><p> If you like this review and want to buy a copy of the book, consider using my affiliated link, you don’t pay anything extra, but I get a small commission which helps me a lot: <a href="https://amzn.to/3w26l1d">Buy Embers of War by Gareth L Powell</a> at Amazon.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-05-13T00:00:00+01:00</published><updated>2021-05-13T00:00:00+01:00</updated><title>Getting my TBR list from The StoryGraph by leveraging AppleScript</title><link rel="alternate" href="https://andregarzia.com/2021/05/getting-my-tbr-list-from-the-storygraph-by-leveraging-applescript.html"/><id>https://andregarzia.com/2021/05/getting-my-tbr-list-from-the-storygraph-by-leveraging-applescript.html</id><summary type="html"><![CDATA[<p>I’m an avid reader and for the past year, I have been trying to up my creative writing game. Part of it is organising and pushing through books in the field I want to write on, so that I can understand the current trends better. This is of course just my mental excuse to keep buying Fantasy and Science Fiction books pretending it is for research when in reality it is just because I love them and want to read them.</p><p>As an author and human being possessing empathy, I don’t like Amazon very much. I still use them when it makes sense, but I try avoiding their business when I can, specially in areas related to books and writing. Because of that, I migrated from <em>goodreads</em> to <a href="https://www.thestorygraph.com/">The StoryGraph</a> once it became open for beta. I’m quite happy with The StoryGraph and one of my main uses is to keep my list of <em>to-be-read books</em> (aka TBR). Every time I’m reading reviews, or watching videos on <em>booktube</em>, and a book calls up to me, I end up placing it in my TBR. If part of your daily routine is checking out what is going around in sci fi and fantasy book publishing, you’ll soon end up with a huge list of books that <em>you kinda want to check out eventually</em>.</p><figure><img src="/2021/05/img/storygraph-tbr.png" alt="This is how The StoryGraph TBR looks like on their webapp." style="width: 1552.0px;"/><figcaption>This is how The StoryGraph TBR looks like on their webapp.</figcaption></figure><p>There is nothing I can say against The StoryGraph, I’m enjoying it very much and my own reasons for this post are unrelated to the good quality of their service. I’m a fan, and I can see myself paying for it as soon as my trial ends (they have a free plan, I’m just happy with it and want to contribute with my wallet).</p><h2 id="section4505">Owning your own platform</h2><p><a href="https://indieweb.org/own_your_data">Owning your own data</a> is a principle I learned from the IndieWeb that appeals to me in many levels. I’ve had a presence online since the early days of the Internet in Brazil, when our ISP was actually our BBS. Unfortunately, I didn’t care about my data and multiple iterations of my blog, my posts, my photos, have all been lost as whatever services I was using back then folded. I’m done with losing my stuff, I want to be able to either publish things on my own platform and syndicate elsewhere, or at least be able to pick content from third-party platforms and merge it back into my site.</p><p>That is what is happening here, I’m using The StoryGraph to manage my TBR list, but I want that list to have a copy on my own website so that if I ever decide to leave The StoryGraph for any reason, I don’t lose my TBR. I also want a lightweight, cacheable, webpage with my TBR so that I can easily access it from bookshops. Some of the shops I got here in London are in basements and often there is no Internet or carrier connection available. More than once, I’ve been on a shop and couldn’t remember the name of a book or author I wanted to check out. This will help me access my TBR with ease. By the time I was done with the procedure outlined on this post, I had a <a href="/tbr.html">tbr.html</a> at root level on my site, it looks like this:</p><figure><img src="/2021/05/img/tbr-page.png" alt="Simple pages are the best." style="width: 1552.0px;"/><figcaption>Simple pages are the best.</figcaption></figure><p>One of the most important features I’ve added to that page—and that is not shown on the screenshot—is a huge emphasised text saying that I already own a book. More than once, I’ve purchased the same book twice because I forgot I got it months earlier in some bundle or sale.</p><h2 id="section4506">Extracting data from The StoryGraph</h2><p>Now, this is the part where one needs to make a choice. From my subjective point-of-view, there are basically three ways of things when you’re dealing with a small personal project:</p><ol><li>The Correct Way, which is often boring...</li><li>The Wrong Way, but It Works™...</li><li>The Fun Way, which often makes observers thing wtf...</li></ol><p>Some people will adopt the bleeding-edge best practices and fancy stuff when doing small personal projects, as if they’re working on the world’s next unicorn. That is quite right and serves them well, it is just not me. I enjoy programming as a hobby way more than I enjoy doing it professionally. On my personal projects, I want to treat it as a toy, something I play with because it is fun, best practices and common patterns be damned, this is my fun time and <em>I’ll mutate any prototype that looks funny in my direction because I can</em>.</p><p>So, instead of going the boring way with an industry-approved, battle-tested, robust scrapping library. I decided to go with a language I have a lot of fun with: AppleScript.</p><blockquote><h3>Why you need a scrapper anyway?!</h3><p>Oh, I didn’t mention, sorry. Well, as far as I can tell, The StoryGraph has no API for developers. To get my TBR out of it, I’ll need to scrape the DOM.</p></blockquote><p>AppleScript is this fun language that ties into the Apple Events IPC. It is how we used to automate the hell out of our macs when classic MacOS was in its prime time, and it is still a very good way to do stuff on current macOS. It allows you to construct your own workflows and tie separate apps together not unlike UNIX people do at the command-line with pipes but much more fun.</p><h2 id="section4507">Scripting Safari</h2><p>My browser of choice is Firefox, but unfortunately Firefox support for AppleScript is a joke. It basically doesn’t exist. On the other hand, Safari has a lot of AppleScript features, as can be seen in its <em>AppleScript Dictionary entry</em>:</p><figure><img src="/2021/05/img/safari-dictionary.png" alt="Viewing Safari AppleScript API on AppleScript Editor." style="width: 556.0px;"/><figcaption>Viewing Safari AppleScript API on AppleScript Editor.</figcaption></figure><p>Scripting Safari is quite easy, you can basically automate all the workflow with its built-in API. And for the things that you have no API for, you can script <em>“System Events”</em> to simulate GUI interaction. As an example, the script below opens a webpage using Safari and gets it’s author from the meta tags:</p><figure class="fullwidth"><img src="/2021/05/img/get-author-as.png" alt="An AppleScript to get the author of a page."/><figcaption>An AppleScript to get the author of a page.</figcaption></figure><p>As you can see, the code is a combination of AppleScript and JavaScript. Basically, AppleScript is remote-driving Safari and executing JavaScript code on the loaded page. One quirky aspect of <em>do JavaScript</em> command is that if you set a global variable during it’s execution, it is returned to AppleScript. So you can use it to set variables on the AS side of the workflow.</p><h2 id="section4508">How to extract the TBR</h2><p>The workflow used is quite simple, the TBR page is loaded onto Safari. The using <em>do JavaScript</em>, I acquire the number of books in the TBR list. The code for doing that is a bit convoluted because The StoryGraph is using an <em>infinite scroller</em> to load more data as you scroll down. So, to script my way around that, I use <em>System Events</em> to send a bunch of <em>Page Down Keystrokes</em> to the page. This is error prone of course, but my TBR is small and five keystrokes are more than enough to load everything.</p><p>The TBR page carries almost all the information I want, except for the ISBN which is on each book detail page when available. A loop is used to iterate over each book, opening it’s book detail page and scraping for the ISBN and <em>Owned status</em>.</p><figure class="fullwidth"><img src="/2021/05/img/tbr-as-loop.png" alt="The loop."/><figcaption>The loop.</figcaption></figure><h2 id="section4509">The deliverables</h2><p>This script was created iteratively, I just opened the <em>AppleScript Editor</em> and typed away until it worked to my satisfaction, no plan, no design. After I got all the data I wanted into an <em>AppleScript Record List</em>, I decided to output it as a JSON using some handy utility function in <em>AppleScriptObjC</em> I found online. My original plan was to process this JSON using Pollen/Racket which is what powers this blog, but then I thought, why don’t I generate a Pollen page directly from AppleScript? And that is what I did in the end. The output of running that script is a JSON and a Pollen page.</p><h2 id="section4510">Challenges</h2><p>The main challenge was actually writing utf-8 compliant text files. I think that my mistake was actually in the line-endings, I was thinking in terms of mac classic and used the wrong line-endings. I used CRs instead of LFs. This caused most tools to treat the generated files wrong. It took me a while to sort this out. I think half of the time was spent trying to figure out why my generated <em>Pollen markdown</em> file was not working.</p><h2 id="section4511">Final words</h2><p>I had a ton of fun building this. Watching AppleScript drive Safari feels like being in a hacker movie when the hackers invade the villains computer and everything starts moving on its own or whatever. I enjoy doing these little toys. Don’t get me wrong, this is not a product, this is not good AppleScript or JS code. This is just a script that I can run and update my TBR on my website.</p><p>The most important part is that I enjoyed the process of building this, it was playful, and in the end I have something that is useful to me. I’ve created a <a href="https://gist.github.com/soapdog/c94fab2cc41dab6666ffa2ce07ca77af">Gist on Github with the complete script</a> if you want to check it out. It is horrifying but it works.</p><p>My next steps is just scheduling this script to run weekly either using Automator or a cronjob.</p><p>If you want to leave this page with some platitude or <em>words of wisdom</em>, then remember that it is OK to just have fun with programming. That you don’t need to build all your code as if you were coding for your job. Programming is also a playful activity, and you can have fun with it too.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-05-06T00:00:00+01:00</published><updated>2021-05-06T00:00:00+01:00</updated><title>Book Review: The Thursday Murder Club</title><link rel="alternate" href="https://andregarzia.com/2021/05/review-the-thursday-murder-club.html"/><id>https://andregarzia.com/2021/05/review-the-thursday-murder-club.html</id><summary type="html"><![CDATA[<p>I decided to make <em>book reviews</em> a thing for this blog, and from now on will try to review every single book I read. There is no better book to start this new trend than <a href="https://amzn.to/33lbi9c">The Thursday Murder Club by Richard Osman</a>.</p><figure><img src="/2021/05/img/tmc-cover.jpg" class="u-photo" alt="You probably seen this cover somewhere..." style="width: 400.0px;"/><figcaption>You probably seen this cover somewhere...</figcaption></figure><p>I grabbed this book because it was on the bestseller list and it had the following interesting facts about surrounding it:</p><ul><li>It was a <em>cosy mystery</em>, and I’ve been reading multiple creative writing books about crime writing, so I wanted to read a modern cosy to see what they looked like.</li><li>It was a debut novel. I knew nothing about the author, and how he is a very famous TV host and comedian, all I knew (and cared) was that it was his first novel and people were raving about it.</li></ul><p>That being said, I started reading it and was immediately hooked by the charming characters and quirky caricatures of britishness. As an immigrant to London, the myriad of little jokes about living in the UK really appealed to me.</p><p>I’m a Kobo Plus subscriber, which means that I get 1x audiobook credit per month, and somehow I decided to pick <em>The Thursday Murder Club</em> as an audiobook even though I already had it in hardcover. This is when the book evolved to a completely new level for me. Yes, reading it was fun, but it is my firm belief that this book was meant to be listened to instead of read. The narrator Lesley Manville is pure gold, and her work probably accounts for 50% of my enjoyment of the book. Her intonation, dramatic pauses, and tone, all of which further enhance the original text, make for a tremendous fun. If you’re curious about this book, get the audiobook, I’m begging you, it is worth it.</p><p>Before writing this review, I decided to look online to see how this book was being received on Amazon, and I was a bit shocked about how many bad reviews Amazon chose to highlight on their site. The overall score still 4.5 out of 5, but most of the reviews shown for me were between 1 and 3 stars. This doesn’t match my enjoyment of this book at all, and reading the criticism in those reviews just make me realise that taste is a very subjective thing.</p><h2 id="section4505">Favourite Aspects</h2><p>I enjoyed is how our amateur sleuths are all retired people. In most crime novels I’ve read the heroes are usually young or middle-aged hyper-competent people that are either brilliant or heroic. It is very refreshing to watch the pensioners of <em>Cooper’s Chase</em> constantly outsmarting the other younger characters who time and time again underestimate them.</p><p>Another very positive thing is how the main device used for advancing and solving the plot is neither intelligence nor violence, but charm. It is through charming everyone around them—and with a healthy dose of intelligence, don’t get me wrong—that The Thursday Murder Club moves fearlessly towards its conclusion. I think they charmed me as well.</p><p>The pacing is good for the tone and nature of this novel. I was never bored and it didn’t feel like it was moving too fast.</p><p>Without any spoiler, I also really enjoyed the solution of the plot. I like how it fit together in the end.</p><p>The book tone is a bit bittersweet as our pensioners face the challenges of growing old and watching friends and lovers pass away. And yet, it is full of activity and movement because that bittersweetness is not an excuse for apathy, there are crimes to solve and secrets to uncover.</p><p>Elizabeth deserves a series of her own. She’s a star.</p><h2 id="section4506">Who should read it?</h2><p>To be honest, I think this is a book for everyone. If you have any interest in crime stories, and is not averse to some cosy mystery, then pick this book up. Some jokes might be lost on those who have not lived in the UK, but I don’t think this will spoil the enjoyment of the book.</p><p>A sequel will launch later this year, and I’m already looking forward to seeing the whole gang again.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-05-01T00:00:00+01:00</published><updated>2021-05-01T00:00:00+01:00</updated><title>Made a cute box for my mate tea</title><link rel="alternate" href="https://andregarzia.com/2021/05/made-a-cute-box-for-my-mate-tea.html"/><id>https://andregarzia.com/2021/05/made-a-cute-box-for-my-mate-tea.html</id><summary type="html"><![CDATA[<p>Today I made a little box to store my mate.</p><figure><img src="/2021/05/img/mate-box.jpg" alt="labeled so that I know what is inside." style="width: 250.0px;"/><figcaption>labeled so that I know what is inside.</figcaption></figure><figure><img src="/2021/05/img/mate-box-open.jpg" alt="It is loose leaf mate." style="width: 250.0px;"/><figcaption>It is loose leaf mate.</figcaption></figure><p>Unfortunately, this mate expired four days ago. I don’t think it is a problem, it will just probably be a bit tasteless. I just made a jar of it, which I plan to drink like we do in Rio: cold with a dash of lime.</p><figure><img src="/2021/05/img/mate-jar.jpg" alt="jar of mate tea." style="width: 250.0px;"/><figcaption>jar of mate tea.</figcaption></figure><p>Let’s see how it goes. I hope it tastes good.</p>]]></summary></entry><entry><author><name>Andre Alves Garzia</name></author><published>2021-04-30T00:00:00+01:00</published><updated>2021-04-30T00:00:00+01:00</updated><title>Early version of 'Three Days In Theme Park Red' Released</title><link rel="alternate" href="https://andregarzia.com/2021/04/early-version-of-three-days-in-theme-park-red-released.html"/><id>https://andregarzia.com/2021/04/early-version-of-three-days-in-theme-park-red-released.html</id><summary type="html"><![CDATA[<p>The <a href="https://itch.io/jam/troikafest-2021">TroikaFest! Jam</a> just ended a couple hours ago. I had high hopes for my project for this jam, but it appears that I aimed too high. Instead of a simple and small manageable project, I decided to go all in and build a complex adventure/sphere. I thought I could write it all in a month, but I have been feeling quite slow, and writing has been extremely hard lately. I think that Gareth L Powell summarised what I’m feeling very well in his post called '<a href="https://www.garethlpowell.com/struggling-to-create-youre-not-alone/">Struggling to create? You’re not alone</a>’. My day job has been a bit stressful for a long time, and by the time I clock off, I have no energy left to write (I should wake up earlier and write in the morning). So, it is no wonder that when the clock turned ten in the evening yesterday, I had about 60% of the book done.</p><p>I was laying in my bed feeling like crap. I didn’t want to miss the jam, but I didn’t want to publish something incomplete. I decided to just give up and sleep. It didn’t last long, I couldn’t sleep at all, so I went back to the computer and logged into the MAC Discord, to chat around. I told people about my problem, that I couldn’t complete my project, and people were extremely encouraging and warm. The jam organiser, told me they’d accept late submissions, and also that publishing an incomplete version and updating later was possible.</p><p>Doing this kind of <em>development in the open</em> appeals to me. That is how we usually work on FOSS projects. With that in mind, I reframed my perspective about my project, instead of looking at it like an incomplete ugly duckling, I decided to see an <em>in-development</em> ugly duckling. I wrote some placeholders to make sure we had a skeleton of most of it, and published an early version.</p><figure><img src="/2021/04/img/tpr-cover.jpg" alt="It took me five minutes to make this cover, be gentle." |
|