<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>João Fraga's website</title><link>https://fraguinha.com/</link><description>Recent content on João Fraga's website</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 21 Jan 2026 09:57:05 +0000</lastBuildDate><atom:link href="https://fraguinha.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Concurrency - Concurrency</title><link>https://fraguinha.com/post/concurrency/</link><pubDate>Wed, 21 Jan 2026 09:00:00 +0000</pubDate><guid>https://fraguinha.com/post/concurrency/</guid><description>&lt;p>Overview of Java concurrency primitives, patterns, and best practices for writing thread-safe, high-performance concurrent applications.&lt;/p>
&lt;h1 id="thread-fundamentals">Thread Fundamentals&lt;/h1>
&lt;h2 id="thread-creation">Thread Creation&lt;/h2>
&lt;p>Java provides two primary ways to create threads: extending &lt;code>Thread&lt;/code> class or implementing &lt;code>Runnable&lt;/code> interface. The &lt;code>Runnable&lt;/code> approach is preferred as it separates the task from the execution mechanism.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Using Thread&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">MyThread&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">extends&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">run&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Thread: &amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">currentThread&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="na">getName&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c1">// Using Runnable&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">MyTask&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">implements&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Runnable&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">run&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Task: &amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">currentThread&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="na">getName&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">ThreadDemo&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">static&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">[]&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c1">// Thread approach&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">MyThread&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">t1&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">MyThread&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">t1&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">start&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c1">// Runnable approach&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">t2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">MyTask&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">t2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">start&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c1">// Lambda expression&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">t3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="p">(()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Lambda: &amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Thread&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">currentThread&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="na">getName&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">});&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">t3&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">start&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="thread-lifecycle">Thread Lifecycle&lt;/h2>
&lt;p>Threads progress through different states: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, and TERMINATED.&lt;/p></description></item><item><title>DP - Design Patterns</title><link>https://fraguinha.com/post/dp/</link><pubDate>Mon, 30 Dec 2024 13:00:00 +0000</pubDate><guid>https://fraguinha.com/post/dp/</guid><description>&lt;p>Overview of the patterns described in the book &lt;em>&amp;ldquo;Dive Into Design Patterns&amp;rdquo;&lt;/em> in Java:&lt;/p>
&lt;p>&lt;strong>Creational&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Factory Method&lt;/li>
&lt;li>Abstract Factory&lt;/li>
&lt;li>Builder&lt;/li>
&lt;li>Prototype&lt;/li>
&lt;li>Singleton&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Structural&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Adapter&lt;/li>
&lt;li>Bridge&lt;/li>
&lt;li>Composite&lt;/li>
&lt;li>Decorator&lt;/li>
&lt;li>Facade&lt;/li>
&lt;li>Flyweight&lt;/li>
&lt;li>Proxy&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Behavioral&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Chain of Responsibility&lt;/li>
&lt;li>Command&lt;/li>
&lt;li>Iterator&lt;/li>
&lt;li>Mediator&lt;/li>
&lt;li>Memento&lt;/li>
&lt;li>Observer&lt;/li>
&lt;li>State&lt;/li>
&lt;li>Strategy&lt;/li>
&lt;li>Template Method&lt;/li>
&lt;li>Visitor&lt;/li>
&lt;/ul>
&lt;h1 id="creational-patterns">Creational Patterns&lt;/h1>
&lt;p>&lt;strong>Factory Method&lt;/strong>:&lt;/p>
&lt;p>A creational design pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created.&lt;/p></description></item><item><title>DS - Data Structures</title><link>https://fraguinha.com/post/ds/</link><pubDate>Thu, 26 Sep 2024 12:00:00 +0100</pubDate><guid>https://fraguinha.com/post/ds/</guid><description>&lt;p>Overview of the most commonly used data structures from both the Java Collections API and the Java Concurrent API.&lt;/p>
&lt;p>&lt;strong>Note&lt;/strong>: you can use the following to make collections thread-safe:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="n">List&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">list&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Collections&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">synchronizedList&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">ArrayList&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">Set&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Integer&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">set&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Collections&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">synchronizedSet&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">HashSet&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">Map&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Integer&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">map&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Collections&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">synchronizedMap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">HashMap&lt;/span>&lt;span class="o">&amp;lt;&amp;gt;&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>But you should prefer specialized collections from Java Concurrent API.&lt;/p>
&lt;h1 id="arrays">Arrays&lt;/h1>
&lt;p>Fixed-size, contiguous memory structures that store elements of the same type. They provide high-performance random access via zero-based indexing but require manual resizing if capacity is exceeded.&lt;/p></description></item><item><title>Sudoku - Sudoku Solver</title><link>https://fraguinha.com/post/sudoku/</link><pubDate>Wed, 12 Jul 2023 22:57:00 +0100</pubDate><guid>https://fraguinha.com/post/sudoku/</guid><description>&lt;p>The code used in this post can be found here: &lt;a href="http://github.com/Fraguinha/Sudoku-Solver">http://github.com/Fraguinha/Sudoku-Solver&lt;/a>.&lt;/p>
&lt;h1 id="sudoku">Sudoku&lt;/h1>
&lt;p>In Sudoku, the goal is to fill a 9 × 9 grid with digits so that each column, each row, and each of the nine 3 × 3 blocks that compose the grid contain all of the digits from 1 to 9.&lt;/p>
&lt;h1 id="solver">Solver&lt;/h1>
&lt;tr>
&lt;th>&lt;input id="0 0" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="0 1" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="0 2" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="0 3" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="0 4" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="0 5" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="0 6" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="0 7" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="0 8" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;/tr>
&lt;br>
&lt;tr>
&lt;th>&lt;input id="1 0" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="1 1" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="1 2" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="1 3" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="1 4" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="1 5" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="1 6" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="1 7" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="1 8" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;/tr>
&lt;br>
&lt;tr>
&lt;th>&lt;input id="2 0" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="2 1" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="2 2" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="2 3" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="2 4" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="2 5" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="2 6" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="2 7" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="2 8" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;/tr>
&lt;br>
&lt;tr>
&lt;th>&lt;input id="3 0" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="3 1" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="3 2" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="3 3" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="3 4" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="3 5" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="3 6" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="3 7" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="3 8" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;/tr>
&lt;br>
&lt;tr>
&lt;th>&lt;input id="4 0" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="4 1" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="4 2" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="4 3" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="4 4" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="4 5" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="4 6" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="4 7" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="4 8" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;/tr>
&lt;br>
&lt;tr>
&lt;th>&lt;input id="5 0" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="5 1" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="5 2" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="5 3" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="5 4" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="5 5" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="5 6" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="5 7" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="5 8" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;/tr>
&lt;br>
&lt;tr>
&lt;th>&lt;input id="6 0" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="6 1" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="6 2" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="6 3" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="6 4" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="6 5" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="6 6" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="6 7" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="6 8" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;/tr>
&lt;br>
&lt;tr>
&lt;th>&lt;input id="7 0" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="7 1" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="7 2" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="7 3" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="7 4" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="7 5" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="7 6" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="7 7" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="7 8" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;/tr>
&lt;br>
&lt;tr>
&lt;th>&lt;input id="8 0" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="8 1" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="8 2" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="8 3" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="8 4" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="8 5" class="text-center w-6 mt-1 mr-1 bg-neutral-300 dark:bg-neutral-700">&lt;/input>&lt;/th>
&lt;th>&lt;input id="8 6" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="8 7" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;th>&lt;input id="8 8" class="text-center w-6 mt-1 mr-1">&lt;/input>&lt;/th>
&lt;/tr>
&lt;p>&lt;button onclick="Solve()">Solve&lt;/button>
&lt;button onclick="Reset()">Reset&lt;/button>
&lt;button onclick="Clear()">Clear&lt;/button>&lt;/p></description></item><item><title>Lambda - Lambda Calculus System</title><link>https://fraguinha.com/post/lambda/</link><pubDate>Mon, 17 Oct 2022 20:35:28 +0100</pubDate><guid>https://fraguinha.com/post/lambda/</guid><description>&lt;p>The code used in this post can be found here: &lt;a href="http://github.com/Fraguinha/Lambda">http://github.com/Fraguinha/Lambda&lt;/a>.&lt;/p>
&lt;h1 id="lambda-calculus">Lambda Calculus&lt;/h1>
&lt;p>At it&amp;rsquo;s core, Lambda Calculus is composed of three elements: &lt;strong>variables&lt;/strong>, &lt;strong>abstractions&lt;/strong>, and &lt;strong>applications&lt;/strong>.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Variables are &lt;strong>placeholders that represent an unknown value or lambda term&lt;/strong>.
They are typically &lt;strong>represented by a single lowercase letter&lt;/strong>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Abstractions are &lt;strong>expressions that define a function&lt;/strong>.
They consist of a &lt;strong>lambda, followed by a variable, followed by a dot, followed by a lambda term&lt;/strong>.
e.g.: &lt;strong>λx.x&lt;/strong> is an &lt;strong>abstraction&lt;/strong> that &lt;strong>defines a function&lt;/strong> that &lt;strong>takes x&lt;/strong> and &lt;strong>returns x&lt;/strong>.&lt;/p></description></item><item><title>IPFS - InterPlanetary File System</title><link>https://fraguinha.com/post/ipfs/</link><pubDate>Sat, 27 Aug 2022 00:24:13 +0100</pubDate><guid>https://fraguinha.com/post/ipfs/</guid><description>&lt;p>The &lt;a href="https://ipfs.tech">InterPlanetary File System&lt;/a> is a protocol, hypermedia and file sharing peer-to-peer network for storing and sharing data in a distributed file system.&lt;/p>
&lt;h1 id="1-hosting-on-ipfs">1. Hosting on ipfs&lt;/h1>
&lt;p>After you have ipfs installed in your system, you will need to initialize your node.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sh" data-lang="sh">&lt;span class="line">&lt;span class="cl">$ ipfs init
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create a directory where your website files will be stored such as &lt;code>my-ipfs-website&lt;/code>.
Within it, write a simple &lt;code>index.html&lt;/code> file with the following content:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&amp;lt;!doctype html&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">html&lt;/span> &lt;span class="na">lang&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;en&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>Helloworld&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">body&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">h1&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>Helloworld&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">h1&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">body&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">html&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We are now ready to start hosting our content on ipfs.
Let&amp;rsquo;s add (and pin) the file we&amp;rsquo;ve just created on our node by running:&lt;/p></description></item><item><title>Hugo - Static Site Generator</title><link>https://fraguinha.com/post/hugo/</link><pubDate>Fri, 22 Jul 2022 13:34:17 +0100</pubDate><guid>https://fraguinha.com/post/hugo/</guid><description>&lt;p>Hugo is a static site generator.
It is used to create website content using markdown instead of having to write html.
You can read more about hugo on it&amp;rsquo;s &lt;a href="https://gohugo.io/">website&lt;/a>.&lt;/p>
&lt;p>If you are curious about how hugo was used in the implementation of this website you can also check out my &lt;a href="https://github.com/Fraguinha/Fraguinha.com/">github repository&lt;/a>.&lt;/p>
&lt;h1 id="1-creating-the-website">1. Creating the website&lt;/h1>
&lt;p>After you have installed hugo through your package manager of choice, you can create a new hugo site by running in your terminal:&lt;/p></description></item></channel></rss>