diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-12-22 23:38:06 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-12-22 23:38:06 +0800 |
| commit | 08e594268ed20c5c2355a249ac691c007e38aed9 (patch) | |
| tree | 2153e6319eb0bee4f062565858185088f2a29d82 /_site | |
| parent | 8f99ca06fd48386bee511d33d1207f8eaf8bb8f4 (diff) | |
| download | www-08e594268ed20c5c2355a249ac691c007e38aed9.tar.gz | |
Matrix post.
Diffstat (limited to '_site')
| -rw-r--r-- | _site/feed.xml | 2 | ||||
| -rw-r--r-- | _site/index.html | 26 | ||||
| -rw-r--r-- | _site/log/index.html | 26 | ||||
| -rw-r--r-- | _site/log/matrix-digital-rain/index.html | 105 | ||||
| -rw-r--r-- | _site/log/matrix-digital-rain/matrix.mp4 | bin | 930430 -> 696574 bytes | |||
| -rw-r--r-- | _site/log/matrix-digital-rain/poster.png | bin | 70901 -> 233077 bytes | |||
| -rw-r--r-- | _site/log/matrix-digital-rain/source.tar.gz | bin | 2075 -> 3602 bytes | |||
| -rw-r--r-- | _site/log/matrix-digital-rain/thumb_sm.png | bin | 22764 -> 52762 bytes | |||
| -rw-r--r-- | _site/posts.xml | 2 | ||||
| -rw-r--r-- | _site/projects/index.html | 30 | ||||
| -rw-r--r-- | _site/robots.txt | 2 | ||||
| -rw-r--r-- | _site/sitemap.xml | 34 |
12 files changed, 139 insertions, 88 deletions
diff --git a/_site/feed.xml b/_site/feed.xml index ed5a433..4d5229e 100644 --- a/_site/feed.xml +++ b/_site/feed.xml @@ -1 +1 @@ -<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2025-12-21T08:09:20+08:00</updated><id>/feed.xml</id><title type="html">ASCIIMX | Log</title><author><name>W. D. Sadeep Madurange</name></author><entry><title type="html">How to manage Suckless software installations</title><link href="/log/suckless-software/" rel="alternate" type="text/html" title="How to manage Suckless software installations" /><published>2025-11-30T00:00:00+08:00</published><updated>2025-11-30T00:00:00+08:00</updated><id>/log/suckless-software</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[Since suckless software requires users to modify the source code and recompile to customize, I need a way to maintain patches over the long term while retaining the ability to upgrade the software as new versions are released.]]></summary></entry><entry><title type="html">Fingerprint door lock</title><link href="/log/fpm-door-lock/" rel="alternate" type="text/html" title="Fingerprint door lock" /><published>2025-08-18T00:00:00+08:00</published><updated>2025-08-18T00:00:00+08:00</updated><id>/log/fpm-door-lock</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[This project features a fingerprint door lock powered by an ATmega328P microcontroller.]]></summary></entry><entry><title type="html">On the use of MOSFETs as electronic switches</title><link href="/log/mosfet-switches/" rel="alternate" type="text/html" title="On the use of MOSFETs as electronic switches" /><published>2025-06-22T00:00:00+08:00</published><updated>2025-06-22T00:00:00+08:00</updated><id>/log/mosfet-switches</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[Recently, I needed a low-power circuit for one of my battery-operated projects. Much of the system’s power savings depended on its ability to electronically switch off components, such as servos, that draw high levels of quiescent currents. My search for a solution led me to MOSFETs, transistors capable of controlling circuits operating at voltages far above their own.]]></summary></entry><entry><title type="html">How to configure ATmega328P microcontrollers to run at 3.3V and 5V</title><link href="/log/arduino-uno/" rel="alternate" type="text/html" title="How to configure ATmega328P microcontrollers to run at 3.3V and 5V" /><published>2025-06-10T00:00:00+08:00</published><updated>2025-06-10T00:00:00+08:00</updated><id>/log/arduino-uno</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[This is a quick reference for wiring up ATmega328P ICs to run at 5V and 3.3V. While the 5V configuration is common, the 3.3V configuration can be useful in low-power applications and when interfacing with parts that themselves run at 3.3V. In this guide, the 5V setup is configured with a 16MHz crystal oscillator, while the 3.3V configuration makes use of an 8MHz crystal oscillator.]]></summary></entry><entry><title type="html">My first PCB</title><link href="/log/my-first-pcb/" rel="alternate" type="text/html" title="My first PCB" /><published>2025-04-26T00:00:00+08:00</published><updated>2025-04-26T00:00:00+08:00</updated><id>/log/my-first-pcb</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[In 2023, I started tinkering with DIY electronics as a hobby. Until now, I’ve been using development boards like the Arduino Uno and ESP-32-WROOM so that I can focus on the software. Recently, I decided to step outside of my comfort zone and design a PCB from scratch for a door lock I’m working on.]]></summary></entry><entry><title type="html">Bumblebee: browser automation</title><link href="/log/bumblebee/" rel="alternate" type="text/html" title="Bumblebee: browser automation" /><published>2025-04-02T00:00:00+08:00</published><updated>2025-04-02T00:00:00+08:00</updated><id>/log/bumblebee</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[Bumblebee is a tool I built for one of my employers to automate the generation of web scraping scripts.]]></summary></entry><entry><title type="html">How to set up ATSAM3X8E microcontrollers for bare-metal programming in C</title><link href="/log/arduino-due/" rel="alternate" type="text/html" title="How to set up ATSAM3X8E microcontrollers for bare-metal programming in C" /><published>2024-09-16T00:00:00+08:00</published><updated>2024-09-16T00:00:00+08:00</updated><id>/log/arduino-due</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[This article is a step-by-step guide for programming bare-metal ATSAM3X8E chips found on Arduino Due boards. It also includes notes on the chip’s memory layout relevant for writing linker scripts. The steps described in this article were tested on an OpenBSD workstation.]]></summary></entry><entry><title type="html">Etlas: e-paper dashboard</title><link href="/log/etlas/" rel="alternate" type="text/html" title="Etlas: e-paper dashboard" /><published>2024-09-05T00:00:00+08:00</published><updated>2024-09-05T00:00:00+08:00</updated><id>/log/etlas</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[Etlas is a news, stock market, and weather tracker powered by an ESP32 NodeMCU D1, featuring a 7.5-inch Waveshare e-paper display and a DHT22 sensor module.]]></summary></entry><entry><title type="html">Experimental e-reader</title><link href="/log/e-reader/" rel="alternate" type="text/html" title="Experimental e-reader" /><published>2023-10-24T00:00:00+08:00</published><updated>2023-10-24T00:00:00+08:00</updated><id>/log/e-reader</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[This project features an experimental e-reader powered by an ESP-WROOM-32 development board and a 7.5-inch Waveshare e-paper display built with the intention of learning about e-paper displays.]]></summary></entry><entry><title type="html">Recreating the Matrix rain with ANSI escape sequences</title><link href="/log/matrix-digital-rain/" rel="alternate" type="text/html" title="Recreating the Matrix rain with ANSI escape sequences" /><published>2022-08-22T00:00:00+08:00</published><updated>2022-08-22T00:00:00+08:00</updated><id>/log/matrix-digital-rain</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[Over the weekend, I came across Domsson’s Fakesteak: a beautifully lean rendition of the Matrix rain in raw C using ANSI escape sequences—zero dependencies, not even ncurses.]]></summary></entry></feed>
\ No newline at end of file +<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="http://localhost:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" /><updated>2025-12-22T23:37:38+08:00</updated><id>http://localhost:4000/feed.xml</id><title type="html">ASCIIMX | Log</title><author><name>W. D. Sadeep Madurange</name></author><entry><title type="html">Recreating the Matrix rain with ANSI escape sequences</title><link href="http://localhost:4000/log/matrix-digital-rain/" rel="alternate" type="text/html" title="Recreating the Matrix rain with ANSI escape sequences" /><published>2025-12-21T00:00:00+08:00</published><updated>2025-12-21T00:00:00+08:00</updated><id>http://localhost:4000/log/matrix-digital-rain</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[The Matrix digital rain implemented in raw C using ANSI escape sequences with zero dependencies—not even ncurses.]]></summary></entry><entry><title type="html">How to manage Suckless software installations</title><link href="http://localhost:4000/log/suckless-software/" rel="alternate" type="text/html" title="How to manage Suckless software installations" /><published>2025-11-30T00:00:00+08:00</published><updated>2025-11-30T00:00:00+08:00</updated><id>http://localhost:4000/log/suckless-software</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[Since suckless software requires users to modify the source code and recompile to customize, I need a way to maintain patches over the long term while retaining the ability to upgrade the software as new versions are released.]]></summary></entry><entry><title type="html">Fingerprint door lock</title><link href="http://localhost:4000/log/fpm-door-lock/" rel="alternate" type="text/html" title="Fingerprint door lock" /><published>2025-08-18T00:00:00+08:00</published><updated>2025-08-18T00:00:00+08:00</updated><id>http://localhost:4000/log/fpm-door-lock</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[This project features a fingerprint door lock powered by an ATmega328P microcontroller.]]></summary></entry><entry><title type="html">On the use of MOSFETs as electronic switches</title><link href="http://localhost:4000/log/mosfet-switches/" rel="alternate" type="text/html" title="On the use of MOSFETs as electronic switches" /><published>2025-06-22T00:00:00+08:00</published><updated>2025-06-22T00:00:00+08:00</updated><id>http://localhost:4000/log/mosfet-switches</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[Recently, I needed a low-power circuit for one of my battery-operated projects. Much of the system’s power savings depended on its ability to electronically switch off components, such as servos, that draw high levels of quiescent currents. My search for a solution led me to MOSFETs, transistors capable of controlling circuits operating at voltages far above their own.]]></summary></entry><entry><title type="html">How to configure ATmega328P microcontrollers to run at 3.3V and 5V</title><link href="http://localhost:4000/log/arduino-uno/" rel="alternate" type="text/html" title="How to configure ATmega328P microcontrollers to run at 3.3V and 5V" /><published>2025-06-10T00:00:00+08:00</published><updated>2025-06-10T00:00:00+08:00</updated><id>http://localhost:4000/log/arduino-uno</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[This is a quick reference for wiring up ATmega328P ICs to run at 5V and 3.3V. While the 5V configuration is common, the 3.3V configuration can be useful in low-power applications and when interfacing with parts that themselves run at 3.3V. In this guide, the 5V setup is configured with a 16MHz crystal oscillator, while the 3.3V configuration makes use of an 8MHz crystal oscillator.]]></summary></entry><entry><title type="html">My first PCB</title><link href="http://localhost:4000/log/my-first-pcb/" rel="alternate" type="text/html" title="My first PCB" /><published>2025-04-26T00:00:00+08:00</published><updated>2025-04-26T00:00:00+08:00</updated><id>http://localhost:4000/log/my-first-pcb</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[In 2023, I started tinkering with DIY electronics as a hobby. Until now, I’ve been using development boards like the Arduino Uno and ESP-32-WROOM so that I can focus on the software. Recently, I decided to step outside of my comfort zone and design a PCB from scratch for a door lock I’m working on.]]></summary></entry><entry><title type="html">Bumblebee: browser automation</title><link href="http://localhost:4000/log/bumblebee/" rel="alternate" type="text/html" title="Bumblebee: browser automation" /><published>2025-04-02T00:00:00+08:00</published><updated>2025-04-02T00:00:00+08:00</updated><id>http://localhost:4000/log/bumblebee</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[Bumblebee is a tool I built for one of my employers to automate the generation of web scraping scripts.]]></summary></entry><entry><title type="html">How to set up ATSAM3X8E microcontrollers for bare-metal programming in C</title><link href="http://localhost:4000/log/arduino-due/" rel="alternate" type="text/html" title="How to set up ATSAM3X8E microcontrollers for bare-metal programming in C" /><published>2024-09-16T00:00:00+08:00</published><updated>2024-09-16T00:00:00+08:00</updated><id>http://localhost:4000/log/arduino-due</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[This article is a step-by-step guide for programming bare-metal ATSAM3X8E chips found on Arduino Due boards. It also includes notes on the chip’s memory layout relevant for writing linker scripts. The steps described in this article were tested on an OpenBSD workstation.]]></summary></entry><entry><title type="html">Etlas: e-paper dashboard</title><link href="http://localhost:4000/log/etlas/" rel="alternate" type="text/html" title="Etlas: e-paper dashboard" /><published>2024-09-05T00:00:00+08:00</published><updated>2024-09-05T00:00:00+08:00</updated><id>http://localhost:4000/log/etlas</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[Etlas is a news, stock market, and weather tracker powered by an ESP32 NodeMCU D1, featuring a 7.5-inch Waveshare e-paper display and a DHT22 sensor module.]]></summary></entry><entry><title type="html">Experimental e-reader</title><link href="http://localhost:4000/log/e-reader/" rel="alternate" type="text/html" title="Experimental e-reader" /><published>2023-10-24T00:00:00+08:00</published><updated>2023-10-24T00:00:00+08:00</updated><id>http://localhost:4000/log/e-reader</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[This project features an experimental e-reader powered by an ESP-WROOM-32 development board and a 7.5-inch Waveshare e-paper display built with the intention of learning about e-paper displays.]]></summary></entry></feed>
\ No newline at end of file diff --git a/_site/index.html b/_site/index.html index 8b74fe9..82d971f 100644 --- a/_site/index.html +++ b/_site/index.html @@ -56,6 +56,19 @@ <tr> <td class="posts-td posts-td-link"> + <a href="/log/matrix-digital-rain/" class="link-decor-none">Recreating the Matrix rain with ANSI escape sequences</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2025-12-21 00:00:00 +0800">2025-12-21</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> <a href="/log/suckless-software/" class="link-decor-none">How to manage Suckless software installations</a> </td> <td class="posts-td posts-td-time"> @@ -171,19 +184,6 @@ - <tr> - <td class="posts-td posts-td-link"> - <a href="/log/matrix-digital-rain/" class="link-decor-none">Recreating the Matrix rain with ANSI escape sequences</a> - </td> - <td class="posts-td posts-td-time"> - <span class="post-meta"> - <time datetime="2022-08-22 00:00:00 +0800">2022-08-22</time> - </span> - </td> - </tr> - - - </table> </div> diff --git a/_site/log/index.html b/_site/log/index.html index 57887a7..32f0ff2 100644 --- a/_site/log/index.html +++ b/_site/log/index.html @@ -46,6 +46,19 @@ <tr> <td class="posts-td posts-td-link"> + <a href="/log/matrix-digital-rain/" class="link-decor-none">Recreating the Matrix rain with ANSI escape sequences</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2025-12-21 00:00:00 +0800">2025-12-21</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> <a href="/log/suckless-software/" class="link-decor-none">How to manage Suckless software installations</a> </td> <td class="posts-td posts-td-time"> @@ -161,19 +174,6 @@ - <tr> - <td class="posts-td posts-td-link"> - <a href="/log/matrix-digital-rain/" class="link-decor-none">Recreating the Matrix rain with ANSI escape sequences</a> - </td> - <td class="posts-td posts-td-time"> - <span class="post-meta"> - <time datetime="2022-08-22 00:00:00 +0800">2022-08-22</time> - </span> - </td> - </tr> - - - </table> </div> diff --git a/_site/log/matrix-digital-rain/index.html b/_site/log/matrix-digital-rain/index.html index cf04bde..6007da5 100644 --- a/_site/log/matrix-digital-rain/index.html +++ b/_site/log/matrix-digital-rain/index.html @@ -42,45 +42,96 @@ <div class="container"> <div class="container-2"> <h2 class="center" id="title">RECREATING THE MATRIX RAIN WITH ANSI ESCAPE SEQUENCES</h2> - <h6 class="center">22 AUGUST 2022</h5> + <h6 class="center">21 DECEMBER 2025</h5> <br> - <div class="twocol justify"><p>Over the weekend, I came across Domsson’s <a href="https://github.com/domsson/fakesteak" class="external" target="_blank" rel="noopener noreferrer">Fakesteak</a>: a beautifully lean rendition of the -Matrix rain in raw C using ANSI escape sequences—zero dependencies, not even -ncurses.</p> - -<p>To keep things simple, Fakesteak didn’t support Japanese characters and that it -used 8-bit color mode. The latter meant that the ghosting effect has to rely on -different foreground colors rather than shades of the same color. As a tip of -the hat to Domsson’s impressive work, I decided to add Unicode and 24-bit -truecolor support to it, aiming to faithfully recreate the original Matrix from -the first movie during Neo and Cypher’s conversation:</p> + <div class="twocol justify"><p>The Matrix digital rain implemented in raw C using ANSI escape sequences with +zero dependencies—not even ncurses.</p> <video style="max-width:100%;" controls="" poster="poster.png"> <source src="matrix.mp4" type="video/mp4" /> </video> -<p>Adding Unicode support via <code class="language-plaintext highlighter-rouge">wchar_t</code> and <code class="language-plaintext highlighter-rouge">wprintf()</code> was easy enough. -Implementing the ghosting effect with truecolor support, however, turned out -harder than expected. To achieve the ghosting effect, I treated phosphor decay -as a multiplier, which allowed me to emulate the dim afterglow by gradually -transitioning each raindrop’s color towards the background color:</p> +<p>This is a fork of Domsson’s unique rendition of the Matrix rain: <a href="https://github.com/domsson/fakesteak" class="external" target="_blank" rel="noopener noreferrer">Fakesteak</a>. Three years ago, I forked his project +and added truecolor and Unicode support. I also drastically modified the +algorithm to produce a rain that resembled the original aesthetic with high +visual fidelity.</p> + +<h2 id="unicode-support">Unicode support</h2> + +<p>Unicode support in the 2022 version lacked flexibility. The charset used in the +rain had to be a single contiguous block defined by <code class="language-plaintext highlighter-rouge">UNICODE_MIN</code> and +<code class="language-plaintext highlighter-rouge">UNICODE_MAX</code> settings:</p> + +<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#define UNICODE_MIN 0x0021 +#define UNICODE_MAX 0x007E + +static inline void insert_code(matrix *mat, + size_t row, size_t col) +{ + mat->code[index(mat, row, col)] = rand() + % (UNICODE_MAX - UNICODE_MIN) + + UNICODE_MIN; +} +</code></pre></div></div> + +<p>There was no way, for instance, to use both ASCII and Katakana at the same +time. The user had to pick one. In the new version, the user can use any number +of Unicode blocks using <code class="language-plaintext highlighter-rouge">glyphs</code> array. In fact, the default rain now includes +both ASCII and half-width Katakana characters:</p> + +<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#define UNICODE(min, max) (((uint64_t)max << 32) | min) + +static uint64_t glyphs[] = { + UNICODE(0x0021, 0x007E), /* ASCII */ + UNICODE(0xFF65, 0xFF9F), /* Half-width Katakana */ +}; + +static uint8_t glyphlen = (sizeof glyphs) / (sizeof glyphs[0]); -<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>static void mat_shade(matrix *mat, size_t row, size_t col) +static inline void insert_code(matrix *mat, + size_t row, size_t col) +{ + uint64_t block; + uint32_t unicode_min, unicode_max; + + block = glyphs[(rand() % glyphlen)]; + unicode_min = (uint32_t)block; + unicode_max = (uint32_t)(block >> 32); + + mat->code[index(mat, row, col)] = rand() + % (unicode_max - unicode_min) + + unicode_min; +} +</code></pre></div></div> + +<p>Entries in the <code class="language-plaintext highlighter-rouge">glyphs</code> array are Unicode blocks bit-packed in an 8-byte +container: the four low bytes forms the first codepoint and the four high bytes +the last.</p> + +<h2 id="phosphor-decay">Phosphor decay</h2> + +<p>The dim afterglow of monochrome CRT displays is achieved by carefully scaling +the RGB channels individually and mixing them:</p> + +<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#define DECAY_MPLIER 2 + +static inline void blend(matrix *mat, + size_t row, size_t col) { unsigned char *color; - color = mat->rgb[mat_idx(mat, row, col)].color; - color[R] = color[R] - (color[R] - COLOR_BG_RED) / 2; - color[G] = color[G] - (color[G] - COLOR_BG_GRN) / 2; - color[B] = color[B] - (color[B] - COLOR_BG_BLU) / 2; + + color = mat->rgb[index(mat, row, col)].color; + color[R] = color[R] - (color[R] - RGB_BG_RED) / DECAY_MPLIER; + color[G] = color[G] - (color[G] - RGB_BG_GRN) / DECAY_MPLIER; + color[B] = color[B] - (color[B] - RGB_BG_BLU) / DECAY_MPLIER; } </code></pre></div></div> -<p>Looking back at the implementation, there are still a few improvements to be -made. Instead of using a dedicated buffer, I should have bit-packed the -phosphor decay into the RGB data buffer to save memory. I’m not entirely -satisfied with the Unicode support as it’s restricted to contiguous code -points. The glitch effect, which I implemented with characters unexpectedly -changing, would have been closer to the original if flashed white as well.</p> +<p>The blending function emulates the phosphor decay by gradually transitioning +each raindrop’s color towards the background color. The multiplier is the +number of passes over the rain track needed before the afterglow disappears.</p> + +<h2 id="the-algorithm">The algorithm</h2> <p>Nonetheless, the rain resembles the original with high visual fidelity. It’s highly customizable and gentle on the CPU. On my 14” ThinkPad T490, which has a diff --git a/_site/log/matrix-digital-rain/matrix.mp4 b/_site/log/matrix-digital-rain/matrix.mp4 Binary files differindex 84a9839..7edf5d6 100644 --- a/_site/log/matrix-digital-rain/matrix.mp4 +++ b/_site/log/matrix-digital-rain/matrix.mp4 diff --git a/_site/log/matrix-digital-rain/poster.png b/_site/log/matrix-digital-rain/poster.png Binary files differindex 0321ad3..1f68ca4 100644 --- a/_site/log/matrix-digital-rain/poster.png +++ b/_site/log/matrix-digital-rain/poster.png diff --git a/_site/log/matrix-digital-rain/source.tar.gz b/_site/log/matrix-digital-rain/source.tar.gz Binary files differindex fead280..5a69236 100644 --- a/_site/log/matrix-digital-rain/source.tar.gz +++ b/_site/log/matrix-digital-rain/source.tar.gz diff --git a/_site/log/matrix-digital-rain/thumb_sm.png b/_site/log/matrix-digital-rain/thumb_sm.png Binary files differindex d3f06c9..940965a 100644 --- a/_site/log/matrix-digital-rain/thumb_sm.png +++ b/_site/log/matrix-digital-rain/thumb_sm.png diff --git a/_site/posts.xml b/_site/posts.xml index d5fea09..1d3402d 100644 --- a/_site/posts.xml +++ b/_site/posts.xml @@ -1 +1 @@ -<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="/posts.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2025-12-21T08:09:20+08:00</updated><id>/posts.xml</id><title type="html">ASCIIMX</title><author><name>W. D. Sadeep Madurange</name></author></feed>
\ No newline at end of file +<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="http://localhost:4000/posts.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" /><updated>2025-12-22T23:37:38+08:00</updated><id>http://localhost:4000/posts.xml</id><title type="html">ASCIIMX</title><author><name>W. D. Sadeep Madurange</name></author></feed>
\ No newline at end of file diff --git a/_site/projects/index.html b/_site/projects/index.html index 2ef4c48..c75a620 100644 --- a/_site/projects/index.html +++ b/_site/projects/index.html @@ -50,17 +50,17 @@ <td class="project-item"> - <a href="../log/fpm-door-lock" class="link-decor-none"> - <img src="../log/fpm-door-lock/thumb_sm.jpg" alt="Fingerprint door lock"> - <h5>Fingerprint door lock</h5> + <a href="../log/matrix-digital-rain" class="link-decor-none"> + <img src="../log/matrix-digital-rain/thumb_sm.png" alt="Recreating the Matrix rain with ANSI escape sequences"> + <h5>Recreating the Matrix rain with ANSI escape sequences</h5> </a> </td> <td class="project-item"> - <a href="../log/bumblebee" class="link-decor-none"> - <img src="../log/bumblebee/thumb_sm.png" alt="Bumblebee: browser automation"> - <h5>Bumblebee: browser automation</h5> + <a href="../log/fpm-door-lock" class="link-decor-none"> + <img src="../log/fpm-door-lock/thumb_sm.jpg" alt="Fingerprint door lock"> + <h5>Fingerprint door lock</h5> </a> </td> @@ -71,17 +71,17 @@ <td class="project-item"> - <a href="../log/etlas" class="link-decor-none"> - <img src="../log/etlas/thumb_sm.jpg" alt="Etlas: e-paper dashboard"> - <h5>Etlas: e-paper dashboard</h5> + <a href="../log/bumblebee" class="link-decor-none"> + <img src="../log/bumblebee/thumb_sm.png" alt="Bumblebee: browser automation"> + <h5>Bumblebee: browser automation</h5> </a> </td> <td class="project-item"> - <a href="../log/e-reader" class="link-decor-none"> - <img src="../log/e-reader/thumb_sm.png" alt="Experimental e-reader"> - <h5>Experimental e-reader</h5> + <a href="../log/etlas" class="link-decor-none"> + <img src="../log/etlas/thumb_sm.jpg" alt="Etlas: e-paper dashboard"> + <h5>Etlas: e-paper dashboard</h5> </a> </td> @@ -92,9 +92,9 @@ <td class="project-item"> - <a href="../log/matrix-digital-rain" class="link-decor-none"> - <img src="../log/matrix-digital-rain/thumb_sm.png" alt="Recreating the Matrix rain with ANSI escape sequences"> - <h5>Recreating the Matrix rain with ANSI escape sequences</h5> + <a href="../log/e-reader" class="link-decor-none"> + <img src="../log/e-reader/thumb_sm.png" alt="Experimental e-reader"> + <h5>Experimental e-reader</h5> </a> </td> diff --git a/_site/robots.txt b/_site/robots.txt index e087884..d297064 100644 --- a/_site/robots.txt +++ b/_site/robots.txt @@ -1 +1 @@ -Sitemap: /sitemap.xml +Sitemap: http://localhost:4000/sitemap.xml diff --git a/_site/sitemap.xml b/_site/sitemap.xml index e2c5b7e..7a775fd 100644 --- a/_site/sitemap.xml +++ b/_site/sitemap.xml @@ -1,55 +1,55 @@ <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> -<loc>/log/matrix-digital-rain/</loc> -<lastmod>2022-08-22T00:00:00+08:00</lastmod> -</url> -<url> -<loc>/log/e-reader/</loc> +<loc>http://localhost:4000/log/e-reader/</loc> <lastmod>2023-10-24T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/etlas/</loc> +<loc>http://localhost:4000/log/etlas/</loc> <lastmod>2024-09-05T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/arduino-due/</loc> +<loc>http://localhost:4000/log/arduino-due/</loc> <lastmod>2024-09-16T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/bumblebee/</loc> +<loc>http://localhost:4000/log/bumblebee/</loc> <lastmod>2025-04-02T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/my-first-pcb/</loc> +<loc>http://localhost:4000/log/my-first-pcb/</loc> <lastmod>2025-04-26T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/arduino-uno/</loc> +<loc>http://localhost:4000/log/arduino-uno/</loc> <lastmod>2025-06-10T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/mosfet-switches/</loc> +<loc>http://localhost:4000/log/mosfet-switches/</loc> <lastmod>2025-06-22T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/fpm-door-lock/</loc> +<loc>http://localhost:4000/log/fpm-door-lock/</loc> <lastmod>2025-08-18T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/suckless-software/</loc> +<loc>http://localhost:4000/log/suckless-software/</loc> <lastmod>2025-11-30T00:00:00+08:00</lastmod> </url> <url> -<loc>/about/</loc> +<loc>http://localhost:4000/log/matrix-digital-rain/</loc> +<lastmod>2025-12-21T00:00:00+08:00</lastmod> +</url> +<url> +<loc>http://localhost:4000/about/</loc> </url> <url> -<loc>/</loc> +<loc>http://localhost:4000/</loc> </url> <url> -<loc>/log/</loc> +<loc>http://localhost:4000/log/</loc> </url> <url> -<loc>/projects/</loc> +<loc>http://localhost:4000/projects/</loc> </url> </urlset> |
