<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>In the Mood for Programming</title><link>http://ragoragino.dev/</link><description>Recent content on In the Mood for Programming</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://ragoragino.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Central Banking Today: I</title><link>http://ragoragino.dev/explorations/2026-05-05-central-banking-i/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>http://ragoragino.dev/explorations/2026-05-05-central-banking-i/</guid><description>The Fed This article examines the evolution of the Federal Reserve from its founding as a lender-of-last-resort in 1913 to its current role as the central institution steering the global dollar system. We will look at how the Fed’s mandate, policy framework, and monetary tools have changed across different economic regimes — from the scarce reserves corridor system of the 20th century to today’s ample reserves framework shaped by quantitative easing and administered rates.</description></item><item><title>The Residues of Death</title><link>http://ragoragino.dev/essays/2026-04-16-on-death/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><guid>http://ragoragino.dev/essays/2026-04-16-on-death/</guid><description>&amp;ldquo;No me espera nadie en ningún sitio, y eso es lo que ha sucedido en mi vida: debo aprender a caminar por las calles, por las ciudades, por donde me toque, sabiendo que no me espera nadie al final del viaje. Nadie se preocupará de si llego o no. Entonces se camina de otra forma.&amp;rdquo;
“No one is waiting for me anywhere, and that is what has happened in my life: I must learn to walk through streets, through cities, wherever I may be, knowing that no one is waiting for me at the end of the journey.</description></item><item><title>AI Security</title><link>http://ragoragino.dev/tech/2026-02-16-ai-security/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2026-02-16-ai-security/</guid><description>Lethal Trifecta The most important conceptual framework for tying together different risks in the AI space is the so-called lethal trifecta, where LLMs effectively act as a confused deputy. The trifecta applies when three prerequisites are met: the LLM has access to confidential or sensitive data, has a way of communicating with actors outside the security boundary (e.g., a company’s virtual network), and the agent accepts arbitrary input into the prompt used in its decision loop (source).</description></item><item><title>On Chile</title><link>http://ragoragino.dev/essays/2026-01-11-chile/</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate><guid>http://ragoragino.dev/essays/2026-01-11-chile/</guid><description>Centro The location of the capital of the country might seem rather puzzling. Other major cities of Chile, like Valparaíso, Concepción, La Serena, or Antofagasta, are all facing the Pacific Ocean and historically have been (and some still are) important ports. Santiago is an exception. It is a city dominated on all sides by the Cordillera de los Andes, a range stretching from the northern part of the continent to its southernmost tip, Tierra del Fuego.</description></item><item><title>Sick Men of Europe</title><link>http://ragoragino.dev/explorations/2025-11-03-europe/</link><pubDate>Mon, 03 Nov 2025 18:00:00 +0100</pubDate><guid>http://ragoragino.dev/explorations/2025-11-03-europe/</guid><description>It&amp;rsquo;s now almost too easy to become desensitized to the articles and reports about the mortal decline of European economies. The facts are well known: total factor productivity and overall GDP growth (in dollar terms) have been lagging behind the U.S. for the past 30 years, with a stark divergence in performance since the Great Financial Crisis and especially since the pandemic. European stock exchanges are experiencing a wave of high-profile delistings — in the U.</description></item><item><title>Elasticsearch &amp; AI</title><link>http://ragoragino.dev/tech/2025-09-09-elastic/</link><pubDate>Tue, 09 Sep 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2025-09-09-elastic/</guid><description>Elasticsearch is one of the stalwarts of the modern software engineering stack. What PostgreSQL is in the realm of database engines, Redis is for caching, or Kafka is for event-driven systems, Elasticsearch occupies a similar position in the domain of search engines. Its extensive full-text capabilities are the cornerstone of any search experience across the modern web. However, with LLMs causing such a major shift in the search space, Elasticsearch is trying to keep pace.</description></item><item><title>Stablecoins</title><link>http://ragoragino.dev/explorations/2025-08-02-stablecoins/</link><pubDate>Sat, 02 Aug 2025 13:35:00 +0100</pubDate><guid>http://ragoragino.dev/explorations/2025-08-02-stablecoins/</guid><description>Stablecoins are digital currencies issued by private companies on public blockchains (e.g., Ethereum, Base, Solana) that are pegged to fiat currencies and backed by audited reserves. For every dollar of stablecoin issued, the issuer holds an equivalent amount of either fiat currency directly or other highly liquid, fiat-denominated assets (primarily government bonds). As of mid-2025, approximately 99% of stablecoins are pegged to the U.S. dollar. Because stablecoins are fully backed by existing assets, they do not expand the monetary base of the underlying currency.</description></item><item><title>On Philosophy and Comedy</title><link>http://ragoragino.dev/essays/2025-07-29-louis-ck/</link><pubDate>Tue, 29 Jul 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/essays/2025-07-29-louis-ck/</guid><description>Message in a bottle Growing up means trying as hard as you can to become your idol. Adolescence is a period largely shaped by feeling connected to someone we have never met, yet we sense that we share an invisible bond through some common understanding of the world. Whether it&amp;rsquo;s their music, their books, movies, or comedy, something about them speaks to us in a way that makes us feel immediately heard.</description></item><item><title>State of the RAG: 2025</title><link>http://ragoragino.dev/tech/2025-06-17-rag/</link><pubDate>Tue, 17 Jun 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2025-06-17-rag/</guid><description>This article is nothing more than an overview of the current state of more-or-less established and working methodologies for building scalable and efficient RAG systems. I am not aiming to provide comprehensive coverage of all existing methods or offer insights into hot new experimental RAG techniques. Most enterprises will want to avoid the latter and focus on the former approaches. This article is therefore an attempt to summarize what a scalable production RAG pipeline could look like.</description></item><item><title>On Concurrency</title><link>http://ragoragino.dev/tech/2025-05-25-concurrency/</link><pubDate>Sun, 25 May 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2025-05-25-concurrency/</guid><description>As a backend engineer working primarily on different distributed systems, ranging from ML infrastructure, data ingestion and streaming pipelines, to (these days) RAG systems, I have found that a thorough understanding of concurrency is probably the most important engineering knowledge. It&amp;rsquo;s up there with other concepts fundamental to the profession, like idempotency, ACID, or BASE. However, the latter are more often encountered as features of systems that an engineer uses (like a database&amp;rsquo;s ACID properties, or event-driven architecture&amp;rsquo;s guarantee of eventual consistency).</description></item><item><title>On Travelling</title><link>http://ragoragino.dev/essays/2025-04-01-on-travelling/</link><pubDate>Tue, 01 Apr 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/essays/2025-04-01-on-travelling/</guid><description>Commute I know my holidays start when I enter male&amp;rsquo;s loos at the airport. There is a distinctive nature to these loos compared to loos you visit in other places. In some respects, they could be confused with elegant office loos. On entering, you get surrounded by a slew of minimalistic white tiles everywhere you look, elegant designs of sinks, and the newest range of air dryers, aptly named to induce a certain sense of self-parody (think Air Blaster 5000 Max).</description></item><item><title>Seeing the World as a Mosaic</title><link>http://ragoragino.dev/essays/2025-02-09-mosaic/</link><pubDate>Sun, 09 Feb 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/essays/2025-02-09-mosaic/</guid><description>Stained glass mosaic in the sanctuary of Arantzazu, Spain (from a book Arantzazu by Javier Garrido, 1987)
&amp;ldquo;Where are you from?&amp;rdquo; &amp;ldquo;Where are you from?&amp;rdquo; is a question that most immigrants and expats will need to get used to. The moment they step into a foreign country, the differences in their appearance, language, or accent become clear points of separation. The question will become an everyday presence, for some more of a nuisance.</description></item><item><title>Notes on Expected Returns by Antti Ilmanen</title><link>http://ragoragino.dev/essays/2025-01-28-expected-returns/</link><pubDate>Tue, 28 Jan 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/essays/2025-01-28-expected-returns/</guid><description>Expected Returns: An Investor&amp;rsquo;s Guide to Harvesting Market Rewards This is not a traditional book review, but rather a summary. I&amp;rsquo;ve chosen this approach as I don&amp;rsquo;t have the deep expertise in the book&amp;rsquo;s main subject - the analysis of financial asset returns - to provide a critical analysis of its contents. While my graduate studies in quantitative finance provided me with a solid background to understand the book, my engagement with the subject since then has been limited to general reading.</description></item><item><title>STEMLP Principles</title><link>http://ragoragino.dev/tech/2025-01-28-stemlp/</link><pubDate>Tue, 28 Jan 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2025-01-28-stemlp/</guid><description>Throughout my career building distributed systems, I have developed several internal mental tools that I use during development. One of these tools is a mnemonic device that guides me when building a new system or writing code. I call this mnemonic, as the title suggests, the STEMLP principle (which is hopefully easy to remember due to its similarity to STEM degrees). While I haven&amp;rsquo;t encountered anything similar in the literature, it&amp;rsquo;s likely that many software engineers have developed their own internal compasses for building engineering systems.</description></item><item><title>On Cities</title><link>http://ragoragino.dev/essays/2025-01-20-cities/</link><pubDate>Mon, 20 Jan 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/essays/2025-01-20-cities/</guid><description>I am intrigued by cities. From the first known settlements in the historical region of Mesopotamia, to the ancient giants of Rome, Tenochtitlan, and Chang&amp;rsquo;an, to the modern-day alpha cities of London and New York, cities have been fundamental building blocks of civilizations throughout human history. Trade junctions, market towns, cultural hubs, political centers, and many more functions were and are fulfilled by cities.
But cities are nothing without their networks of people—people who move there full of dreams.</description></item><item><title>Men Without Maps</title><link>http://ragoragino.dev/essays/2025-01-06-men/</link><pubDate>Mon, 06 Jan 2025 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/essays/2025-01-06-men/</guid><description>Our dads My dad is the prime example of an old-school man. He&amp;rsquo;s stoic in accepting everything that life throws at him. There&amp;rsquo;s no apparent outpouring of emotions, even in the toughest situations. He emanates physical strength and intellectual rigor, with a razor-like focus on fulfilling his role as the family&amp;rsquo;s breadwinner. I have seen my dad start to well up - forbid crying, for God&amp;rsquo;s sake - only once, and that was when his father couldn&amp;rsquo;t come to his birthday celebration because he was too ill.</description></item><item><title>Debugging Memory Issues in Production Python Services</title><link>http://ragoragino.dev/tech/2024-12-01-python-memory/</link><pubDate>Sun, 01 Dec 2024 10:00:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2024-12-01-python-memory/</guid><description>I recently conducted a performance analysis of several critical production services to optimize their overall performance. The primary goals were to optimize CPU time and eliminate existing memory leaks to better utilize our hardware resources. Having done extensive Go performance analysis in the past, I found that thanks to the language&amp;rsquo;s excellent tooling (primarily the pprof package), it&amp;rsquo;s relatively straightforward. Both CPU and memory analysis simply require hitting the HTTP endpoints and analyzing the resulting data.</description></item><item><title>Notes on living in England</title><link>http://ragoragino.dev/essays/2024-08-30-england/</link><pubDate>Fri, 30 Aug 2024 00:00:00 +0100</pubDate><guid>http://ragoragino.dev/essays/2024-08-30-england/</guid><description>My parents came to visit me in London a few weeks ago. Because they had already been to London before, I knew we didn&amp;rsquo;t have to sweat through all the traditional touristy bits of the city. I knew I could experiment more with the places and experiences I wanted them to see. Maybe show them a tiny pub on the bank of the Thames as the sun sets behind the horizon, a busy Shoreditch restaurant full of groups of friends enjoying the moment, or the morning sun rising over Liverpool Street as the city gets back to work.</description></item><item><title>Email Security Fundamentals</title><link>http://ragoragino.dev/tech/2024-08-15-email-infrastructure/</link><pubDate>Thu, 15 Aug 2024 10:00:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2024-08-15-email-infrastructure/</guid><description>Recently, I have been looking a little bit more into the email security space. I found a lot of the information quite dispersed, so thought I will jot down a summary of how email security works in a nutshell. Basically, give an overview of how DKIM, SPF, and DMARC configurations work.
Most of our internet traffic is secured by TLS, where asymmetric public key cryptography ensures that clients connect to the correct servers.</description></item><item><title>Transformer</title><link>http://ragoragino.dev/tech/2024-07-13-transformer/</link><pubDate>Sat, 13 Jul 2024 13:35:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2024-07-13-transformer/</guid><description>Introduction In this post, I will be trying to understand the original Transformer paper.
Tokenization Tokenization is the process of transforming words into a standardized input. In natural languages, a lot of words can be in a non-standard form (prefixes, suffixes, conjugation), and tokenization converts as many as possible of existing words into a limited dictionary.
Embedding Embedding is the process of transforming tokens into vectors of floats. The reason this is useful is that we can capture semantic relationships between individual tokens by transforming them to vectors.</description></item><item><title>Converting Protobuf objects to Parquet in Pyspark</title><link>http://ragoragino.dev/tech/2023-01-22-parquet/</link><pubDate>Sun, 22 Jan 2023 10:00:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2023-01-22-parquet/</guid><description>Intro Recently, I needed to convert Hadoop RDD containing Protobuf-serialized objects to an RDD of Parquet files to enable easier analytical queryability of the data. The Protobuf objects are deeply nested, but there is a natural connection between Protobuf and Parquet, as Parquet is able to handle all the types that are defined in Protobuf (for some intro to Dremel, the Parquet storage format, see here). Therefore, I thought that handling this mapping should be a straightforward task in Pyspark.</description></item><item><title>An overview of the Apache® ecosystem projects</title><link>http://ragoragino.dev/tech/2022-08-26-apache/</link><pubDate>Fri, 26 Aug 2022 10:00:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2022-08-26-apache/</guid><description>Intro This is a work in progress, where I try to succintly summarise projects within the Apache ecosystem. I might include some other projects that are not part of the ecosystem if they focus on big data platforms and/or big data processing.
Apache ecosystem is a huge beast, just take a look at the list of the projects. I felt like I was slowly getting lost in this jungle and that&amp;rsquo;s why I started writing a short summary about the most important ones.</description></item><item><title>Margita</title><link>http://ragoragino.dev/essays/2022-04-18-margita/</link><pubDate>Mon, 18 Apr 2022 10:00:00 +0100</pubDate><guid>http://ragoragino.dev/essays/2022-04-18-margita/</guid><description>It was February 2th, 2021 when my cousin called me while I was working in the office and she delivered the sad news. Our grandmother had died from Covid. Nobody from the family would have even imagined that few weeks ago, but there we were, dumbfounded facing the tragic reality. She had been grappling with the disease for a few days and as she didn&amp;rsquo;t have any pulmonary complications, we had already started hoping she might even recover.</description></item><item><title>A simple VPN prototype in Rust</title><link>http://ragoragino.dev/tech/2022-03-27-rust-vpn/</link><pubDate>Sun, 27 Mar 2022 13:38:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2022-03-27-rust-vpn/</guid><description>introduction For the past few months I have been learning Rust a little bit more, so I was thinking about a small-ish project where I could apply some Rust magic. At one point, I remembered reading about Wireguard internals and it seemed like such a cool piece of engineering. I though writing my own simple VPN would not only help me understand some complexities around VPN management, but I would be also able to familiarise myself with some parts of Rust, namely unsafe API (to call kernel&amp;rsquo;s C functions) and async libraries (to handle concurrent message processing).</description></item><item><title>Testing client retries on HTTP2 GOAWAY frame</title><link>http://ragoragino.dev/tech/2022-02-05-goaway-test/</link><pubDate>Sat, 05 Feb 2022 13:38:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2022-02-05-goaway-test/</guid><description>Recently, when calling GET on certain HTTP2 server I encountered an error of this form:
&amp;#34;Transport: cannot retry err [http2: Transport received Server&amp;#39;s graceful shutdown GOAWAY] after Request.Body was written; define Request.GetBody to avoid this error&amp;#34; The solution seems pretty obvious (just setting the GetBody callback on http&amp;rsquo;s Request), and after debugging for a while Typhon server library that we are using at work, I found that for clients a body is set on all GET request regardless of the passed body (i.</description></item><item><title>Implementing a TCP server with C++ coroutines. Part IV: Implementation &amp; Conclusion</title><link>http://ragoragino.dev/tech/2021-10-01-cpp-coroutines-4/</link><pubDate>Sat, 02 Oct 2021 13:38:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2021-10-01-cpp-coroutines-4/</guid><description>So, we have worked our way through the coroutine theory and epoll system call family and finally, we are ready to apply this knowledge to our task of writing an async server. In this article, we will take a look at the C++20 interface for writing coroutines and show a possible implementation of the TCP server that takes advantage of coroutines and epoll in order to provide relatively high-performant handling of client requests.</description></item><item><title>Implementing a TCP server with C++ coroutines. Part III: epoll</title><link>http://ragoragino.dev/tech/2021-10-01-cpp-coroutines-3/</link><pubDate>Sat, 02 Oct 2021 13:37:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2021-10-01-cpp-coroutines-3/</guid><description>In the last article, we have seen what are coroutines and what are the differences between stackless and stackful coroutines. Today, we will move on and will take a look at how one can take advantage of the facilities provided by Linux to achieve great performance for IO-bound programs.
Userspace processes usually take advantage of the OS&amp;rsquo;s networking API as writing a separate networking implementation is an absolutely non-trivial task. As a result, they need kernel support to receive information on whether file descriptors are ready for IO operations.</description></item><item><title>Implementing a TCP server with C++ coroutines. Part II: Coroutine Theory</title><link>http://ragoragino.dev/tech/2021-10-01-cpp-coroutines-2/</link><pubDate>Sat, 02 Oct 2021 13:36:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2021-10-01-cpp-coroutines-2/</guid><description>In the first article of the series, we have mentioned that we are going to implement a simple TCP server based on epoll and a C++20 feature called coroutines. However, before we will embark upon such a venture, we might want to understand how an asynchronous code works with coroutines.
In general, asynchronous code can be implemented in multiple ways. The first approach is to rely on the OS. This would entail calling blocking OS system calls (like read or write) and letting the OS scheduler park waiting threads.</description></item><item><title>Implementing a TCP server with C++ coroutines. Part I: Introduction &amp; Interface</title><link>http://ragoragino.dev/tech/2021-10-01-cpp-coroutines-1/</link><pubDate>Sat, 02 Oct 2021 13:35:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2021-10-01-cpp-coroutines-1/</guid><description>C++20 introduced a new language feature called coroutines. This is a well-known tool for programmers in other languages, like Rust (with its async/await pattern), or Go (with goroutines). In C++, one could already use coroutines with the help of Boost library ecosystem. Boost.Asio allowed users to write their code in the event-driven programming style since the beginning of time, but since version 1.54.0 (released in 2013) it had the full support of coroutines thanks to the underlying implementation in Boost.</description></item><item><title>Container Networking</title><link>http://ragoragino.dev/tech/2020-04-09-container-networking/</link><pubDate>Fri, 09 Apr 2021 21:44:00 +0200</pubDate><guid>http://ragoragino.dev/tech/2020-04-09-container-networking/</guid><description>A look at container networking with eBPF
Intro A few weeks ago, I started to fiddle around with the eBPF project and tracing Linux kernel functions. I have written a simple ICMP packet tracer to just get a feel of how the eBPF system works. During that project, I noticed that in one function I was tracing on the ingress packet path (called ip_rcv) there were mentions of a network namespace.</description></item><item><title>Static Linking of cgo Programs</title><link>http://ragoragino.dev/tech/2021-03-23-cgo-static/</link><pubDate>Tue, 23 Mar 2021 16:55:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2021-03-23-cgo-static/</guid><description>In one of my previous articles, I have demonstrated how to statically link C++ programs. I have mentioned that static compilation is quite easy for Golang in comparison to C++.1 However, I wanted to try how cgo fares in this respect. cgo handles compilation of C (C++) and Go programs together. It doesn&amp;rsquo;t do that by itself, but it needs an external compiler (and under some circumstances also a linker) to achieve that.</description></item><item><title>Static Linking of C++ Programs</title><link>http://ragoragino.dev/tech/2020-03-06-static-linking-cpp/</link><pubDate>Sun, 07 Mar 2021 13:35:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2020-03-06-static-linking-cpp/</guid><description>We always hear about the insecure nature of the majority of container implementations caused by the fact of sharing the kernel with their host. There are countless security recommendations to harden your containers, from running apps as non-roots, restricting the allowed syscall space via a seccomp profile, or running executables in very minimal Linux environments (&amp;lsquo;scratch&amp;rsquo; being the best one in the Docker world).
The last one is easily accomplished for Go executables, which will produce a completely statically-linked executable by defining few environment variables or linker flags during the build process.</description></item><item><title>eBPF Explorations</title><link>http://ragoragino.dev/tech/2021-03-06-ebpf-explorations/</link><pubDate>Sat, 06 Mar 2021 11:44:00 +0100</pubDate><guid>http://ragoragino.dev/tech/2021-03-06-ebpf-explorations/</guid><description>During the last few days, I have been digging into the extended Berkeley Packet Filters (eBPFs). I found out about this technology when I was learning about the internal machinery of tcpdump.1 tcpdump works by attaching a filter during the creation of the socket, which causes all network packets to be also routed to this filter. Kernel requires these filters to be passed in the form of a BPF bytecode, which is a specific bytecode that can execute only a restricted set of operations.</description></item><item><title>Design Patterns in the Wild: Builder</title><link>http://ragoragino.dev/tech/2020-12-15-design-patterns-in-the-wild-builder/</link><pubDate>Tue, 15 Dec 2020 21:09:59 +0100</pubDate><guid>http://ragoragino.dev/tech/2020-12-15-design-patterns-in-the-wild-builder/</guid><description>Builder
Intent; &amp;ldquo;Use the builder pattern to encapsulate the construction of a product and allow it to be constructed in steps.&amp;rdquo; (HFDP)
A successful application of a builder pattern always starts with realizing that we are trying to create an object that is highly configurable. We could use a simple constructor to pass all the arguments, but we might end up with a huge amount of parameters that need to be fed into it.</description></item><item><title>Design Patterns in the Wild: Introduction</title><link>http://ragoragino.dev/tech/2020-12-15-design-patterns-in-the-wild-introduction/</link><pubDate>Tue, 15 Dec 2020 21:09:59 +0100</pubDate><guid>http://ragoragino.dev/tech/2020-12-15-design-patterns-in-the-wild-introduction/</guid><description>I remember my first more in-depth encounter with design patterns was when I was preparing for interviews for my first programming job. My sources were either Gang Of Four&amp;rsquo;s Design Patterns (GoF), Head First Design Patterns (HDFP), or some internet tutorials and Youtube videos. Rummaging through these sources left me quite perplexed. The examples used were either quite arcane or laughingly trivial. I either had to grapple with some obtuse GUI terminology or just leaf through some examples that concerned baking pizza or elephants being turned into ducks.</description></item></channel></rss>