diff options
Diffstat (limited to '_site')
| -rw-r--r-- | _site/404.html | 2 | ||||
| -rw-r--r-- | _site/about/index.html | 2 | ||||
| -rw-r--r-- | _site/feed.xml | 2 | ||||
| -rw-r--r-- | _site/index.html | 75 | ||||
| -rw-r--r-- | _site/log/arduino-due/index.html | 4 | ||||
| -rw-r--r-- | _site/log/arduino-uno/index.html | 4 | ||||
| -rw-r--r-- | _site/log/bumblebee/bee.mp4 (renamed from _site/poc/bumblebee/bee.mp4) | bin | 2352029 -> 2352029 bytes | |||
| -rw-r--r-- | _site/log/bumblebee/index.html (renamed from _site/poc/bumblebee/index.html) | 6 | ||||
| -rw-r--r-- | _site/log/bumblebee/poster.png (renamed from _site/poc/bumblebee/poster.png) | bin | 18024 -> 18024 bytes | |||
| -rw-r--r-- | _site/log/bumblebee/thumb_sm.png (renamed from _site/poc/bumblebee/thumb_sm.png) | bin | 6189 -> 6189 bytes | |||
| -rw-r--r-- | _site/log/e-reader/circuit.svg (renamed from _site/poc/e-reader/circuit.svg) | 0 | ||||
| -rw-r--r-- | _site/log/e-reader/ereader.mp4 (renamed from _site/poc/e-reader/ereader.mp4) | bin | 3101166 -> 3101166 bytes | |||
| -rw-r--r-- | _site/log/e-reader/index.html (renamed from _site/poc/e-reader/index.html) | 6 | ||||
| -rw-r--r-- | _site/log/e-reader/poster.png (renamed from _site/poc/e-reader/poster.png) | bin | 674187 -> 674187 bytes | |||
| -rw-r--r-- | _site/log/e-reader/source.tar.gz (renamed from _site/poc/e-reader/source.tar.gz) | bin | 14304 -> 14304 bytes | |||
| -rw-r--r-- | _site/log/e-reader/thumb_sm.png (renamed from _site/poc/e-reader/thumb_sm.png) | bin | 240117 -> 240117 bytes | |||
| -rw-r--r-- | _site/log/etlas/circuit.svg (renamed from _site/poc/etlas/circuit.svg) | 0 | ||||
| -rw-r--r-- | _site/log/etlas/dash.jpg (renamed from _site/poc/etlas/dash.jpg) | bin | 85874 -> 85874 bytes | |||
| -rw-r--r-- | _site/log/etlas/etlas_arch.png (renamed from _site/poc/etlas/etlas_arch.png) | bin | 47732 -> 47732 bytes | |||
| -rw-r--r-- | _site/log/etlas/index.html (renamed from _site/poc/etlas/index.html) | 6 | ||||
| -rw-r--r-- | _site/log/etlas/pcb.jpg (renamed from _site/poc/etlas/pcb.jpg) | bin | 75769 -> 75769 bytes | |||
| -rw-r--r-- | _site/log/etlas/schematic.svg (renamed from _site/poc/etlas/schematic.svg) | 0 | ||||
| -rw-r--r-- | _site/log/etlas/source.tar.gz (renamed from _site/poc/etlas/source.tar.gz) | bin | 46871 -> 46871 bytes | |||
| -rw-r--r-- | _site/log/etlas/thumb_sm.jpg (renamed from _site/poc/etlas/thumb_sm.jpg) | bin | 55678 -> 55678 bytes | |||
| -rw-r--r-- | _site/log/fpm-door-lock/breadboard.jpg (renamed from _site/poc/fpm-door-lock/breadboard.jpg) | bin | 46771 -> 46771 bytes | |||
| -rw-r--r-- | _site/log/fpm-door-lock/footprint.png (renamed from _site/poc/fpm-door-lock/footprint.png) | bin | 198127 -> 198127 bytes | |||
| -rw-r--r-- | _site/log/fpm-door-lock/gerber.zip (renamed from _site/poc/fpm-door-lock/gerber.zip) | bin | 89431 -> 89431 bytes | |||
| -rw-r--r-- | _site/log/fpm-door-lock/index.html (renamed from _site/poc/fpm-door-lock/index.html) | 8 | ||||
| -rw-r--r-- | _site/log/fpm-door-lock/pcb.jpg (renamed from _site/poc/fpm-door-lock/pcb.jpg) | bin | 68237 -> 68237 bytes | |||
| -rw-r--r-- | _site/log/fpm-door-lock/pcb1.jpg (renamed from _site/poc/fpm-door-lock/pcb1.jpg) | bin | 37068 -> 37068 bytes | |||
| -rw-r--r-- | _site/log/fpm-door-lock/source.tar.gz (renamed from _site/poc/fpm-door-lock/source.tar.gz) | bin | 29473 -> 29473 bytes | |||
| -rw-r--r-- | _site/log/fpm-door-lock/thumb_sm.jpg (renamed from _site/poc/fpm-door-lock/thumb_sm.jpg) | bin | 18380 -> 18380 bytes | |||
| -rw-r--r-- | _site/log/fpm-door-lock/video.mp4 (renamed from _site/poc/fpm-door-lock/video.mp4) | bin | 13264594 -> 13264594 bytes | |||
| -rw-r--r-- | _site/log/index.html | 75 | ||||
| -rw-r--r-- | _site/log/matrix-digital-rain/index.html (renamed from _site/poc/matrix-digital-rain/index.html) | 8 | ||||
| -rw-r--r-- | _site/log/matrix-digital-rain/katakana.png (renamed from _site/poc/matrix-digital-rain/katakana.png) | bin | 133709 -> 133709 bytes | |||
| -rw-r--r-- | _site/log/matrix-digital-rain/matrix.mp4 (renamed from _site/poc/matrix-digital-rain/matrix.mp4) | bin | 930430 -> 930430 bytes | |||
| -rw-r--r-- | _site/log/matrix-digital-rain/poster.png (renamed from _site/poc/matrix-digital-rain/poster.png) | bin | 70901 -> 70901 bytes | |||
| -rw-r--r-- | _site/log/matrix-digital-rain/source.tar.gz (renamed from _site/poc/matrix-digital-rain/source.tar.gz) | bin | 2075 -> 2075 bytes | |||
| -rw-r--r-- | _site/log/matrix-digital-rain/thumb_sm.png (renamed from _site/poc/matrix-digital-rain/thumb_sm.png) | bin | 22764 -> 22764 bytes | |||
| -rw-r--r-- | _site/log/mosfet-switches/index.html | 2 | ||||
| -rw-r--r-- | _site/log/my-first-pcb/back.jpeg (renamed from _site/poc/my-first-pcb/back.jpeg) | bin | 34023 -> 34023 bytes | |||
| -rw-r--r-- | _site/log/my-first-pcb/back_design.jpeg (renamed from _site/poc/my-first-pcb/back_design.jpeg) | bin | 31946 -> 31946 bytes | |||
| -rw-r--r-- | _site/log/my-first-pcb/front.jpeg (renamed from _site/poc/my-first-pcb/front.jpeg) | bin | 28997 -> 28997 bytes | |||
| -rw-r--r-- | _site/log/my-first-pcb/front_design.jpeg (renamed from _site/poc/my-first-pcb/front_design.jpeg) | bin | 32174 -> 32174 bytes | |||
| -rw-r--r-- | _site/log/my-first-pcb/gerber_back.zip (renamed from _site/poc/my-first-pcb/gerber_back.zip) | bin | 48217 -> 48217 bytes | |||
| -rw-r--r-- | _site/log/my-first-pcb/gerber_front.zip (renamed from _site/poc/my-first-pcb/gerber_front.zip) | bin | 49605 -> 49605 bytes | |||
| -rw-r--r-- | _site/log/my-first-pcb/index.html (renamed from _site/poc/my-first-pcb/index.html) | 8 | ||||
| -rw-r--r-- | _site/log/my-first-pcb/source.tar.gz (renamed from _site/poc/my-first-pcb/source.tar.gz) | bin | 6660 -> 6660 bytes | |||
| -rw-r--r-- | _site/log/my-first-pcb/thumb_sm.jpeg (renamed from _site/poc/my-first-pcb/thumb_sm.jpeg) | bin | 6181 -> 6181 bytes | |||
| -rw-r--r-- | _site/log/neo4j-a-star-search/index.html | 370 | ||||
| -rw-r--r-- | _site/log/suckless-software/index.html | 2 | ||||
| -rw-r--r-- | _site/posts.xml | 2 | ||||
| -rw-r--r-- | _site/projects/index.html (renamed from _site/poc/index.html) | 47 | ||||
| -rw-r--r-- | _site/robots.txt | 2 | ||||
| -rw-r--r-- | _site/sitemap.xml | 52 |
56 files changed, 221 insertions, 462 deletions
diff --git a/_site/404.html b/_site/404.html index 07b0843..00df26d 100644 --- a/_site/404.html +++ b/_site/404.html @@ -23,7 +23,7 @@ <a href="/log/" class="link-decor-none">log</a> </li> <li > - <a href="/poc/" class="link-decor-none">poc</a> + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> diff --git a/_site/about/index.html b/_site/about/index.html index 4b4e827..2bb5f64 100644 --- a/_site/about/index.html +++ b/_site/about/index.html @@ -23,7 +23,7 @@ <a href="/log/" class="link-decor-none">log</a> </li> <li > - <a href="/poc/" class="link-decor-none">poc</a> + <a href="/projects/" class="link-decor-none">poc</a> </li> <li class="active"> <a href="/about/" class="link-decor-none">abt</a> diff --git a/_site/feed.xml b/_site/feed.xml index 3c01d71..dd2f441 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-20T11:31:17+08:00</updated><id>/feed.xml</id><title type="html">ASCIIMX | Poc</title><author><name>W. D. Sadeep Madurange</name></author><entry><title type="html">Fingerprint door lock</title><link href="/poc/fpm-door-lock/" rel="alternate" type="text/html" title="Fingerprint door lock" /><published>2025-10-03T00:00:00+08:00</published><updated>2025-10-03T00:00:00+08:00</updated><id>/poc/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">My first PCB</title><link href="/poc/my-first-pcb/" rel="alternate" type="text/html" title="My first PCB" /><published>2025-07-14T00:00:00+08:00</published><updated>2025-07-14T00:00:00+08:00</updated><id>/poc/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="/poc/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>/poc/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">Etlas: e-paper dashboard</title><link href="/poc/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>/poc/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">The Matrix digital rain</title><link href="/poc/matrix-digital-rain/" rel="alternate" type="text/html" title="The Matrix digital rain" /><published>2024-01-12T00:00:00+08:00</published><updated>2024-01-12T00:00:00+08:00</updated><id>/poc/matrix-digital-rain</id><author><name>W. D. Sadeep Madurange</name></author><summary type="html"><![CDATA[“All I see is blonde, brunette, red head.” The iconic digital rain from The Matrix in C, with zero dependencies—not even ncurses.]]></summary></entry><entry><title type="html">Experimental e-reader</title><link href="/poc/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>/poc/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 +<?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-20T21:35:40+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">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><entry><title type="html">The Matrix digital rain</title><link href="http://localhost:4000/log/matrix-digital-rain/" rel="alternate" type="text/html" title="The Matrix digital rain" /><published>2022-08-22T00:00:00+08:00</published><updated>2022-08-22T00: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[“All I see is blonde, brunette, red head.” The iconic digital rain from The Matrix in C, with zero dependencies—not even ncurses.]]></summary></entry></feed>
\ No newline at end of file diff --git a/_site/index.html b/_site/index.html index a7f0029..f279bc5 100644 --- a/_site/index.html +++ b/_site/index.html @@ -23,7 +23,7 @@ <a href="/log/" class="link-decor-none">log</a> </li> <li > - <a href="/poc/" class="link-decor-none">poc</a> + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> @@ -69,11 +69,11 @@ <tr> <td class="posts-td posts-td-link"> - <a href="/log/neo4j-a-star-search/" class="link-decor-none">Neo4J A* search</a> + <a href="/log/fpm-door-lock/" class="link-decor-none">Fingerprint door lock</a> </td> <td class="posts-td posts-td-time"> <span class="post-meta"> - <time datetime="2025-09-14 00:00:00 +0800">2025-09-14</time> + <time datetime="2025-08-18 00:00:00 +0800">2025-08-18</time> </span> </td> </tr> @@ -99,7 +99,33 @@ </td> <td class="posts-td posts-td-time"> <span class="post-meta"> - <time datetime="2025-04-10 00:00:00 +0800">2025-04-10</time> + <time datetime="2025-06-10 00:00:00 +0800">2025-06-10</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/my-first-pcb/" class="link-decor-none">My first PCB</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2025-04-26 00:00:00 +0800">2025-04-26</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/bumblebee/" class="link-decor-none">Bumblebee: browser automation</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2025-04-02 00:00:00 +0800">2025-04-02</time> </span> </td> </tr> @@ -112,7 +138,46 @@ </td> <td class="posts-td posts-td-time"> <span class="post-meta"> - <time datetime="2024-10-05 00:00:00 +0800">2024-10-05</time> + <time datetime="2024-09-16 00:00:00 +0800">2024-09-16</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/etlas/" class="link-decor-none">Etlas: e-paper dashboard</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2024-09-05 00:00:00 +0800">2024-09-05</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/e-reader/" class="link-decor-none">Experimental e-reader</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2023-10-24 00:00:00 +0800">2023-10-24</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/matrix-digital-rain/" class="link-decor-none">The Matrix digital rain</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> diff --git a/_site/log/arduino-due/index.html b/_site/log/arduino-due/index.html index c8bbc55..d2248bc 100644 --- a/_site/log/arduino-due/index.html +++ b/_site/log/arduino-due/index.html @@ -27,7 +27,7 @@ <a href="/log/" class="link-decor-none">log</a> </li> <li > - <a href="/poc/" class="link-decor-none">poc</a> + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> @@ -42,7 +42,7 @@ <div class="container"> <div class="container-2"> <h2 class="center" id="title">HOW TO SET UP ATSAM3X8E MICROCONTROLLERS FOR BARE-METAL PROGRAMMING IN C</h2> - <h6 class="center">05 OCTOBER 2024</h5> + <h6 class="center">16 SEPTEMBER 2024</h5> <br> <div class="twocol justify"><p>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 diff --git a/_site/log/arduino-uno/index.html b/_site/log/arduino-uno/index.html index 612854f..45f6456 100644 --- a/_site/log/arduino-uno/index.html +++ b/_site/log/arduino-uno/index.html @@ -27,7 +27,7 @@ <a href="/log/" class="link-decor-none">log</a> </li> <li > - <a href="/poc/" class="link-decor-none">poc</a> + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> @@ -42,7 +42,7 @@ <div class="container"> <div class="container-2"> <h2 class="center" id="title">HOW TO CONFIGURE ATMEGA328P MICROCONTROLLERS TO RUN AT 3.3V AND 5V</h2> - <h6 class="center">10 APRIL 2025</h5> + <h6 class="center">10 JUNE 2025</h5> <br> <div class="twocol justify"><p>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 diff --git a/_site/poc/bumblebee/bee.mp4 b/_site/log/bumblebee/bee.mp4 Binary files differindex 835600d..835600d 100644 --- a/_site/poc/bumblebee/bee.mp4 +++ b/_site/log/bumblebee/bee.mp4 diff --git a/_site/poc/bumblebee/index.html b/_site/log/bumblebee/index.html index 6ac52f6..7fabd41 100644 --- a/_site/poc/bumblebee/index.html +++ b/_site/log/bumblebee/index.html @@ -23,11 +23,11 @@ <li > <a href="/" class="link-decor-none">hme</a> </li> - <li > + <li class="active"> <a href="/log/" class="link-decor-none">log</a> </li> - <li class="active"> - <a href="/poc/" class="link-decor-none">poc</a> + <li > + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> diff --git a/_site/poc/bumblebee/poster.png b/_site/log/bumblebee/poster.png Binary files differindex 6dc955e..6dc955e 100644 --- a/_site/poc/bumblebee/poster.png +++ b/_site/log/bumblebee/poster.png diff --git a/_site/poc/bumblebee/thumb_sm.png b/_site/log/bumblebee/thumb_sm.png Binary files differindex f7cfbf3..f7cfbf3 100644 --- a/_site/poc/bumblebee/thumb_sm.png +++ b/_site/log/bumblebee/thumb_sm.png diff --git a/_site/poc/e-reader/circuit.svg b/_site/log/e-reader/circuit.svg index fd7508b..fd7508b 100644 --- a/_site/poc/e-reader/circuit.svg +++ b/_site/log/e-reader/circuit.svg diff --git a/_site/poc/e-reader/ereader.mp4 b/_site/log/e-reader/ereader.mp4 Binary files differindex 89e05eb..89e05eb 100644 --- a/_site/poc/e-reader/ereader.mp4 +++ b/_site/log/e-reader/ereader.mp4 diff --git a/_site/poc/e-reader/index.html b/_site/log/e-reader/index.html index 6f52897..3d61417 100644 --- a/_site/poc/e-reader/index.html +++ b/_site/log/e-reader/index.html @@ -23,11 +23,11 @@ <li > <a href="/" class="link-decor-none">hme</a> </li> - <li > + <li class="active"> <a href="/log/" class="link-decor-none">log</a> </li> - <li class="active"> - <a href="/poc/" class="link-decor-none">poc</a> + <li > + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> diff --git a/_site/poc/e-reader/poster.png b/_site/log/e-reader/poster.png Binary files differindex 1e222d2..1e222d2 100644 --- a/_site/poc/e-reader/poster.png +++ b/_site/log/e-reader/poster.png diff --git a/_site/poc/e-reader/source.tar.gz b/_site/log/e-reader/source.tar.gz Binary files differindex 3e343a7..3e343a7 100644 --- a/_site/poc/e-reader/source.tar.gz +++ b/_site/log/e-reader/source.tar.gz diff --git a/_site/poc/e-reader/thumb_sm.png b/_site/log/e-reader/thumb_sm.png Binary files differindex 7c971e8..7c971e8 100644 --- a/_site/poc/e-reader/thumb_sm.png +++ b/_site/log/e-reader/thumb_sm.png diff --git a/_site/poc/etlas/circuit.svg b/_site/log/etlas/circuit.svg index 6255045..6255045 100644 --- a/_site/poc/etlas/circuit.svg +++ b/_site/log/etlas/circuit.svg diff --git a/_site/poc/etlas/dash.jpg b/_site/log/etlas/dash.jpg Binary files differindex cf4efc6..cf4efc6 100644 --- a/_site/poc/etlas/dash.jpg +++ b/_site/log/etlas/dash.jpg diff --git a/_site/poc/etlas/etlas_arch.png b/_site/log/etlas/etlas_arch.png Binary files differindex 241e9f1..241e9f1 100644 --- a/_site/poc/etlas/etlas_arch.png +++ b/_site/log/etlas/etlas_arch.png diff --git a/_site/poc/etlas/index.html b/_site/log/etlas/index.html index d2b60bd..e4a4a9e 100644 --- a/_site/poc/etlas/index.html +++ b/_site/log/etlas/index.html @@ -23,11 +23,11 @@ <li > <a href="/" class="link-decor-none">hme</a> </li> - <li > + <li class="active"> <a href="/log/" class="link-decor-none">log</a> </li> - <li class="active"> - <a href="/poc/" class="link-decor-none">poc</a> + <li > + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> diff --git a/_site/poc/etlas/pcb.jpg b/_site/log/etlas/pcb.jpg Binary files differindex fcb40fa..fcb40fa 100644 --- a/_site/poc/etlas/pcb.jpg +++ b/_site/log/etlas/pcb.jpg diff --git a/_site/poc/etlas/schematic.svg b/_site/log/etlas/schematic.svg index 3070dd1..3070dd1 100644 --- a/_site/poc/etlas/schematic.svg +++ b/_site/log/etlas/schematic.svg diff --git a/_site/poc/etlas/source.tar.gz b/_site/log/etlas/source.tar.gz Binary files differindex 8b12cf6..8b12cf6 100644 --- a/_site/poc/etlas/source.tar.gz +++ b/_site/log/etlas/source.tar.gz diff --git a/_site/poc/etlas/thumb_sm.jpg b/_site/log/etlas/thumb_sm.jpg Binary files differindex a374879..a374879 100644 --- a/_site/poc/etlas/thumb_sm.jpg +++ b/_site/log/etlas/thumb_sm.jpg diff --git a/_site/poc/fpm-door-lock/breadboard.jpg b/_site/log/fpm-door-lock/breadboard.jpg Binary files differindex 2bf47a9..2bf47a9 100644 --- a/_site/poc/fpm-door-lock/breadboard.jpg +++ b/_site/log/fpm-door-lock/breadboard.jpg diff --git a/_site/poc/fpm-door-lock/footprint.png b/_site/log/fpm-door-lock/footprint.png Binary files differindex 5511bf1..5511bf1 100644 --- a/_site/poc/fpm-door-lock/footprint.png +++ b/_site/log/fpm-door-lock/footprint.png diff --git a/_site/poc/fpm-door-lock/gerber.zip b/_site/log/fpm-door-lock/gerber.zip Binary files differindex 19a9d19..19a9d19 100644 --- a/_site/poc/fpm-door-lock/gerber.zip +++ b/_site/log/fpm-door-lock/gerber.zip diff --git a/_site/poc/fpm-door-lock/index.html b/_site/log/fpm-door-lock/index.html index 9fbf003..1460053 100644 --- a/_site/poc/fpm-door-lock/index.html +++ b/_site/log/fpm-door-lock/index.html @@ -23,11 +23,11 @@ <li > <a href="/" class="link-decor-none">hme</a> </li> - <li > + <li class="active"> <a href="/log/" class="link-decor-none">log</a> </li> - <li class="active"> - <a href="/poc/" class="link-decor-none">poc</a> + <li > + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> @@ -42,7 +42,7 @@ <div class="container"> <div class="container-2"> <h2 class="center" id="title">FINGERPRINT DOOR LOCK</h2> - <h6 class="center">03 OCTOBER 2025</h5> + <h6 class="center">18 AUGUST 2025</h5> <br> <div class="twocol justify"><p>This project features a fingerprint door lock powered by an ATmega328P microcontroller.</p> diff --git a/_site/poc/fpm-door-lock/pcb.jpg b/_site/log/fpm-door-lock/pcb.jpg Binary files differindex fbd800b..fbd800b 100644 --- a/_site/poc/fpm-door-lock/pcb.jpg +++ b/_site/log/fpm-door-lock/pcb.jpg diff --git a/_site/poc/fpm-door-lock/pcb1.jpg b/_site/log/fpm-door-lock/pcb1.jpg Binary files differindex 367187d..367187d 100644 --- a/_site/poc/fpm-door-lock/pcb1.jpg +++ b/_site/log/fpm-door-lock/pcb1.jpg diff --git a/_site/poc/fpm-door-lock/source.tar.gz b/_site/log/fpm-door-lock/source.tar.gz Binary files differindex ef23422..ef23422 100644 --- a/_site/poc/fpm-door-lock/source.tar.gz +++ b/_site/log/fpm-door-lock/source.tar.gz diff --git a/_site/poc/fpm-door-lock/thumb_sm.jpg b/_site/log/fpm-door-lock/thumb_sm.jpg Binary files differindex a8fa534..a8fa534 100644 --- a/_site/poc/fpm-door-lock/thumb_sm.jpg +++ b/_site/log/fpm-door-lock/thumb_sm.jpg diff --git a/_site/poc/fpm-door-lock/video.mp4 b/_site/log/fpm-door-lock/video.mp4 Binary files differindex a907a9b..a907a9b 100644 --- a/_site/poc/fpm-door-lock/video.mp4 +++ b/_site/log/fpm-door-lock/video.mp4 diff --git a/_site/log/index.html b/_site/log/index.html index fb9802a..181a379 100644 --- a/_site/log/index.html +++ b/_site/log/index.html @@ -23,7 +23,7 @@ <a href="/log/" class="link-decor-none">log</a> </li> <li > - <a href="/poc/" class="link-decor-none">poc</a> + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> @@ -59,11 +59,11 @@ <tr> <td class="posts-td posts-td-link"> - <a href="/log/neo4j-a-star-search/" class="link-decor-none">Neo4J A* search</a> + <a href="/log/fpm-door-lock/" class="link-decor-none">Fingerprint door lock</a> </td> <td class="posts-td posts-td-time"> <span class="post-meta"> - <time datetime="2025-09-14 00:00:00 +0800">2025-09-14</time> + <time datetime="2025-08-18 00:00:00 +0800">2025-08-18</time> </span> </td> </tr> @@ -89,7 +89,33 @@ </td> <td class="posts-td posts-td-time"> <span class="post-meta"> - <time datetime="2025-04-10 00:00:00 +0800">2025-04-10</time> + <time datetime="2025-06-10 00:00:00 +0800">2025-06-10</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/my-first-pcb/" class="link-decor-none">My first PCB</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2025-04-26 00:00:00 +0800">2025-04-26</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/bumblebee/" class="link-decor-none">Bumblebee: browser automation</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2025-04-02 00:00:00 +0800">2025-04-02</time> </span> </td> </tr> @@ -102,7 +128,46 @@ </td> <td class="posts-td posts-td-time"> <span class="post-meta"> - <time datetime="2024-10-05 00:00:00 +0800">2024-10-05</time> + <time datetime="2024-09-16 00:00:00 +0800">2024-09-16</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/etlas/" class="link-decor-none">Etlas: e-paper dashboard</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2024-09-05 00:00:00 +0800">2024-09-05</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/e-reader/" class="link-decor-none">Experimental e-reader</a> + </td> + <td class="posts-td posts-td-time"> + <span class="post-meta"> + <time datetime="2023-10-24 00:00:00 +0800">2023-10-24</time> + </span> + </td> + </tr> + + + + <tr> + <td class="posts-td posts-td-link"> + <a href="/log/matrix-digital-rain/" class="link-decor-none">The Matrix digital rain</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> diff --git a/_site/poc/matrix-digital-rain/index.html b/_site/log/matrix-digital-rain/index.html index dfcc274..26244b3 100644 --- a/_site/poc/matrix-digital-rain/index.html +++ b/_site/log/matrix-digital-rain/index.html @@ -23,11 +23,11 @@ <li > <a href="/" class="link-decor-none">hme</a> </li> - <li > + <li class="active"> <a href="/log/" class="link-decor-none">log</a> </li> - <li class="active"> - <a href="/poc/" class="link-decor-none">poc</a> + <li > + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> @@ -42,7 +42,7 @@ <div class="container"> <div class="container-2"> <h2 class="center" id="title">THE MATRIX DIGITAL RAIN</h2> - <h6 class="center">12 JANUARY 2024</h5> + <h6 class="center">22 AUGUST 2022</h5> <br> <div class="twocol justify"><p>“All I see is blonde, brunette, red head.” The iconic digital rain from The Matrix in C, with zero dependencies—not even ncurses.</p> diff --git a/_site/poc/matrix-digital-rain/katakana.png b/_site/log/matrix-digital-rain/katakana.png Binary files differindex b9df873..b9df873 100644 --- a/_site/poc/matrix-digital-rain/katakana.png +++ b/_site/log/matrix-digital-rain/katakana.png diff --git a/_site/poc/matrix-digital-rain/matrix.mp4 b/_site/log/matrix-digital-rain/matrix.mp4 Binary files differindex 84a9839..84a9839 100644 --- a/_site/poc/matrix-digital-rain/matrix.mp4 +++ b/_site/log/matrix-digital-rain/matrix.mp4 diff --git a/_site/poc/matrix-digital-rain/poster.png b/_site/log/matrix-digital-rain/poster.png Binary files differindex 0321ad3..0321ad3 100644 --- a/_site/poc/matrix-digital-rain/poster.png +++ b/_site/log/matrix-digital-rain/poster.png diff --git a/_site/poc/matrix-digital-rain/source.tar.gz b/_site/log/matrix-digital-rain/source.tar.gz Binary files differindex fead280..fead280 100644 --- a/_site/poc/matrix-digital-rain/source.tar.gz +++ b/_site/log/matrix-digital-rain/source.tar.gz diff --git a/_site/poc/matrix-digital-rain/thumb_sm.png b/_site/log/matrix-digital-rain/thumb_sm.png Binary files differindex d3f06c9..d3f06c9 100644 --- a/_site/poc/matrix-digital-rain/thumb_sm.png +++ b/_site/log/matrix-digital-rain/thumb_sm.png diff --git a/_site/log/mosfet-switches/index.html b/_site/log/mosfet-switches/index.html index 9bf9d30..3b8f83b 100644 --- a/_site/log/mosfet-switches/index.html +++ b/_site/log/mosfet-switches/index.html @@ -27,7 +27,7 @@ <a href="/log/" class="link-decor-none">log</a> </li> <li > - <a href="/poc/" class="link-decor-none">poc</a> + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> diff --git a/_site/poc/my-first-pcb/back.jpeg b/_site/log/my-first-pcb/back.jpeg Binary files differindex f458e69..f458e69 100644 --- a/_site/poc/my-first-pcb/back.jpeg +++ b/_site/log/my-first-pcb/back.jpeg diff --git a/_site/poc/my-first-pcb/back_design.jpeg b/_site/log/my-first-pcb/back_design.jpeg Binary files differindex b6c0f5d..b6c0f5d 100644 --- a/_site/poc/my-first-pcb/back_design.jpeg +++ b/_site/log/my-first-pcb/back_design.jpeg diff --git a/_site/poc/my-first-pcb/front.jpeg b/_site/log/my-first-pcb/front.jpeg Binary files differindex 2b2931f..2b2931f 100644 --- a/_site/poc/my-first-pcb/front.jpeg +++ b/_site/log/my-first-pcb/front.jpeg diff --git a/_site/poc/my-first-pcb/front_design.jpeg b/_site/log/my-first-pcb/front_design.jpeg Binary files differindex f81f09c..f81f09c 100644 --- a/_site/poc/my-first-pcb/front_design.jpeg +++ b/_site/log/my-first-pcb/front_design.jpeg diff --git a/_site/poc/my-first-pcb/gerber_back.zip b/_site/log/my-first-pcb/gerber_back.zip Binary files differindex 26659ad..26659ad 100644 --- a/_site/poc/my-first-pcb/gerber_back.zip +++ b/_site/log/my-first-pcb/gerber_back.zip diff --git a/_site/poc/my-first-pcb/gerber_front.zip b/_site/log/my-first-pcb/gerber_front.zip Binary files differindex 864334e..864334e 100644 --- a/_site/poc/my-first-pcb/gerber_front.zip +++ b/_site/log/my-first-pcb/gerber_front.zip diff --git a/_site/poc/my-first-pcb/index.html b/_site/log/my-first-pcb/index.html index 55dc58d..735a1da 100644 --- a/_site/poc/my-first-pcb/index.html +++ b/_site/log/my-first-pcb/index.html @@ -23,11 +23,11 @@ <li > <a href="/" class="link-decor-none">hme</a> </li> - <li > + <li class="active"> <a href="/log/" class="link-decor-none">log</a> </li> - <li class="active"> - <a href="/poc/" class="link-decor-none">poc</a> + <li > + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> @@ -42,7 +42,7 @@ <div class="container"> <div class="container-2"> <h2 class="center" id="title">MY FIRST PCB</h2> - <h6 class="center">14 JULY 2025</h5> + <h6 class="center">26 APRIL 2025</h5> <br> <div class="twocol justify"><p>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 diff --git a/_site/poc/my-first-pcb/source.tar.gz b/_site/log/my-first-pcb/source.tar.gz Binary files differindex c31aa22..c31aa22 100644 --- a/_site/poc/my-first-pcb/source.tar.gz +++ b/_site/log/my-first-pcb/source.tar.gz diff --git a/_site/poc/my-first-pcb/thumb_sm.jpeg b/_site/log/my-first-pcb/thumb_sm.jpeg Binary files differindex c275b12..c275b12 100644 --- a/_site/poc/my-first-pcb/thumb_sm.jpeg +++ b/_site/log/my-first-pcb/thumb_sm.jpeg diff --git a/_site/log/neo4j-a-star-search/index.html b/_site/log/neo4j-a-star-search/index.html deleted file mode 100644 index 9ea0751..0000000 --- a/_site/log/neo4j-a-star-search/index.html +++ /dev/null @@ -1,370 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <title>Neo4J A* search</title> - - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Neo4J A* search</title> - <link rel="stylesheet" href="/assets/css/main.css"> - <link rel="stylesheet" href="/assets/css/skeleton.css"> -</head> - - - - </head> - <body> - - <div id="nav-container" class="container"> - <ul id="navlist" class="left"> - - <li > - <a href="/" class="link-decor-none">hme</a> - </li> - <li class="active"> - <a href="/log/" class="link-decor-none">log</a> - </li> - <li > - <a href="/poc/" class="link-decor-none">poc</a> - </li> - <li > - <a href="/about/" class="link-decor-none">abt</a> - </li> - <li><a href="/feed.xml" class="link-decor-none">rss</a></li> - </ul> -</div> - - - - <main> - <div class="container"> - <div class="container-2"> - <h2 class="center" id="title">NEO4J A* SEARCH</h2> - <h6 class="center">14 SEPTEMBER 2025</h5> - <br> - <div class="twocol justify"><p>Back in 2018, we used <a href="https://neo4j.com/" class="external" target="_blank" rel="noopener noreferrer">Neo4J</a> graph database to track the -movement of marine vessels. We were interested in the shortest path a ship -could take through a network of about 13,000 route points. Graph theoretic -algorithms provide optimal solutions to such problems, and the set of route -points lends itself well to graph-based modelling.</p> - -<p>A graph is a finite set of vertices, and a subset of vertex pairs (edges). -Edges can have weights. In the case of vessel tracking, the route points form -the vertices of a graph; the routes between them the edges; and the distances -between them the weights. For various reasons, people are interested in -minimizing (or maximizing) the weight of a path through a set of vertices, such -as the shortest path between two ports to predict a vessel’s arrival time.</p> - -<p>Given a graph, an algorithm like Dijkstra’s search could compute the shortest -path between two vertices. In fact, this was the algorithm Neo4J shipped with -at the time. One drawback of Dijkstra’s algorithm is that it computes all the -shortest paths from the source to all other vertices before terminating at the -destination vertex. The time complexity of this exhaustive search prevented our -database from scaling beyond 4,000 route points.</p> - -<p>The following enhancement to Dijkstra’s search, also known as the A* search, -employs a heuristic to steer the search in the direction of the destination -more quickly. In the case of our network of vessels, which are on the earth’s -surface, spherical distance is a good candidate for a heuristic:</p> - -<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>package org.neo4j.graphalgo.impl; - -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -import org.neo4j.graphalgo.api.Graph; -import org.neo4j.graphalgo.core.utils.ProgressLogger; -import org.neo4j.graphalgo.core.utils.queue.IntPriorityQueue; -import org.neo4j.graphalgo.core.utils.queue.SharedIntPriorityQueue; -import org.neo4j.graphalgo.core.utils.traverse.SimpleBitSet; -import org.neo4j.graphdb.Direction; -import org.neo4j.graphdb.Node; -import org.neo4j.kernel.internal.GraphDatabaseAPI; - -import com.carrotsearch.hppc.IntArrayDeque; -import com.carrotsearch.hppc.IntDoubleMap; -import com.carrotsearch.hppc.IntDoubleScatterMap; -import com.carrotsearch.hppc.IntIntMap; -import com.carrotsearch.hppc.IntIntScatterMap; - -public class ShortestPathAStar extends Algorithm<ShortestPathAStar> { - - private final GraphDatabaseAPI dbService; - private static final int PATH_END = -1; - - private Graph graph; - private final int nodeCount; - private IntDoubleMap gCosts; - private IntDoubleMap fCosts; - private double totalCost; - private IntPriorityQueue openNodes; - private IntIntMap path; - private IntArrayDeque shortestPath; - private SimpleBitSet closedNodes; - private final ProgressLogger progressLogger; - - public static final double NO_PATH_FOUND = -1.0; - - public ShortestPathAStar( - final Graph graph, - final GraphDatabaseAPI dbService) { - - this.graph = graph; - this.dbService = dbService; - - nodeCount = Math.toIntExact(graph.nodeCount()); - gCosts = new IntDoubleScatterMap(nodeCount); - fCosts = new IntDoubleScatterMap(nodeCount); - openNodes = SharedIntPriorityQueue.min( - nodeCount, - fCosts, - Double.MAX_VALUE); - path = new IntIntScatterMap(nodeCount); - closedNodes = new SimpleBitSet(nodeCount); - shortestPath = new IntArrayDeque(); - progressLogger = getProgressLogger(); - } - - public ShortestPathAStar compute( - final long startNode, - final long goalNode, - final String propertyKeyLat, - final String propertyKeyLon, - final Direction direction) { - - reset(); - - final int startNodeInternal = - graph.toMappedNodeId(startNode); - final double startNodeLat = - getNodeCoordinate(startNodeInternal, propertyKeyLat); - final double startNodeLon = - getNodeCoordinate(startNodeInternal, propertyKeyLon); - - final int goalNodeInternal = - graph.toMappedNodeId(goalNode); - final double goalNodeLat = - getNodeCoordinate(goalNodeInternal, propertyKeyLat); - final double goalNodeLon = - getNodeCoordinate(goalNodeInternal, propertyKeyLon); - - final double initialHeuristic = - computeHeuristic(startNodeLat, - startNodeLon, - goalNodeLat, - goalNodeLon); - - gCosts.put(startNodeInternal, 0.0); - fCosts.put(startNodeInternal, initialHeuristic); - openNodes.add(startNodeInternal, 0.0); - - run(goalNodeInternal, - propertyKeyLat, - propertyKeyLon, - direction); - - if (path.containsKey(goalNodeInternal)) { - totalCost = gCosts.get(goalNodeInternal); - int node = goalNodeInternal; - while (node != PATH_END) { - shortestPath.addFirst(node); - node = path.getOrDefault(node, PATH_END); - } - } - return this; - } - - private void run( - final int goalNodeId, - final String propertyKeyLat, - final String propertyKeyLon, - final Direction direction) { - - final double goalLat = - getNodeCoordinate(goalNodeId, propertyKeyLat); - final double goalLon = - getNodeCoordinate(goalNodeId, propertyKeyLon); - - while (!openNodes.isEmpty() && running()) { - int currentNodeId = openNodes.pop(); - if (currentNodeId == goalNodeId) { - return; - } - - closedNodes.put(currentNodeId); - - double currentNodeCost = - this.gCosts.getOrDefault( - currentNodeId, - Double.MAX_VALUE); - - graph.forEachRelationship( - currentNodeId, - direction, - (source, target, relationshipId, weight) -> { - double neighbourLat = - getNodeCoordinate(target, propertyKeyLat); - double neighbourLon = - getNodeCoordinate(target, propertyKeyLon); - double heuristic = - computeHeuristic( - neighbourLat, - neighbourLon, - goalLat, - goalLon); - - updateCosts( - source, - target, - weight + currentNodeCost, - heuristic); - - if (!closedNodes.contains(target)) { - openNodes.add(target, 0); - } - return true; - }); - - progressLogger.logProgress( - (double) currentNodeId / (nodeCount - 1)); - } - } - - private double computeHeuristic( - final double lat1, - final double lon1, - final double lat2, - final double lon2) { - - final int earthRadius = 6371; - final double kmToNM = 0.539957; - final double latDistance = Math.toRadians(lat2 - lat1); - final double lonDistance = Math.toRadians(lon2 - lon1); - final double a = Math.sin(latDistance / 2) - * Math.sin(latDistance / 2) - + Math.cos(Math.toRadians(lat1)) - * Math.cos(Math.toRadians(lat2)) - * Math.sin(lonDistance / 2) - * Math.sin(lonDistance / 2); - final double c = 2 - * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - final double distance = earthRadius * c * kmToNM; - return distance; - } - - private double getNodeCoordinate( - final int nodeId, - final String coordinateType) { - - final long neo4jId = graph.toOriginalNodeId(nodeId); - final Node node = dbService.getNodeById(neo4jId); - return (double) node.getProperty(coordinateType); - } - - private void updateCosts( - final int source, - final int target, - final double newCost, - final double heuristic) { - - final double oldCost = - gCosts.getOrDefault(target, Double.MAX_VALUE); - - if (newCost < oldCost) { - gCosts.put(target, newCost); - fCosts.put(target, newCost + heuristic); - path.put(target, source); - } - } - - private void reset() { - closedNodes.clear(); - openNodes.clear(); - gCosts.clear(); - fCosts.clear(); - path.clear(); - shortestPath.clear(); - totalCost = NO_PATH_FOUND; - } - - public Stream<Result> resultStream() { - return StreamSupport.stream( - shortestPath.spliterator(), false) - .map(cursor -> new Result( - graph.toOriginalNodeId(cursor.value), - gCosts.get(cursor.value))); - } - - public IntArrayDeque getFinalPath() { - return shortestPath; - } - - public double getTotalCost() { - return totalCost; - } - - public int getPathLength() { - return shortestPath.size(); - } - - @Override - public ShortestPathAStar me() { - return this; - } - - @Override - public ShortestPathAStar release() { - graph = null; - gCosts = null; - fCosts = null; - openNodes = null; - path = null; - shortestPath = null; - closedNodes = null; - return this; - } - - public static class Result { - - /** - * the neo4j node id - */ - public final Long nodeId; - - /** - * cost to reach the node from startNode - */ - public final Double cost; - - public Result(Long nodeId, Double cost) { - this.nodeId = nodeId; - this.cost = cost; - } - } -} -</code></pre></div></div> - -<p>The heuristic function is domain-specific. If chosen wisely, it can -significantly speed up the search. In our case, we achieved a 300x speedup, -enabling us to expand our search from 4,000 to 13,000 route points. The <a href="https://github.com/neo4j-contrib/neo4j-graph-algorithms/releases/tag/3.4.0.0" class="external" target="_blank" rel="noopener noreferrer">v3.4.0</a> of the -Neo4J graph algorithms shipped with our A* search algorithm.</p> - -</div> - <p class="post-author right">by W. D. Sadeep Madurange</p> - </div> - </div> - </main> - - <div class="footer"> - <div class="container"> - <div class="twelve columns right container-2"> - <p id="footer-text">© ASCIIMX - 2025</p> - </div> - </div> -</div> - - - </body> -</html> diff --git a/_site/log/suckless-software/index.html b/_site/log/suckless-software/index.html index 30e9fe1..f9e10e4 100644 --- a/_site/log/suckless-software/index.html +++ b/_site/log/suckless-software/index.html @@ -27,7 +27,7 @@ <a href="/log/" class="link-decor-none">log</a> </li> <li > - <a href="/poc/" class="link-decor-none">poc</a> + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> diff --git a/_site/posts.xml b/_site/posts.xml index 5a31ca1..7b61271 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-20T11:31:17+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-20T21:35:40+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/poc/index.html b/_site/projects/index.html index 62b5b75..6cd47f3 100644 --- a/_site/poc/index.html +++ b/_site/projects/index.html @@ -23,7 +23,7 @@ <a href="/log/" class="link-decor-none">log</a> </li> <li class="active"> - <a href="/poc/" class="link-decor-none">poc</a> + <a href="/projects/" class="link-decor-none">poc</a> </li> <li > <a href="/about/" class="link-decor-none">abt</a> @@ -40,22 +40,27 @@ + + + + + <tr> <td class="project-item"> - <a href="e-reader" class="link-decor-none"> - <img src="e-reader/thumb_sm.png" alt="Experimental e-reader"> - <h5>Experimental e-reader</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> <td class="project-item"> - <a href="matrix-digital-rain" class="link-decor-none"> - <img src="matrix-digital-rain/thumb_sm.png" alt="The Matrix digital rain"> - <h5>The Matrix digital rain</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> @@ -66,17 +71,17 @@ <td class="project-item"> - <a href="etlas" class="link-decor-none"> - <img src="etlas/thumb_sm.jpg" alt="Etlas: e-paper dashboard"> + <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> <td class="project-item"> - <a href="bumblebee" class="link-decor-none"> - <img src="bumblebee/thumb_sm.png" alt="Bumblebee: browser automation"> - <h5>Bumblebee: browser automation</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> @@ -87,19 +92,17 @@ <td class="project-item"> - <a href="my-first-pcb" class="link-decor-none"> - <img src="my-first-pcb/thumb_sm.jpeg" alt="My first PCB"> - <h5>My first PCB</h5> + <a href="../log/matrix-digital-rain" class="link-decor-none"> + <img src="../log/matrix-digital-rain/thumb_sm.png" alt="The Matrix digital rain"> + <h5>The Matrix digital rain</h5> </a> </td> - <td class="project-item"> - - <a href="fpm-door-lock" class="link-decor-none"> - <img src="fpm-door-lock/thumb_sm.jpg" alt="Fingerprint door lock"> - <h5>Fingerprint door lock</h5> - </a> - </td> + + + + <td class="project-item"></td> + </tr> 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 94ba9d9..442c589 100644 --- a/_site/sitemap.xml +++ b/_site/sitemap.xml @@ -1,59 +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/arduino-due/</loc> -<lastmod>2024-10-05T00:00:00+08:00</lastmod> +<loc>http://localhost:4000/log/matrix-digital-rain/</loc> +<lastmod>2022-08-22T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/arduino-uno/</loc> -<lastmod>2025-04-10T00:00:00+08:00</lastmod> -</url> -<url> -<loc>/log/mosfet-switches/</loc> -<lastmod>2025-06-22T00:00:00+08:00</lastmod> +<loc>http://localhost:4000/log/e-reader/</loc> +<lastmod>2023-10-24T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/neo4j-a-star-search/</loc> -<lastmod>2025-09-14T00:00:00+08:00</lastmod> +<loc>http://localhost:4000/log/etlas/</loc> +<lastmod>2024-09-05T00:00:00+08:00</lastmod> </url> <url> -<loc>/log/suckless-software/</loc> -<lastmod>2025-11-30T00:00:00+08:00</lastmod> +<loc>http://localhost:4000/log/arduino-due/</loc> +<lastmod>2024-09-16T00:00:00+08:00</lastmod> </url> <url> -<loc>/poc/e-reader/</loc> -<lastmod>2023-10-24T00:00:00+08:00</lastmod> +<loc>http://localhost:4000/log/bumblebee/</loc> +<lastmod>2025-04-02T00:00:00+08:00</lastmod> </url> <url> -<loc>/poc/matrix-digital-rain/</loc> -<lastmod>2024-01-12T00:00:00+08:00</lastmod> +<loc>http://localhost:4000/log/my-first-pcb/</loc> +<lastmod>2025-04-26T00:00:00+08:00</lastmod> </url> <url> -<loc>/poc/etlas/</loc> -<lastmod>2024-09-05T00:00:00+08:00</lastmod> +<loc>http://localhost:4000/log/arduino-uno/</loc> +<lastmod>2025-06-10T00:00:00+08:00</lastmod> </url> <url> -<loc>/poc/bumblebee/</loc> -<lastmod>2025-04-02T00:00:00+08:00</lastmod> +<loc>http://localhost:4000/log/mosfet-switches/</loc> +<lastmod>2025-06-22T00:00:00+08:00</lastmod> </url> <url> -<loc>/poc/my-first-pcb/</loc> -<lastmod>2025-07-14T00:00:00+08:00</lastmod> +<loc>http://localhost:4000/log/fpm-door-lock/</loc> +<lastmod>2025-08-18T00:00:00+08:00</lastmod> </url> <url> -<loc>/poc/fpm-door-lock/</loc> -<lastmod>2025-10-03T00:00:00+08:00</lastmod> +<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/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>/poc/</loc> +<loc>http://localhost:4000/projects/</loc> </url> </urlset> |
