<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Just a Pseudo-Random Guy Blog</title>
    <link>https://ignaciogoldchluk.com/</link>
    <description>Recent content on Just a Pseudo-Random Guy Blog</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Wed, 29 Apr 2026 13:04:23 +0000</lastBuildDate>
    <atom:link href="https://ignaciogoldchluk.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The &#39;i&#39; in JSON Schema stands for intuitive</title>
      <link>https://ignaciogoldchluk.com/the-i-in-json-schema-stands-for-intuitive/</link>
      <pubDate>Wed, 29 Apr 2026 13:04:23 +0000</pubDate>
      <guid>https://ignaciogoldchluk.com/the-i-in-json-schema-stands-for-intuitive/</guid>
      <description>&lt;p&gt;Here is a small exercise. Craft a payload that is valid for the following JSON Schema&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;oneOf&amp;#34;&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;object&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;properties&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;fullName&amp;#34;&lt;/span&gt;: {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;object&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;properties&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;firstName&amp;#34;&lt;/span&gt;: {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;lastName&amp;#34;&lt;/span&gt;: {&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Chances are that if you never worked with JSON Schema directly, you think values like &lt;code&gt;{&amp;quot;fullName&amp;quot;: &amp;quot;John Doe&amp;quot;}&lt;/code&gt; or &lt;code&gt;{&amp;quot;firstName&amp;quot;: &amp;quot;John&amp;quot;, &amp;quot;lastName&amp;quot;: &amp;quot;Doe&amp;quot;}&lt;/code&gt; are valid. They aren&amp;rsquo;t. In fact, no value that can match the above schema, except for the empty value (not to be confused with the empty string &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Future of AI Assisted Development</title>
      <link>https://ignaciogoldchluk.com/the-future-of-ai-assisted-development/</link>
      <pubDate>Wed, 07 Jan 2026 09:40:28 +0200</pubDate>
      <guid>https://ignaciogoldchluk.com/the-future-of-ai-assisted-development/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is an opinion post&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: the acronym AI in the context of this post refers to Large Language Models and Coding Agents.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Entering 2026, the usage of AI for software development is still a controversial topic. While many developers and non-developers claim AI has boosted their productivity, scientific studies show that the adoption of AI hasn&amp;rsquo;t had any noticeable impact yet&lt;a href=&#34;https://mlq.ai/media/quarterly_decks/v0.1_State_of_AI_in_Business_2025_Report.pdf&#34;&gt;[1]&lt;/a&gt;, or worse, it has decreased productivity while developers still believe they were more productive&lt;a href=&#34;https://arxiv.org/abs/2507.09089&#34;&gt;[2]&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding Recursion</title>
      <link>https://ignaciogoldchluk.com/understanding-recursion/</link>
      <pubDate>Sun, 28 Dec 2025 19:37:22 +0200</pubDate>
      <guid>https://ignaciogoldchluk.com/understanding-recursion/</guid>
      <description>&lt;h1 id=&#34;writing-code-in-a-functional-language-or-understanding-recursion&#34;&gt;Writing code in a functional language, or, understanding recursion&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;In summary: tail call recursion&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Have you ever wondered how to write production code in Elixir or any other functional languages? Languages that don&amp;rsquo;t support &lt;code&gt;while&lt;/code&gt; and &lt;code&gt;for&lt;/code&gt;[1] loops, &lt;code&gt;break&lt;/code&gt;, &lt;code&gt;continue&lt;/code&gt;, early &lt;code&gt;return&lt;/code&gt; nor mutable variables. More than once, developers familiar with other paradigms, such as object-oriented or procedural, don&amp;rsquo;t understand how to structure programs in a language with such limitations. This post explains how to do &amp;ldquo;real life&amp;rdquo; stuff using a functional language.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advent of Code 2025 Day 10</title>
      <link>https://ignaciogoldchluk.com/advent-of-code-2025-day-10/</link>
      <pubDate>Thu, 11 Dec 2025 15:50:42 +0200</pubDate>
      <guid>https://ignaciogoldchluk.com/advent-of-code-2025-day-10/</guid>
      <description>&lt;h1 id=&#34;solving-advent-of-code-2025-day-10-with-z3&#34;&gt;Solving advent of code 2025 day 10 with Z3&lt;/h1&gt;&#xA;&lt;h2 id=&#34;problem-description&#34;&gt;Problem description&lt;/h2&gt;&#xA;&lt;p&gt;The inputs are an array of length &lt;code&gt;n&lt;/code&gt; of non-negative integers called &lt;code&gt;joltages&lt;/code&gt;, and an array of buttons where each button is an array of distinct &lt;code&gt;joltages&lt;/code&gt; indexes. Each time a you press a button, it increases the value its &lt;code&gt;joltages&lt;/code&gt; indexes by 1. You have to find the lowest total button presses such that starting from an array of &lt;code&gt;0&lt;/code&gt; of length &lt;code&gt;n&lt;/code&gt;, it reaches &lt;code&gt;joltages&lt;/code&gt; values.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advent of Code 2025 Day 9</title>
      <link>https://ignaciogoldchluk.com/advent-of-code-2025-day-9/</link>
      <pubDate>Tue, 09 Dec 2025 17:10:25 +0200</pubDate>
      <guid>https://ignaciogoldchluk.com/advent-of-code-2025-day-9/</guid>
      <description>&lt;h2 id=&#34;problem-description&#34;&gt;Problem description&lt;/h2&gt;&#xA;&lt;p&gt;Paraphrasing the problem to more formal terms: given a list of contiguous vertices &lt;code&gt;(x, y)&lt;/code&gt;, where &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; are non-negative integers, of a &lt;em&gt;simple&lt;/em&gt; rectilinear polygon, find the area of the largest rectangle contained inside the polygon where 2 of the opposite corners are also vertices of the polygon.&lt;/p&gt;&#xA;&lt;h3 id=&#34;observations&#34;&gt;Observations&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The input contains 496 vertices, and therefore &lt;code&gt;496C2=122760&lt;/code&gt; possible rectangles.&lt;/li&gt;&#xA;&lt;li&gt;The vertices are in order, meaning that they always share either the &lt;code&gt;x&lt;/code&gt; or &lt;code&gt;y&lt;/code&gt; coordinate.&lt;/li&gt;&#xA;&lt;li&gt;The area of a point is &lt;code&gt;1&lt;/code&gt;, therefore the formula for the area of the rectangle between opposite vertices &lt;code&gt;v1 = (x1, y1); v2 = (x2, y2)&lt;/code&gt; is &lt;code&gt;(|x2 - x1| + 1) * (|y2 - y1| + 1)&lt;/code&gt;. This means that contiguous vertices form rectangles with area != 0 and you can&amp;rsquo;t skip them.&lt;/li&gt;&#xA;&lt;li&gt;The vertices of a rectangle formed by &lt;code&gt;v1 = (x1, y1); v2 = (x2, y2)&lt;/code&gt;, being &lt;code&gt;xmin = min(x1,x2); xmax = max(x1,x2); ymin = min(y1,y2); ymax = max(y1,y2);&lt;/code&gt; are &lt;code&gt;(xmin, ymin), (min, ymax), (xmax, ymin), (xmax, ymax)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;&#xA;&lt;p&gt;The first part is trivial, which is to generate all possible candidate rectangles sorted by area in descending order. The second part is trickier, because you have to determine whether the rectangle formed is fully contained inside the polygon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advent of Code 2025 Day 3 using recursion</title>
      <link>https://ignaciogoldchluk.com/advent-of-code-2025-day-3-using-recursion/</link>
      <pubDate>Wed, 03 Dec 2025 12:32:22 +0200</pubDate>
      <guid>https://ignaciogoldchluk.com/advent-of-code-2025-day-3-using-recursion/</guid>
      <description>&lt;h1 id=&#34;problem-description&#34;&gt;Problem description&lt;/h1&gt;&#xA;&lt;p&gt;Given an array of digits 1-9 &lt;code&gt;bank&lt;/code&gt;, and a number of batteries &lt;code&gt;n&lt;/code&gt;, where &lt;code&gt;length(bank) &amp;gt;= n&lt;/code&gt;, find the maximum number that you can construct by selecting &lt;code&gt;n&lt;/code&gt; digits from &lt;code&gt;bank&lt;/code&gt; in order.&lt;/p&gt;&#xA;&lt;p&gt;Examples&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;bank&lt;/th&gt;&#xA;          &lt;th&gt;batteries&lt;/th&gt;&#xA;          &lt;th&gt;value&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;5635&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;65&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;333&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;33&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;9819&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;989&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;recursive-solution&#34;&gt;Recursive solution&lt;/h2&gt;&#xA;&lt;p&gt;A good approach to find a recursive solution is to think of the base case and some concrete cases:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;n = 0&lt;/code&gt; the result is &lt;code&gt;0&lt;/code&gt;, because you can&amp;rsquo;t choose any battery&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;n = 1&lt;/code&gt; you can simply find the maximum digit in the entire array&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;n = 2&lt;/code&gt; gets a bit tricky. You have to find the maximum digit but you can&amp;rsquo;t go through the entire array. For example, when &lt;code&gt;bank = 689, n = 2&lt;/code&gt; the maximum value is &lt;code&gt;89&lt;/code&gt;, but if you select the maximum digit, you would start with &lt;code&gt;9&lt;/code&gt;. You have to find the maximum digit leaving at least 1 digit left for the second battery, and then select the maximum digit to the right.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;n = 3&lt;/code&gt; is similar to &lt;code&gt;n = 2&lt;/code&gt;, you have to find the maximum value and leave at least 2 digits left for the other 2 batteries.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Another thing to keep in mind is which maximum value to choose from. Consider &lt;code&gt;bank = 8781, n = 2&lt;/code&gt;, where the result should be &lt;code&gt;88&lt;/code&gt;. On the first iteration the maximum digit is &lt;code&gt;8&lt;/code&gt; and you have two options:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advent of Code 2025 Day 2 in under 200us</title>
      <link>https://ignaciogoldchluk.com/advent-of-code-2025-day-2-in-under-200us/</link>
      <pubDate>Tue, 02 Dec 2025 15:02:55 +0200</pubDate>
      <guid>https://ignaciogoldchluk.com/advent-of-code-2025-day-2-in-under-200us/</guid>
      <description>&lt;h1 id=&#34;optimizing-advent-of-code-2025-day-2&#34;&gt;Optimizing advent of code 2025 day 2&lt;/h1&gt;&#xA;&lt;h2 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://adventofcode.com/2025/day/2&#34;&gt;Here&lt;/a&gt; is the link to the full Advent of Code 2025 Day 2 puzzle. To make it short, and also because the event creator requested in the &lt;a href=&#34;https://adventofcode.com/2025/about&#34;&gt;About page&lt;/a&gt; to not paste significant parts of the problem statement, the focus is going to be on the invalid ID generation part.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;problem-description&#34;&gt;Problem description&lt;/h2&gt;&#xA;&lt;p&gt;Given a list of integer ranges &lt;code&gt;[start, end]&lt;/code&gt;, obtain all the distinct &lt;em&gt;invalid IDs&lt;/em&gt; contained in each range.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Identifying and fixing N&#43;1 queries problem in Django</title>
      <link>https://ignaciogoldchluk.com/identifying-and-fixing-n-1-queries-problem-in-django/</link>
      <pubDate>Sun, 24 Mar 2024 22:42:54 -0300</pubDate>
      <guid>https://ignaciogoldchluk.com/identifying-and-fixing-n-1-queries-problem-in-django/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The Django Object Relational Mapping is an extremely powerful, yet dangerous tool of the Django framework, primarily because of its implicit query execution. Django loads records automatically from the DB whenever it needs to access a non-loaded field, which leads to potential performance issues and an unexpected number of queries executed.&lt;/p&gt;&#xA;&lt;p&gt;For example, imagine you have a &lt;code&gt;Person&lt;/code&gt; model that contains a reference to another model &lt;code&gt;Country&lt;/code&gt; as &lt;code&gt;country_of_residence&lt;/code&gt;. If you execute the following code, Django performs 2 database queries&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pytest Tips and Tricks 1: Executing specific fixtures</title>
      <link>https://ignaciogoldchluk.com/pytest-tips-and-tricks-1-executing-specific-fixtures/</link>
      <pubDate>Wed, 24 Jan 2024 20:44:14 -0300</pubDate>
      <guid>https://ignaciogoldchluk.com/pytest-tips-and-tricks-1-executing-specific-fixtures/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Every project should contain tests, lots of tests, thousands of tests. Often it contains an entire codebase, parallel to the actual production codebase, of the same size or bigger, just for testing, full of factories and helper functions. Sometimes tests begin to fail because assumptions you made in fixtures are factories are no longer valid, and you must also update the helper code.&lt;/p&gt;&#xA;&lt;p&gt;Running the entire test suite might take a couple of minutes. You could reduce the time by skipping certain folders or files, but it requires knowledge of the entire test suite. It would be better if, when you are refactoring a pytest fixture, you could tell pytest to only run tests that depend on that specific fixture and save some time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>You can do better than dicts for structured data</title>
      <link>https://ignaciogoldchluk.com/you-can-do-better-than-dicts-for-structured-data/</link>
      <pubDate>Wed, 27 Dec 2023 21:54:51 -0300</pubDate>
      <guid>https://ignaciogoldchluk.com/you-can-do-better-than-dicts-for-structured-data/</guid>
      <description>&lt;p&gt;Despite its extensive standard library, Python doesn&amp;rsquo;t have &lt;strong&gt;record&lt;/strong&gt; or &lt;strong&gt;struct&lt;/strong&gt; like data structures. &lt;strong&gt;dict&lt;/strong&gt; became the de-facto data type for both structured and structured data. This lead to the use and abuse of &amp;ldquo;ad-hoc&amp;rdquo; structures that you can only understand by digging through the codebase. You can often find legacy code like this&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(data):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or its more helpful type-annotated version&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(data: dict):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What does data contain? what are its allowed keys? which values can the keys have? If you are lucky and the person responsible for that monstrosity still works on the project you can ask them, if not then get ready for some software archeology. In any case, you can, and you &lt;strong&gt;should&lt;/strong&gt; do better. Do it for the next poor soul who has to modify that code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://ignaciogoldchluk.com/contact/</link>
      <pubDate>Sun, 03 Dec 2023 22:21:32 -0300</pubDate>
      <guid>https://ignaciogoldchluk.com/contact/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/IgnacioGoldchluk&#34;&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/ignacio-goldchluk-18391717a/&#34;&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
